2013-09-25 61 views
1

问题:Python简单数字比较

计算机随机产生一个数字。用户输入一个数字,计算机会告诉你,如果你太高或太低。然后,你会继续猜测,直到你猜数字。

我的解决办法:

import random 

computer = random.randint(1, 500) 

def guessNumber():  
    user = raw_input('> ') 
    while user != computer: 
      if user > computer: 
       print "Your number is too big" 
       user = raw_input('> ') 
      else: 
        print "Naa! too small. Try a bit higher number" 
        user = raw_input('> ') 
    print "Now the numbers are equal" 

不幸的是,我的代码永远不会运行if语句,甚至与它总是打印“你数过大”,即使我进入“1”,用户通过。

回答

2

raw_input()返回一个字符串值。把它变成一个整数第一:

user = int(raw_input('> ')) 

由于弦之前的Python 2种编号,总是你user > computer测试将始终返回true,无论什么进入:

>>> '' > 0 
True 

的Python 3整流这样的:

>>> '' > 0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unorderable types: str() > int() 

需要注意的是,如果用户不输入有效的数字,int()将抛出一个ValueError

>>> int('42') 
42 
>>> int('fortytwo') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: 'fortytwo' 

您可能需要显式处理是:

def askForNumber(): 
    while True: 
     try: 
      return int(raw_input('> ')) 
     except ValueError: 
      print "Not a number, please try again" 


def guessNumber(): 
    user = askForNumber() 
    while user != computer: 
     if user > computer: 
      print "Your number is too big" 
      user = askForNumber() 
     else: 
      print "Naa! too small. Try a bit higher number" 
      user = askForNumber() 
    print "Now the numbers are equal" 
+0

转动“的raw_input()”到一个整数本身并不解决我的问题,但是当我处理它明确地按照你的“askForNumber( )'功能它的工作。我试图理解为什么,但我不能。即使我更喜欢你的解决方案,它不应该没有使用'askForNumber()'函数工作? – fromPythonImportNoob

+0

它应该工作得很好;你是否修复了所有*'raw_input()'调用? –

+0

对不起,这是我的坏..我离开了最后一次呼吁..它的作品。谢谢 – fromPythonImportNoob

1

user变量是字符串类型,因为raw_input()返回字符串,如更改代码:

user = int(raw_input('> ')) 

所以user是整数。