蟒蛇猜谜游戏保持返回相同的输出



我正在尝试创建一个让你猜出数字 0 - 100 的 python 函数。 每次我运行代码时,它总是打印得更低,即使我输入了尽可能少的数字 (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()

raw_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()

你的raw_input给你一个字符串。你应该把它胁迫到一个int

    x = raw_input("Guess My Number 1 - 100")
    x = int(x)

这将修复您的代码。

如果你开始使用 Python 3,你就不会遇到这个问题,因为它会给你一个错误,而不是允许你在strint类型之间进行比较(这在 Python 2 中给出了无意义的结果)。

您还需要在代码中添加qz变量的global声明:

def whle(i):
    global q
    global z
    # ...
def number():
    global q

这将允许您在全局命名空间中覆盖它们。通常,您只会创建一个同名的局部变量,该变量隐藏全局变量,这意味着您的更改对程序的其余部分不可见(因为它们不是更改)。

但是,我认为qz的逻辑确实需要重新考虑一下:在原始脚本中,一次只能设置一个True,但必须q True才能让你的程序检查z的值。总之,这意味着每当程序检查z时,它都会False 。这需要重新思考;是要完全删除变量,还是更改qz的设置方式?


在这一行下方是不必要的东西,但我仍然推荐。


您可能还希望通过捕获生成的ValueError来检查无效输入:

    x = raw_input("Guess My Number 1 - 100")
    try:
        x = int(x)
    except ValueError:
        print "That's not a number"
        return

我强烈建议重命名所有函数和变量。 qguessed_correctlyzuser_quitxguessitargetwhletake_guessnumbernew_game。(或类似的东西)

如果你在提示符的末尾放置一个换行符(n raw_input),它会减少用户的困惑。

这段代码中还有更多可以做一些调整,但我想我会把你留在那里。

你需要从 raw 获取 int() 并检查 try 是否得到字符串。

from random import randrange
start_againg = True
max_number = 100
count_possible = 5
while start_againg is True:
    count_possible -= 1
    random_number = randrange(0, max_number + 1)
    try:
        number = int(raw_input("Guess My Number 1 - {0}n".format(max_number)))
        if number < random_number:
            print "Higher"
        elif number > random_number:
            print "lower"
        elif number == random_number:
            print "correct"
            start_againg = False
        if count_possible == 0:
            print "attempts ended"
            start_againg = False
    except Exception, e:
        print "Guess my NUMBER, not string!"
有一个

更短的方法可以做到这一点。

from random import randint
while True:
    n = randint(0,100)
    while True:
        guess = int(input('> '))
        if guess>n:
            print('Higher')
        elif guess<n:
            print('Lower')
        elif guess==n:
            print('Correct!')
            break
        else:
            print('Guess My Number You Goofy Goose!')

最新更新