1

问题:

计算机随机生成一个数字。用户输入一个数字,计算机会告诉你你是太高还是太低。然后你将继续猜测,直到你猜出数字。

我的解决方案:

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”,它也总是打印“你的号码太大”。

4

2 回答 2

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"
于 2013-09-25T16:26:56.370 回答
1

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

user = int(raw_input('> '))

所以user将是整数。

于 2013-09-25T16:26:53.730 回答