Defining a Function in python 3.6 and expecting True or False but returning None
定义性别():
创建应返回true或false的函数
1 | gener = input('Choose "1" for Male or "2" for Female: ') |
"gener"应接收"1"或"2"作为字符串
1 2 3 4 5 6 7 | if gener == '1': print('You selected Male') return True elif gener == '2': print('You selected Female') return False else: |
号
问题就在这里。它应该再次执行函数gender(),以便用户能够正确地重新插入"1"或"2"
1 2 | print('Invalid character') gender() |
但在打印函数gender()时,即使再次执行gender()以接收新值,它也会返回"none",并继续执行else语句的值。
1 | print(gender()) |
。
在python中,如果不返回任何内容,则每个函数都返回
它没有——它只是调用
将其更改为返回该函数调用的返回:
1 2 3 4 5 6 7 8 9 | if gener == '1': print('You selected Male') return True elif gener == '2': print('You selected Female') return False else: print('Invalid character') return gender() |
这将修复您的代码,以使其更好。不要使用递归。
使用不需要的递归将始终将新数据打包到调用堆栈中。您可以使用循环而不是递归来优化它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | def gender(): """Choose Male or Femal, return True for Male and False for Female""" gener ="" # prepare an invalid input while gener not in ['1','2']: # loop until input gets valid gener = input('Choose"1" for Male or"2" for Female: ') if gener == '1': print('You selected Male') return True # elif gener == '2': # print('You selected Female') # return False else: # no need for explicit check, it can only be 1 or 2 print('You selected Female') return False print(gender()) |
号
政治正确性的旁注:
- 并非地球上所有的人类都称自己为男性或女性
- 不是地球上所有的人都不知道这个决定
- 性别可能在生活中发生变化