python - 我需要帮助在一个简单的随机数游戏中修复 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))
解决方案
该变量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
...
推荐阅读
- c++ - 在函数返回类型之前“定义”
- angular - 在服务中组合来自两个来源的数据的好方法是什么?
- python - Python冒号不是数字序列?
- regex - 使用正则表达式在引号内查找字符串
- kubernetes - 如何跨多个 Kubernetes 集群设置一个 Redis 集群
- vb.net - 如何从数据表中选择所有记录仅以一列不同
- javascript - 根据不同数组的 array.sort() 对一个数组进行排序
- reactjs - 如何使用 runSaga 启动 redux saga watcher
- angular - Bootstrap 没有按预期的角度加载
- javascript - 如何在 discord.js 中测试表情符号是否为动画