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

时间:2016-01-24 00:14:16

标签: 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
        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()

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

你的raw_input正在给你一个字符串。您应该将其强制转换为int

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

这将修复您的代码。

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

您还需要在代码中为globalq变量添加z声明:

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

def number():
    global q

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

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

在这一行之下是不必要但我仍然建议的事情。

您可能还想通过捕获结果z

来检查无效输入
ValueError

我非常建议重命名所有的函数和变量。 x = raw_input("Guess My Number 1 - 100") try: x = int(x) except ValueError: print "That's not a number" return qguessed_correctlyzuser_quitxguessi,{{ 1}}→targetwhletake_guess。 (或者那种效果)

如果在number的提示符末尾添加换行符(new_game),则对用户来说会更加混乱。

此代码中有更多内容可以通过一些调整来实现,但我想我会留下你的。

答案 2 :(得分:0)

你需要从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!"

答案 3 :(得分:0)

这样做的方法要短得多。

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!')