2017-04-10 34 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聲明的內容相同。