2016-01-03 293 views
0

我编写了这个脚本,但它始终返回相同的答案(“您的猜测太高”),无论用户输入什么内容。任何见解都会有所帮助。Python“猜数字”游戏总是返回相同的答案

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.") 
+0

[无法重现](http://ideone.com/cMCOHZ) – Conduit

+1

所以我删除了我的答案,因为有些人决定没有解释为什么downvote 。你的代码在Python 2.7上运行良好 - http://i.stack.imgur.com/RTsuo.png - 虽然有改进的范围,但代码在Python 2上工作。 – masnun

+0

while循环毫无价值;你不会改变循环内部的'number'的值,无论如何你在任何情况下都会跳出它。 – chepner

回答

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.") 
+1

可能不应该打印数字;)你也可以只移动'guess = int(输入(“猜测一个数字在1和10之间:”))'在试验内 –

+1

@PadraicCunningham:你是完全正确的......我从问题和输入复制的打印可以保存在try中。将编辑为清洁代码 –

+0

太棒了!这工作得很好。现在,代码允许用户继续猜测,直到找到号码。 我不明白True/False和try语句是如何工作的,所以我会阅读它们来了解为什么这个脚本能够工作。有关这些主题的最佳资源的任何建议? – Munner

1

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

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

您还使用了type()函数不正确。你可能想要的功能如下::if isinstance(guess, int):

另外,在Python中,我们不需要像你用过的括号。你可以简单地做if guess > number:

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,所以一旦你纠正你的代码将被修复。

+0

OP应该为'int()'准备,如果它们总是转换用户输入,则会引发异常。 – Turn

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块不再是必需的。