Python猜测游戏保持返回相同的输出
我正在尝试创建一个python函数,让您猜一个数字0-100。 每次我运行代码时,它总是打印得更低,即使我输入了尽可能低的数字(0)。如何防止这种情况发生,并使代码正确运行 这是我的密码:Python猜测游戏保持返回相同的输出,python,random,Python,Random,我正在尝试创建一个python函数,让您猜一个数字0-100。 每次我运行代码时,它总是打印得更低,即使我输入了尽可能低的数字(0)。如何防止这种情况发生,并使代码正确运行 这是我的密码: from random import * z = False def whle(i): x = raw_input("Guess My Number 1 - 100") if x < i: print "Higher" q = False
from random import *
z = False
def whle(i):
x = raw_input("Guess My Number 1 - 100")
if x < i:
print "Higher"
q = False
z = True
elif x > i:
print "Lower"
q = False
z = True
elif x == i:
print "Correct!"
q = True
z = False
else:
print "Guess My Number You Goofy Goose!"
q = False
z = True
def number():
y = randrange(0,101)
q = False
while q == False:
whle(y)
while z == False:
number()
来自随机导入的*
z=假
def whle(一):
x=原始输入(“猜我的数字1-100”)
如果xi:
打印“下”
q=错误
z=真
elif x==i:
打印“正确!”
q=正确
z=假
其他:
打印“猜猜我的号码,你这个傻瓜!”
q=错误
z=真
def编号():
y=随机范围(0101)
q=错误
而q==False:
whle(y)
当z==False时:
编号()
raw\u input
返回一个字符串,因此需要通过调用int()
来包装它。像这样:
x = int(raw_input("Guess My Number 1 - 100"))
您不应该能够比较这些类型,而'1'>1
返回True
是Python 2中的一个错误。Python 3正确地处理了它:
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
>>> '1' > 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()
Python 3.4.3+(默认,2015年10月14日,16:03:50)
>>> '1' > 1
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:无序类型:str()>int()
raw\u input
返回一个字符串,因此需要通过调用int()
来包装它。像这样:
x = int(raw_input("Guess My Number 1 - 100"))
您不应该能够比较这些类型,而'1'>1
返回True
是Python 2中的一个错误。Python 3正确地处理了它:
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
>>> '1' > 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()
Python 3.4.3+(默认,2015年10月14日,16:03:50)
>>> '1' > 1
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:无序类型:str()>int()
您的原始输入将为您提供一个字符串。您应该将其强制为int
:
x = raw_input("Guess My Number 1 - 100")
x = int(x)
这将修复您的代码
如果您开始使用Python3,您不会遇到这个问题,因为它会给您一个错误,而不允许您在str
和int
类型之间进行比较(这在Python2中会产生无意义的结果)
您还需要为q
和z
变量向代码中添加global
声明:
def whle(i):
global q
global z
# ...
def number():
global q
这将允许您在全局命名空间中覆盖它们。通常情况下,您只需创建一个名称相同的局部变量,该局部变量将覆盖全局变量,这意味着您的更改对程序的其余部分不可见(因为它们不是更改)
然而,我认为q
和z
的逻辑确实需要重新思考一下:在原始脚本中,一次只有一个设置为True
,但是q
必须是True
,以便程序检查z
的值。总之,这意味着每当程序检查z
时,它将是False
。这需要重新思考;是否要完全删除变量,或更改q
和z
的设置方式
在这条线下面是不必要的东西,但我仍然推荐
您可能还希望通过捕获结果ValueError
,检查无效输入:
x = raw_input("Guess My Number 1 - 100")
try:
x = int(x)
except ValueError:
print "That's not a number"
return
我非常推荐重命名所有函数和变量<代码>q
→ <代码>猜测正确,z
→ <代码>用户退出,x
→ <代码>猜测,i
→ <代码>目标,whle
→ <代码>猜测,数字
→ <代码>新游戏。(或类似的东西)
如果在原始输入
提示的末尾加上一个换行符(\n
),用户就不会那么困惑了
这段代码中有更多内容需要调整,但我想我会把你留在那里。你的
原始输入给了你一个字符串。您应该将其强制为int
:
x = raw_input("Guess My Number 1 - 100")
x = int(x)
这将修复您的代码
如果您开始使用Python3,您不会遇到这个问题,因为它会给您一个错误,而不允许您在str
和int
类型之间进行比较(这在Python2中会产生无意义的结果)
您还需要为q
和z
变量向代码中添加global
声明:
def whle(i):
global q
global z
# ...
def number():
global q
这将允许您在全局命名空间中覆盖它们。通常情况下,您只需创建一个名称相同的局部变量,该局部变量将覆盖全局变量,这意味着您的更改对程序的其余部分不可见(因为它们不是更改)
然而,我认为q
和z
的逻辑确实需要重新思考一下:在原始脚本中,一次只有一个设置为True
,但是q
必须是True
,以便程序检查z
的值。总之,这意味着每当程序检查z
时,它将是False
。这需要重新思考;是否要完全删除变量,或更改q
和z
的设置方式
在这条线下面是不必要的东西,但我仍然推荐
您可能还希望通过捕获结果ValueError
,检查无效输入:
x = raw_input("Guess My Number 1 - 100")
try:
x = int(x)
except ValueError:
print "That's not a number"
return
我非常推荐重命名所有函数和变量<代码>q
→ <代码>猜测正确,z
→ <代码>用户退出,x
→ <代码>猜测,i
→ <代码>目标,whle
→ <代码>猜测,数字
→ <代码>新游戏。(或类似的东西)
如果在原始输入
提示的末尾加上一个换行符(\n
),用户就不会那么困惑了
在这段代码中有更多的东西可以通过一些调整来实现,但是我