以下を書きました。私の目標は、コードがテキスト アドベンチャー ゲームの文章を読み取るための堅牢な方法を試して作成することでした。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>>> '))