基于Python文本的游戏:使用While循环和Try-Except的猜谜游戏
我正在编写一个简单的基于文本的游戏,以增强我对Python的了解。在游戏的一个阶段,用户需要猜测集合[1,5]中的一个数字,才能实现自己的愿望。他们只试了三次。我有两个问题: 1) 让我们假设基于Python文本的游戏:使用While循环和Try-Except的猜谜游戏,python,python-2.7,while-loop,try-except,Python,Python 2.7,While Loop,Try Except,我正在编写一个简单的基于文本的游戏,以增强我对Python的了解。在游戏的一个阶段,用户需要猜测集合[1,5]中的一个数字,才能实现自己的愿望。他们只试了三次。我有两个问题: 1) 让我们假设genie_number被随机选择为3。用户每次猜测后,该值是否会改变?我不希望程序在每次猜测后随机选择另一个整数。它应该保持不变,以便用户有3/5的机会猜对它 2) 我想惩罚那些不只是猜测整数的用户,我已经在除了ValueError一节中这样做了。但是,如果用户连续进行三次非整数猜测并用尽所有尝试,我希望
genie_number
被随机选择为3。用户每次猜测后,该值是否会改变?我不希望程序在每次猜测后随机选择另一个整数。它应该保持不变,以便用户有3/5的机会猜对它
2) 我想惩罚那些不只是猜测整数的用户,我已经在除了ValueError
一节中这样做了。但是,如果用户连续进行三次非整数猜测并用尽所有尝试,我希望循环重新指向else:dead(“精灵将你变成青蛙”)
。现在它给了我下面的错误消息。我该如何解决这个问题
“在我实现你的第一个愿望之前,”精灵说,“你必须回答这个问题。”
“我想到的是集合[1,5]中包含的离散整数。尤哈
(这不是什么谜,但你最好照他说的去做。)
你猜怎么着?>什么
这不是一个选择。剩余次数:2次
你猜怎么着?>什么
这不是一个选择。剩余人数:1
你猜怎么着?>什么
这不是一个选择。剩余尝试次数:0
回溯(最近一次呼叫最后一次):
文件“ex36.py”,第76行,在
开始()
文件“ex36.py”,第68行,在开始处
灯()
文件“ex36.py”,第48行,在lamp中
摩擦()
文件“ex36.py”,第38行,在rub中
祝你一路顺风
文件“ex36.py”,第30行,在wish_1_riddle中
如果guess==精灵号:
UnboundLocalError:赋值前引用的局部变量“guess”
以下是我目前的代码:
def wish_1_ridle():
打印“\n‘在我实现你的第一个愿望之前,’精灵说,‘你必须回答这个谜语!’
print“'我正在考虑集合[1,5]中包含的离散整数。您有三次尝试。”
“打印”(这不是什么谜语,但你最好照他说的去做。)
精灵号=randint(1,5)
尝试=0
尝试剩余=3
而<3时:
尝试:
guess=int(原始输入(“您的猜测是什么?>”)
尝试次数+=1
尝试u剩余-=1
如果guess==精灵号:
打印“正确!”
祝你好运
其他:
打印“不正确!剩余尝试次数:%d”%t剩余尝试次数
持续
除值错误外:
尝试次数+=1
尝试u剩余-=1
打印“这不是一个选项。精灵会惩罚你一次尝试。小心!”
打印“剩余尝试次数:%d”%t剩余尝试次数
如果guess==精灵号:
祝你好运
其他:
死亡(“妖怪把你变成青蛙。”)
回答您的第一个问题,否。如果您继续呼叫randint(1,5)
,是的,它会改变,但一旦您分配它,值是固定的:
>>> import random
>>> x = random.randint(1, 10)
>>> x
8
>>> x
8
>>> x
8
>>> random.randint(1, 10)
4
>>> random.randint(1, 10)
8
>>> random.randint(1, 10)
10
如您所见,一旦我们将随机数分配给x
,x
始终保持不变。但是,如果我们继续调用randint()
,它就会改变
回答第二个问题时,您不应该在int(raw_input())
后面的trys中添加1,如果该值是整数,它也会在trys中添加1。相反,尝试将您的代码合并到以下内容中:
>>> tries = 0
>>> while tries < 3:
... try:
... x = raw_input('Hello: ')
... x = int(x)
... except ValueError:
... tries+=1
...
Hello: hello
Hello: 1
Hello: 4
Hello: bye
Hello: cool
>>>
但是,如果输入正确,guess
将成为:
>>> tries = 0
>>> while tries < 3:
... try:
... guess = int(raw_input('Enter input: '))
... print guess
... except ValueError:
... tries+=1
...
Enter input: 4
4
Enter input: hello
Enter input: 9
9
Enter input: bye
Enter input: 6
6
Enter input: greetings
>>> guess
6
>>>
如您所见,它是一个错误…)由于该错误,x
永远不会被赋值,除非我们实际提供整数输入,因为该代码永远不会到达打印x
,因为它因错误而中断:
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> for k in range(1, 3):
... try:
... x = int(raw_input('Hello: '))
... print x
... except ValueError:
... pass
...
Hello: hello
Hello: 8
8
>>> x
8
>>>
>x
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
名称错误:未定义名称“x”
>>>对于范围(1,3)内的k:
... 尝试:
... x=int(原始输入('Hello:'))
... 打印x
... 除值错误外:
... 通过
...
你好:你好
你好:8
8.
>>>x
8.
>>>
当我们输入一个整数时,x
有效。您的答案确实正确。当我运行程序时,我误读了一条错误消息,得出了错误的结论。
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> for k in range(1):
... x = 1
... print x
...
1
>>> x
1
>>>
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> for k in range(1, 3):
... try:
... x = int(raw_input('Hello: '))
... print x
... except ValueError:
... pass
...
Hello: hello
Hello: bye
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>>
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> for k in range(1, 3):
... try:
... x = int(raw_input('Hello: '))
... print x
... except ValueError:
... pass
...
Hello: hello
Hello: 8
8
>>> x
8
>>>