为什么我的函数会执行应做的事情,然后又无法继续执行代码呢?

时间:2019-01-25 15:38:44

标签: python

我正在选择自己的冒险游戏,并且具有检查您在控制台中输入的内容是否可接受的功能。首先,如果您键入其他任何内容,则只能键入“打开灯”,否则它将作为错误返回,并提示您键入实际操作。我遇到的问题是在您输入不被接受的内容后,输入错误后您将无法继续。

actions = ['help','turn light on',]

def errorcheck(player_input):
    if player_input in actions:
        error = False
        return()
    else:
        error = True
        while error == True:
            print('i dont know what you mean by',player_input)

            player_input = input('>')

            if player_input in actions:
                error = False
            else:
                error = True

print('welcome to TITLE')
print('type help at anytime to see your options')
print('">" that symbol promts you to do something')
print('')
print('you wake up, its dark')



player_input = input('>')

errorcheck(player_input)

if error == False:
    if player_input == ('help'):
        playerhelp = True
        while playerhelp == True:
            print('you can: turn light on')
            playerhelp = False

2 个答案:

答案 0 :(得分:1)

errorcheck可能会修改它接受作为参数的player_input。它是一个新的局部变量,与全局player_input没有任何关系。

天真的解决方案是将player_input设置为全局变量,但是由于以下几个原因,这将是一个糟糕的反模式解决方案:

  • 全局变量往往会导致混乱,难以调试的代码
  • 函数最好应该做一件事情,并且该事情最好应该是它的名字所暗示的。

相反,让errorcheck仅根据名称提示检查输入。

def errorcheck(player_input):
    return player_input not in actions

player_input = None

while errorcheck(player_input):
    player_input = input('>')

此时,将errorcheck作为函数似乎有点多余。您真的不需要它:

player_input = None

while player_input not in actions:
    player_input = input('>')

答案 1 :(得分:-1)

首先,绝对不要在主代码中使用函数中的局部变量。如果要访问error,则应这样返回:

def errorcheck(player_input):
    if player_input in actions:
        error = False
    else:
        error = True
        while error == True:
            print('i dont know what you mean by',player_input)

            player_input = input('>')

            if player_input in actions:
                error = False
            else:
                error = True
    return error

第二,难怪您的程序在输入help之后停止,因为之后没有更多代码了。如果希望不断要求用户输入内容,则必须在整个解析逻辑周围放一个循环...