不使用局部变量“ANSWER”(pycharm)

时间:2017-04-10 22:26:07

标签: variables pycharm restart local-variables

我之前已经问过类似的问题,我现在已经开始讨论这段代码几个小时了,有人可以帮帮我吗?

这段代码在一个名为game()的函数中,它有一个while循环,这是while循环的'else'部分。

    else:
        ANSWER = input("Sorry, game over. Would you like to try again? \'y/n\'")
        if 'y' or 'yes' == ANSWER:
            game()
        elif 'n' or 'no' == ANSWER:
            print("See you next time.")
            break
        else:
            ANSWER = input("Sorry, I didn't get that. Restart? \'y/n\'")

game()

Pycharm告诉我,最后一行代码没有使用局部变量ANSWER。我的缩进是否已关闭?是因为我重新分配了答案吗?我之前尝试过ANSWER ==如果'y'或'yes':(和“no”行的格式相同)并且两者都没有区别,所以这不是问题..

此外,无论我输入什么内容,它都会在显示的第4行执行'game()'命令。我可以输入“alksdfj”,它会重新启动游戏。

由于

2 个答案:

答案 0 :(得分:0)

如果没有看到更多的代码,很难确定,但看起来你已经归结为这样的模式:

begin loop
   assign value1 to ANSWER
   read from ANSWER
   assign value2 to ANSWER
end loop

如果你“展开”该循环,通过跟踪你依次到达的行,你会得到如下代码:

assign value1 to ANSWER
read from ANSWER
assign value2 to ANSWER
assign value1 to ANSWER
read from ANSWER
assign value2 to ANSWER

因此,每次将值2分配给ANSWER时,都会立即用value1覆盖它(下一次循环)。

你可能想要的更像是这样:

assign value1 to ANSWER
begin loop
   read from ANSWER
   assign value2 to ANSWER
end loop

哪个展开如下:

assign value1 to ANSWER
read from ANSWER
assign value2 to ANSWER
read from ANSWER
assign value2 to ANSWER

所以现在,当我们绕过循环时,我们仍然有值2来读取。

答案 1 :(得分:0)

这是因为您没有使用ANSWER。当Python查看您的if语句时,它会将'y'评估为True,因此它永远不会评估'yes' == ANSWER。尝试:

if ANSWER.lower() in ('y', 'yes'):

elif声明也是如此。