【问题标题】:Returning error when user inputs space into program [duplicate]用户在程序中输入空间时返回错误[重复]
【发布时间】:2016-12-06 17:33:07
【问题描述】:

像我之前的许多人一样,我在这方面是全新的,所以如果我没有提供所有需要的信息,请放轻松,提前谢谢你。

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

我收到此错误:

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()

它现在让我输入一个数字,但我不知道如何解决。有什么建议吗?

【问题讨论】:

  • 编辑听起来完全像different problem
  • 查看您的编辑,这完全取决于您定义它的顺序。 Python 将尝试根据值是什么来分配数据类型。您编辑的代码试图在您实际从用户那里获取该值之前检查该值是否合法。如果正确完成,在程序开始时定义变量将消除运行时错误,但仍不会进行输入验证。请参阅下面的答案以了解正确的顺序。您想要 1. 获取用户输入。 2.检查是否有效。 3.如果有效,则对其进行操作

标签: python python-3.x


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的问题是 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.")
    

    【讨论】:

    • "isDigit()" 是一个方法,而不是一个函数 :)
    • @RafaelAlbert Point 采取了哈哈
    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多