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

标签 python python-3.x function if-statement boolean

<分区>

定义性别():

创建一个应该返回 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())

政治正确性的旁注:

  • 并不是地球上所有的人都称自己为男性或女性
  • 并非地球上所有的人都不想让这个决定为人所知
  • 性别可能会随着时间的推移而改变

关于python - 在 python 3.6 中定义函数并期望 True 或 False 但返回 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48606460/

相关文章:

python - 如何在python中自动解析 bool 格式的conf文件中的配置选项?

javascript - 如何处理只被一个函数使用的函数

Python:无法打印字典键和值

python - 在 Kubuntu 11.04 上更新到 Python 3——我应该/应该卸载以前的版本吗?

python-3.x - 我如何单独反转每个单词而不是整个字符串

c++ - "invalid use of non static member function"这是什么?

function - 在Erlang中,有没有一种创建空函数的方法?

python - 如何在 PyCharm 中制作部分

python - 只需输入一次 PEM 密码短语

python - 如何在Tensorflow中用Logistic层替换Softmax输出层?