2013-05-25 124 views
4

我试图创建一个简单的随机数猜测游戏。问题是,即使我输入正确的号码,它会回复'数字少于'。有人能为我提供解决方案吗?Python猜数游戏

在此先感谢

import random 
import sys 

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
user = raw_input('Guess The Number\n Pick between 1 - 10\n >>> ') 
try: 
    int(user) 
except: 
    print "Numbers Only !" 
    sys.exit(0) 
number = random.choice(numbers) 
int(number) 
for i in range(0, 4): 
    if number == user: 
     print 'You Won!' 
    if user > number: 
     print 'The number is less than', user 
     user = raw_input('>>> ') 
     try: 
      int(user) 
     except: 
      print "Numbers Only !" 
    if user < number: 
     print 'The number is bigger than', user 
     user = raw_input('>>> ') 
     int(user) 

print "The Number was", number 
+0

你可以看看在使用功能做了一个解决方案 hjupadhyay

回答

12

最大的问题是,您不保存转换为int,因此您将猜测用作用户输入的字符串。您需要通过做user = int(raw_input('>>>'))

但是,您还有其他方法可以改进此代码。你重复一下自己,你不需要random.choice,你可以使用random.randrange(1, 10)

你不应该只是说except:。你只想捕捉你正在寻找的例外。你正在寻找的特殊例外是ValueError

此外,我建议你让用户再次尝试,当他们输入的东西不是一个数字。你可以把它整个包装在自己的功能中。

import random 

def get_user_num(msg='>>> '): 
    """Print the msg parameter as a prompt for the user to enter a number. If 
    they enter an invalid string, reprompt them until they enter a number. 

    """ 
    while True: 
     try: 
      return int(raw_input(msg)) # save the conversion to int 
     except ValueError: # only except the error you're actually looking for 
      print 'Numbers Only!' 

# 'from 1-9' is probably better than 'between 1-10' 
user = get_user_num('Guess The Number\n Pick from 1-9\n>>> ') 
number = random.randrange(1, 10) # <- numbers list is unnecessary 
#int(number) # this conversion was never needed, it was already a number 

for _ in range(4): # you don't need (0, 4), 0 is assumed 
    if number == user: 
     print 'You Won!' # the correct number has been guessed 
     break # exit the loop once the number has been correctly guessed 
    elif user > number: 
     print 'The number is less than', user 
    elif user < number: 
     print 'The number is bigger than', user 

    # Don't repeat yourself, put this outside the `if`s 
    user = get_user_num() 
else: 
    #only print the answer when it wasn't guessed correctly 
    print "The Number was", number 
+1

这应该有更多upvotes去超越责任的呼吁:) –

+0

'randrange(1,10)'在'[1,9]'返回整数'。你可能认为'randint(1,10)'或''在1 - 10之间选择'“是误导性的。 – jfs

+0

@ J.F.Sebastian我也意识到这一点,但OP的名单是[1..9],我不想改变他的字符串。我建议将它改为“'从1-9'挑选一个数字' –

6

当您转换为int(用户),你是不是保存新的int用户。所以用户仍然是一个字符串。

你需要做的是

user = int(user) 

顺便说一句,这是所有在您使用int(用户)

3

这可以被一种更简单的实现来完成的地方:

import random 

number = random.randrange(10) 
for i in xrange(4): 
    try: 
     user = int(raw_input('guess: ')) 
    except ValueError: 
     print 'must be int' 
     continue 
    if user == number: 
     print 'bravo' 
     break 
    elif user < number: 
     print 'greater' 
    else: 
     print 'lesser' 
print 'it was: %d' % number 
+2

'random.randrange'是所有你需要选择一个号码。你需要在'except'块的末尾加上'continue', –

+0

谢谢,我解决了这个问题。 –