2017-04-10 82 views
0

我知道类似的问题已经被问过了,我一直在讨论这段代码现在几个小时,任何人都可以帮助我吗?局部变量“ANSWER”未被使用(pycharm)

此代码位于名为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吗?我试着早些时候做答案==如果'是'或'是':(和“否”行相同的格式)并且都没有什么不同,所以这不是问题..

另外,无论我输入的答案是,在显示的第4行显示'game()'命令。我可以输入“alksdfj”,它会重新开始游戏。

感谢

+0

1)“我的缩进是否关闭?” - 如果没有看到更多的代码,这是不可能的。 2)“如果'y'或'yes',我早些时候试着回答==:所以这不是问题。”是的,它是*一个*的问题。你的测试总是如此。 'if'y'or'yes'== ANSWER'被评估为True,因为'if'y''总是为真。你想要的是'if(ANSWER =='y')或(ANSWER =='yes'):'。这同样适用于elif语句。 – Craig

回答

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回答时,你立即用VALUE1覆盖它(大约t下一次他循环)。

你大概想更重要的是这样的:

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,从阅读。

0

这是因为您没有使用ANSWER。当Python查看您的if声明时,它将评估'y'True,因此它从不评估'yes' == ANSWER。请尝试:

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

您的elif声明的内容相同。