我刚刚开始学习Python一周前,对于我的第一个项目之一,我构建了一个非常简单的随机数猜测游戏作为我所在课程的一部分。但是,我尝试添加一个扩展名我的代码,如果单词" no"输入是输入,即使输入只接受我的代码中的整数。在之前的一个问题中,我了解到如果发生错误,可以使用try / except来打印某些内容(例如通过输入" no"而不是整数),以下模板:
反过来,我的代码看起来像这样:
当我输入no时我得到的输出看起来像这样:
输入1到21之间的数字:否
Traceback (most recent call last):
File "C:/Users/camer/Desktop/Python/randomintproject.py", line 3, in <module>
guess = int(input("Enter a number between 1 and 21: "))
ValueError: invalid literal for int() with base 10: 'no'
如果模板代码有效,那么我做错了什么?
答案 0 :(得分:1)
您试图通过int
{/ 1>包裹input()
来将所有输入转换为int()
试试这个:
inp = input('enter a number...')
if inp.isnumeric(): # checks if input is numeric, i.e. 2, 39, 4592 etc
inp = int(inp)
else: # Was not numeric, i.e. was a letter, word or some character
print "OK forget it"
另一种方式是:
inp = input('enter a number...')
try: # checks if input is numeric, i.e. 2, 39, 4592 etc
inp = int(inp)
except(ValueError): # Was not numeric, i.e. was a letter, word or some
character
try:
inp = float(inp) # Let's try again, could be user entered 3.5 or some other float value.
except(ValueError):
print("OK forget it")
这将涵盖@schwobaseggl在此问题的评论中提到的案例。
另外请不要拍摄您的代码,但请将其粘贴到此处。
答案 1 :(得分:0)
您的代码:
random n = random.randint(1,21)
guess = int(input("Enter a number between 1 and 21: "))
try:
while guess != n:
print ("WRONG!")
guess = int(input("Enter a number between 1 and 24: "))
if guess == n:
print ("RIGHT!")
except ValueError:
if guess == "no":
print ("OK forget it")
else:
print ("no idea what you want")
```
这里的问题是第一个guess = int(input("Enter a number between 1 and 24: "))
在try
子句之前,因此不被它覆盖,因此当它出错时它没有被捕获。只需删除该行,它就可以正常工作!
P.S我刚刚意识到这一点,每次运行程序时都会说“错!”在你开始之前。最简单的解决方法是添加布尔值first
,如果它是true
,则不要打印“错误!”,然后在第一次迭代后将其设置为false
。或者(但在我看来更丑陋),为第一个输入创建第二个try except子句