【问题标题】:I need help fixing a ValueError in a simple random number game我需要帮助在一个简单的随机数游戏中修复 ValueError
【发布时间】:2019-06-03 15:44:27
【问题描述】:

我创建了一个简单的数字猜谜游戏,我正在尝试修复一个意外输入任何内容的错误。

当程序要求猜测时,如果用户在没有输入数字的情况下点击回车,则会出现以下错误:

Traceback(最近一次调用最后一次):文件 “/Users/tom/Documents/Automate with Python/RandomNumberGame.py”,行 13、在 guess = int(input()) ValueError: int() 以 10 为底的无效文字:''

我希望它改为打印“请输入一个数字”。

我是编程新手,已开始阅读“使用 Python 自动化无聊的东西”。提前致谢!

原代码没有包含

elif guess == ' ':
     print('Please enter a number')

但目标是让程序说如果输入为空

我尝试添加:

guess = int(input()) or str(input()) 

没有任何进展

猜数字游戏

import random
print('Hello, What is your name?')
name = input()
print('Well, ' + name + ', I am thinking of a number between 1 and 1000, You have 10 guesses to figure it out. Good luck!')
secretNumber = random.randint(1,1000)

print('DEBUG: Secret number is ' + str(secretNumber))

for guessesTaken in range(1,11):
    print('Take a guess.')
    guess = int(input())


    if guess < secretNumber: 
          print('Your guess is too low.')
    elif guess > secretNumber:
          print('Your guess is too high.')
    elif guess == ' ':
          print('Please enter a number')
    else:
          break #This condition is for the correct guess

if guess == secretNumber:
          print('Good job ' + name + '! You guessed the number in ' + str(guessesTaken) + ' guesses!')
else:
          print('Too many guesses, The number I was thinking of was ' + str(secretNumber))

【问题讨论】:

  • 由于guess 是一个数字,它永远不能等于一个字符串。如果您想允许空输入,您需要在将其转换为int 之前检查该

标签: python error-handling


【解决方案1】:

变量guess 是一个整数值,因为您将输入转换为整数:guess = int(input())。如果输入是空格或任何其他无效字符串(无法解析为数字),则会引发 ValueError exception - 这就是您收到该错误消息的原因。

您可以使用 try/except 块在 Python 中发生特定异常时进行处理。它是这样工作的:

try:
  # execute some code
except SomeException:
  # handle the exception

try 块中的代码将尝试执行,如果运行代码导致引发异常 SomeException,则将运行 except 块中的代码。

在您的特定情况下,您要做的是处理 ValueError 异常,因此您可以像这样将相关代码包装在 try/except 中:

...
for guessesTaken in range(1,11):
    print('Take a guess.')

    try:
        guess = int(input())
        if guess < secretNumber: 
              print('Your guess is too low.')
        elif guess > secretNumber:
              print('Your guess is too high.')
        elif guess == ' ':
              print('Please enter a number')
        else:
              break #This condition is for the correct guess
    except ValueError:
        print('Please enter a number')
...

如果您希望无效输入不进行猜测,您可以像这样实现游戏:

...
guessesTaken = 1
while True:
    print('Take a guess.')

    try:
        guess = int(input())
        if guess < secretNumber: 
              print('Your guess is too low.')
        elif guess > secretNumber:
              print('Your guess is too high.')
        elif guess == ' ':
              print('Please enter a number')
        else:
              break #This condition is for the correct guess
    except ValueError:
        print('Please enter a number')
        continue # go back to the start of loop (without incrementing guessesTaken)

    guessesTaken += 1
    if guessesTaken >= 10:
        break
...

【讨论】:

    【解决方案2】:

    如果您也不想在用户没有输入数字就按 Enter 键的情况下输掉一次尝试。您可以像这样在 while True: 块中使用 try-except

    #code till this
    for guessesTaken in range(1,11):
        print('Take a guess.')
        while True:
            try:
                guess = int(input())
                break
            except ValueError:
                print('Please enter a number')
                continue
    #rest of your code
    

    这将允许用户在尝试次数保持不变的情况下意外按 Enter 继续游戏。

    完整代码:

    import random
    print('Hello, What is your name?')
    name = input()
    print('Well, ' + name + ', I am thinking of a number between 1 and 1000, You have 10 guesses to figure it out. Good luck!')
    secretNumber = random.randint(1,1000)
    
    print('DEBUG: Secret number is ' + str(secretNumber))
    
    #code till this
    for guessesTaken in range(1,11):
        print('Take a guess.')
        while True:
            try:
                guess = int(input())
                break
            except ValueError:
                print('Please enter a number')
                continue
    #rest of your code
    
        if guess < secretNumber:
              print('Your guess is too low.')
        elif guess > secretNumber:
              print('Your guess is too high.')
        else:
              break #This condition is for the correct guess
    
    if guess == secretNumber:
              print('Good job ' + name + '! You guessed the number in ' + str(guessesTaken) + ' guesses!')
    else:
              print('Too many guesses, The number I was thinking of was ' + str(secretNumber))
    

    【讨论】:

    • 谢谢,我在你发帖之前就看到了这个错误。但是,现在当我输入一个数字时,它只会说“猜测一下”。不表示密码是高还是低
    • @tl93 它对我来说工作正常。我已经更新了我的答案以包含完整的代码。试试看。
    • 确定语法后,我已经开始工作了。感谢您的帮助
    猜你喜欢
    • 2014-11-30
    • 2018-05-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多