在python 3.6中定义一个函数并期望True或False但返回None

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中,如果不返回任何内容,则每个函数都返回None。检查你的if .. .elif ... elseelse在哪里退货?

它没有——它只是调用gender(),然后隐式返回None

将其更改为返回该函数调用的返回:

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())

政治正确性的旁注:

  • 并非地球上所有的人类都称自己为男性或女性
  • 不是地球上所有的人都不知道这个决定
  • 性别可能在生活中发生变化