0

以下を書きました。私の目標は、コードがテキスト アドベンチャー ゲームの文章を読み取るための堅牢な方法を試して作成することでした。h_answer1 and 2ゲームに認識させたいキーワードを入力したリスト ( ) を作成し、mansr関数でユーザー入力を要求し (mansrその引数を小文字にします)、その入力を というリストに分割しましたsplit_ans

これは約半分の時間で機能します。しかし、「私は検索すると思います」などの特定のフレーズを入力すると、文に「検索」が表示されていても、else ステートメントが表示されます。

私の理解が正しければ、for ループはリストcheck内の各文字列と等しく設定されてsplit_ansおり、if ステートメントはその特定がリストcheck内の何かと一致するかどうかを確認していh_answerます。では、if 条件が満たされたときに python が else ステートメントに移動するのはなぜでしょうか?

def some_function():
   print "some stuff"
   ans = mansr(raw_input())
   split_ans = ans.split(' ')

   h_answer1 = ['walk', 'run', 'go']
   h_answer2 = ['search', 'look']

      for check in split_ans:
         if check in h_answer1:
            print "Some stuff"
            break
         elif check in h_answer2:
            print "Some stuff"
            ans = mansr(raw_input(' '))
            split_ans = ans.split(' ')
              <section omitted, it's a nested for-loop>
         else:
             print "I don't understand that input."
             some_function()

トレースバックはあまり明らかにしません (より一般的にするために上で編集some_functionされた という名前が付けられました):long_hallway

  File "test06.py", line 171, in <module> start()
  File "test06.py", line 92, in start long_hallway()
  File "test06.py", line 59, in long_hallway long_hallway()
  File "test06.py", line 59, in long_hallway long_hallway()
  File "test06.py", line 13, in long_hallway
  ans = mansr(raw_input('\n>>> '))
4

1 に答える 1

0

そのトレースバックは非常に有益ではありません。関連する例外は何でしたか?

考えられる問題の明らかな原因の 1 つは、ans 変数と split_ans 変数を再利用していることです。split_ans を反復しているため、実行中に変更しようとしているため、問題が発生する可能性があります。これはノーノーです

もう 1 つは、続行するのではなく、休憩したいのですが、よろしいですか? 最初のヒットの後に解析ループをエスケープしますか?

于 2013-03-23T17:15:45.553 に答える