首页 > 解决方案 > 我需要帮助在一个简单的随机数游戏中修复 ValueError

问题描述

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

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

回溯(最后一次调用):文件“/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))

标签: pythonerror-handling

解决方案


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

您可以使用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
...

推荐阅读