繁体   English   中英

Python中的数字猜测游戏

[英]Number Guessing Game in 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

最大的问题是你没有将转换保存到int因此你将guess用作用户输入的字符串。 你需要通过执行user = int(raw_input('>>>'))来保存它

但是,还有其他方法可以改进此代码。 你重复一下,你不需要random.choice ,你可以使用random.randrange(1, 10) 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

转换为int(用户)时,不会将新int保存到用户。 所以用户仍然是一个字符串。

你需要做的是

user = int(user)

顺便说一句,这适用于你使用int(用户)的所有地方

这可以通过更简单的实现来完成:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM