コードをどのようにインデントしたかはわかりませんが、問題は次のとおりだと思います。
raw_input("\n\nPress quit to exit")
次のようにする必要があります。
direction = raw_input("\n\nPress quit to exit")
ただし、いくつか問題があります。
if direction not in game:
direction = raw_input("Enter your direction: ")
location = game[direction]
direction = direction.lower()
print location
コードのこの時点で、入力された方向は quit ではなく、辞書にもありません。したがって、この時点で quit と入力すると、次のようになります。
Traceback (most recent call last):
File "homework.py", line 21, in <module>
location = game[direction]
KeyError: 'quit'
これを解決するには 2 つの方法があります。試してから例外を処理するか、辞書のメンバーシップを再度確認するかです。例えば:
if direction not in game:
try:
direction = raw_input("Enter your direction: ")
location = game[direction]
direction = direction.lower()
print location
except KeyError:
pass
except KeyError
デバッグ中に貴重な情報が失われるため、すべての例外を黙らせたくない場合にのみ使用しました。それが辞書にあるかどうかを確認する方法を知っていることを示したので、そのアプローチを再度示す必要はありません。
したがって、それをまとめると、次のようになります。
#Create a Dictionary to represent the possible
#exits from a location in an adventure game
game = {"north" : "North leads to garden.",
"south" : "South leads to the kitchen.",
"east" : "East leads to the dining room.",
"west" : "West leads to the living room."
}
direction = raw_input("Enter your direction: ")
while direction != "quit":
direction = direction.lower()
if direction in game:
location = game[direction]
direction = direction.lower()
print location
if direction not in game:
try:
direction = raw_input("Enter your direction: ")
location = game[direction]
direction = direction.lower()
print location
except KeyError:
pass
direction = raw_input("\n\nPress quit to exit: ")
ここまで来たら、プログラムがどのように実行されているかを確認する必要があります。スクリプトの実行中に、同じ変数を設定して、ユーザーに複数回入力を求めていることがわかります。これで、必要な呼び出しを削除することを検討する必要があります。ブロックを追加したtry: except
ので、以前の辞書のメンバーシップのチェックは必要ありません。
#Create a Dictionary to represent the possible
#exits from a location in an adventure game
game = {"north" : "North leads to garden.",
"south" : "South leads to the kitchen.",
"east" : "East leads to the dining room.",
"west" : "West leads to the living room."
}
# Initialize the direction variable
direction = ""
# Keep looping user types in quit
while direction != "quit":
try:
# Take the user input at the start of the loop
direction = raw_input("Enter your direction Or quit to exit: ")
# Get the location string if it exists
location = game[direction]
# Make the string lower case
direction = direction.lower()
# Display location message
print location
# If this KeyError is raised user has entered a location not in the
# dictionary
except KeyError:
# We can do nothing because we are just going to get new user input
# next time the loop runs!
pass
この時点で、貨物コードを削除するのが良いと思います。なぜ使用するのですか:
location = game[direction]
direction = direction.lower()
小文字の指示が必要な場合は、上の 10 行で小文字として定義できます。次に、同じメッセージを常に尋ねるのは面倒なので、中隔の終了メッセージを尋ねます。したがって、不要な行を削除すると、次のようになります。
game = {"north" : "North leads to garden.",
"south" : "South leads to the kitchen.",
"east" : "East leads to the dining room.",
"west" : "West leads to the living room."
}
direction = ""
while direction != "quit":
try:
direction = raw_input("Enter your direction: ").lower()
print game[direction]
except KeyError:
direction = raw_input("The direction you have entered is invalid\nEnter a direction or quit to exit: ")
ここでは、場所変数も削除しました。この例では、方向が重要な情報であるため不要です。また、存在しない Key を出力しようとすると KeyError が発生するので、これはすばらしいことです。
また、呼び出したい場合.lower()
は、最初に変数を設定する必要がないことに注意してください。次のように、辞書にアクセスしているときに実行できます。
print game[direction].lower()