Python"猜数字"游戏总是返回相同的答案

时间:2016-01-03 21:56:39

标签: python random

我写了这个脚本,但无论用户输入什么,它总会返回相同的答案("你的猜测太高了#34;)。任何见解都会有所帮助。

import random

number = random.randint(1, 10) 

guess = input("Guess a number between 1 and 10: ")

if type(guess == int):
    print(number) # this prints the randint to show the code isn't working

    while(number != 0):
        if(guess > number):
            print("Your guess is too high!")
            break

        elif(guess < number):
            print("That's too low.")
            break

        elif(guess == number):
            print("Thats's right!")
            break

    else:
        print("Please enter a number.")

4 个答案:

答案 0 :(得分:3)

if type(guess == int):

这不符合你的期望。它始终返回True,因为它等同于bool(type(False))。首先确保将输入转换为int

guess = int(input("Guess a number between 1 and 10: "))

然后删除此if语句:

if type(guess == int):

你的问题是这段代码:

 if(guess > number)

始终将stringint进行比较,因此一旦您更正了您的代码将会被修复。

答案 1 :(得分:3)

你的while循环没用,将输入作为int测试的问题可以通过try / except更好地处理。

所有正确答案都在Python3中:

import random

number = random.randint(1, 10) 
found = False

while  not found:
    try:
        guess = int(input("Guess a number between 1 and 10: "))
        if guess > number:
            print("Your guess is too high!")
        elif guess < number:
            print("That's too low.")
        elif guess == number:
            print("Thats's right!")
            found = True    
    except ValueError:
        print("Please enter a number.")

答案 2 :(得分:2)

我刚刚复制并粘贴了您的代码,它似乎最能正常运行。但是它有一些问题。首先,看来这是基于你使用输入函数的方式为python 2编写的。然而,这是不好的做法,因为python 2中的input()函数包含对eval()函数的隐式调用,这可能允许运行任意代码。

在python 2中,更好的做法是使用guess = int(raw_input("Guess a number between 1 and 10: "))

在python 3中,raw_input()已被删除,input()将替换它。所以在python 3中你会使用guess = int(input("Guess a number between 1 and 10: "))

您的最终else块也缩进到不应该的位置,但如果您修改代码以使用上面给出的建议,则不再需要if...else块。

答案 3 :(得分:1)

那是因为input在Python 3中返回一个字符串。您需要调用int()使其成为整数类型:

guess = int(input("Guess a number between 1 and 10: "))

您还错误地使用了type()功能。您可能需要函数isinstance()if isinstance(guess, int):

此外,在Python中,我们不需要像您使用过的括号。您只需执行if guess > number:

即可