我之前已经问过类似的问题,我现在已经开始讨论这段代码几个小时了,有人可以帮帮我吗?
这段代码在一个名为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”,它会重新启动游戏。
由于
答案 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
声明也是如此。