Python 3.3:无法获取函数以返回除None之外的任何内容

时间:2013-08-16 16:50:49

标签: python function python-3.x return nonetype

所以,这是相关的代码:

def action():
    print("These are the actions you have available:")
    print("1 - Change rooms")
    print("2 - Observe the room (OUT OF ORDER)")
    print("3 - Check the room(OUT OF ORDER)")
    print("4 - Quit the game")

    choice = input("What do you do?\n> ")
    if choice in (1, "move"):
        return(1)
    elif choice in (4, "quit"):
        return(4)

play = True

while play == True:
    ###some functions that aren't relevant to the problem
    choice = action()
    print(choice)
    if choice == 1:
        change_room()
        ## more code...

该函数始终返回None。我把print(选择)放在那里看看“choice”有什么值,它总是没有,而且“if choice == 1”块永远不会运行。所以我觉得函数根本没有返回一个值,所以错误可能在return()的action()中,但是我已经在这里和其他地方检查了,我看不出它有什么问题。

1 个答案:

答案 0 :(得分:4)

input()总是返回一个字符串,但是你正在测试整数。让它们成为字符串:

if choice in ('1', "move"):
    return 1

您输入的choice与您的任何测试都不匹配,因此该函数在没有达到显式return语句的情况下结束,Python恢复为None的默认返回值。 / p>

更好的是,用字典替换整个if/elif/elif树:

choices = {
    '1': 1,
    'move': 1,
    # ...
    '4': 4,
    'quit': 4,
}

if choice in choices:
    return choices[choice]
else:
    print('No such choice!')