Python の知識を深めるために、単純なテキストベースのゲームを書いています。ゲームの 1 つの段階で、ユーザーは自分の願いを叶えるためにセット [1, 5] の数字を推測する必要があります。試行回数は 3 回のみです。2 つの質問があります。
1) がランダムに選択されて 3 であると仮定しgenie_number
ます。この値は、ユーザーが推測するたびに変化しますか? プログラムが各推測の後に別の整数をランダムに選択することは望ましくありません。ユーザーが正しく推測できる確率が 3/5 になるように、同じままにしておく必要があります。
2) 整数だけを推測しないことでユーザーにペナルティを課したいのですが、except ValueError
セクションの下でそれを行いました。しかし、ユーザーが 3 回連続して非整数の推測を行い、すべての試行を使い果たした場合は、ループを にリダイレクトする必要がありますelse: dead("The genie turns you into a frog.")
。現在、以下のエラーメッセージが表示されます。これを修正するにはどうすればよいですか?
'Before I grant your first wish,' says the genie, 'you must answer this
'I am thinking of a discrete integer contained in the set [1, 5]. You ha
(That isn't much of a riddle, but you'd better do what he says.)
What is your guess? > what
That is not an option. Tries remaining: 2
What is your guess? > what
That is not an option. Tries remaining: 1
What is your guess? > what
That is not an option. Tries remaining: 0
Traceback (most recent call last):
File "ex36.py", line 76, in <module>
start()
File "ex36.py", line 68, in start
lamp()
File "ex36.py", line 48, in lamp
rub()
File "ex36.py", line 38, in rub
wish_1_riddle()
File "ex36.py", line 30, in wish_1_riddle
if guess == genie_number:
UnboundLocalError: local variable 'guess' referenced before assignment
これまでの私のコードは次のとおりです。
def wish_1_riddle():
print "\n'Before I grant your first wish,' says the genie, 'you must answer this riddle!'"
print "'I am thinking of a discrete integer contained in the set [1, 5]. You have three tries.'"
print "(That isn't much of a riddle, but you'd better do what he says.)"
genie_number = randint(1, 5)
tries = 0
tries_remaining = 3
while tries < 3:
try:
guess = int(raw_input("What is your guess? > "))
tries += 1
tries_remaining -= 1
if guess == genie_number:
print "Correct!"
wish_1_grant()
else:
print "Incorrect! Tries remaining: %d" % tries_remaining
continue
except ValueError:
tries += 1
tries_remaining -= 1
print "That is not an option. The genie penalizes you a try. Be careful!"
print "Tries remaining: %d" % tries_remaining
if guess == genie_number:
wish_1_grant()
else:
dead("The genie turns you into a frog.")