用户在程序

时间:2016-08-01 15:04:15

标签: python python-3.x

和我之前的很多人一样,我在这方面是全新的,所以如果我没有提供所需的所有信息,那么请轻松一下,并提前感谢你。

在我开始之前,值得一提的是程序本身运行良好,我担心的是确保我已经考虑过所有可能的情况。开始。

我收到此错误:

File "C:\Users\brand\Desktop\WIP Programs\Guess the number 31.July.py",         line 15, in <module>
userGuess = int(input("I guess: "))
ValueError: invalid literal for int() with base 10: ' '

当我按空格键进行输入时,它会返回此值。我不知道如何使程序返回有用的东西,例如再次猜测的能力。这是我的代码,供参考:

import random

guessNum = 0

print("Welcome to the guess the number game!  Please, tell me your name!")
user = input("My name is: ")

randNum = random.randrange(1, 10, 1) #Generates number

print("Okay, " + user + ", guess the random number, the range is 1 to 10.")

#Guessing phase
while guessNum < 3:
    userGuess = int(input("I guess: "))

    if userGuess > randNum:
        print("Too high!  Try again.")
        guessNum = guessNum + 1

    if userGuess < randNum:
        print("Too low!  Try again.")
        guessNum = guessNum + 1

    if userGuess == randNum:
        print("Great!  You guessed my number!")
        break
    else:
        print("Please choose a valid answer.")


if userGuess == randNum:
    print("If you would like to play again, please restart the program.")

if userGuess != randNum:
    print("Nope.  My number was: " + str(randNum))

如果我有任何不必要或缺少我应该拥有的任何东西,请随时纠正我!

修改<!/强>

离开第一个回复。我正确地将.isdigit()添加到我的代码中:

if (userGuess.isdigit()):

    userGuess = input("I guess: ")

    if userGuess > randNum:
        print("Too high!  Try again.")
        guessNum = guessNum + 1

它不断传递一个异常,说'userGuess'没有定义。精细!好的,所以我在代码旁边的用户旁边定义它。在运行时返回

AttributeError: 'int' object has no attribute 'isdigit'

也很好,所以我将str(0)添加到userGuess以尝试修复然后返回:

TypeError: unorderable types: str() > int()

它现在让我输入一个数字,但我无法弄清楚如何修复。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

当用户选择一个号码时,他的输入将作为字符串返回。 之后,您尝试将该字符串转换为整数。这适用于字符串,因为&#34; 13&#34;或&#34; 4&#34;,但不适用于&#34;等字符串。 3&#34;或&#34; 2a&#34;。因此,在这种情况下会出现例外情况。 作为解决方法,您可以使用&#34; isdigit()&#34;检查字符串。转换之前的方法。对于仅包含数字的字符串,该方法将返回True,否则返回False。

答案 1 :(得分:0)

您的问题是,行userGuess = int(input("I guess: "))正在转换为整数值而不检查是否可以这样做。当它找到一个字符值时,这将抛出异常,因为转换是不可能的。

您可以通过try ... catch来阻止这种情况,但我认为更好的方法是在尝试转换之前使用isDigit()方法检查值是否只是数字。

while guessNum < 3:
    userGuess = input("I guess: ")
    if (userGuess.isDigit()):
        userGuess = int(userGuess)

        if userGuess > randNum:
            print("Too high!  Try again.")
            guessNum = guessNum + 1

        ...

        if userGuess == randNum:
            print("Great!  You guessed my number!")
            break
    else:
        print("Please choose a valid answer.")