定义性别():
创建一个应该返回 True 或 False 的函数
gener = input('Choose \"1\" for Male or \"2\" for Female: ')
“gener”应该接收“1”或“2”作为字符串
if gener == '1':
print('You selected Male')
return True
elif gener == '2':
print('You selected Female')
return False
else:
问题就在这里。它应该再次执行函数 gender() 以便用户可以正确地重新插入“1”或“2”
print('Invalid character')
gender()
但是当打印函数 gender() 时它返回“无”,即使再次执行 gender() 以接收新值,继续 Else 语句的值
print(gender())
在 python 中,如果您不返回任何内容,则每个函数都会返回 None
。检查您的 if .. .elif ... else
- else
在哪里返回任何内容?
它不会 - 它只是调用 gender()
(然后隐式返回 None
)
将其更改为返回该函数调用的返回值:
if gener == '1':
print('You selected Male')
return True
elif gener == '2':
print('You selected Female')
return False
else:
print('Invalid character')
return gender()
这将修复您的代码,使其更好地不使用递归。
使用非必要递归会一直将新数据打包到调用堆栈中。您可以使用循环而不是递归来优化它:
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())
政治正确性的旁注:
- 并不是地球上所有的人都称自己为男性或女性
- 并非地球上所有的人都不想让这个决定为人所知
- 性别可能会随着时间的推移而改变