2017-04-10 11 views
0

私はこれまでに尋ねられた同様の質問を知っていて、数時間前からこのコードセクションを手に入れています。ローカル変数 "ANSWER"が使用されていない(pycharm)

このコードはwhileループを持つgame()という関数内にあり、これは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を再割り当てしているからですか?私は早くANSWER ==を 'y'や 'yes'にしてみましたが( "no"行と同じ形式)、違いはありませんでしたので問題はありません。

また、私が答えを入力すると、表示されている4行目の 'game()'コマンドが実行されます。私は "alksdfj"と打てばゲームを再開します。

おかげ

+0

1)「私のインデントはオフですか?」 - あなたのコードをもっと見ることなく伝えることは不可能です。 2) "私は早くANSWER ==を 'y'や 'yes'にしてみました:...そうではありません。はい、問題の* 1 *です。あなたのテストは常に真実です。 '' y 'または 'yes' == ANSWER'は' 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(次回でそれを上書き:あなたは順番に達する行が、あなたはこのようなコードを取得します彼はループする)。このようにアンロール

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と同じことです。

関連する問題