Python猜测游戏保持返回相同的输出

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

我正在尝试创建一个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
        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
),用户就不会那么困惑了

在这段代码中有更多的东西可以通过一些调整来实现,但是我