在 Python 中获得 "invalid literal for int with base 10"
Getting an "invalid literal for int with base 10" in Python
import random
print("Welcome to RNG Guesser!\n")
gld = random.randrange(1,10)
counter = 0
ccounter = 0
while True:
print("Number of tries: {}".format(counter))
print("Number of correct guesses: {}".format(ccounter))
num = input("Enter a number: ")
if num is "exit":
print("Number of tries: {}".format(counter))
print("Number of correct guesses: {}".format(ccounter))
break
else:
if int(num) is gld:
print("Congratulations, your guessed number {} was right!".format(num))
counter += 1
ccounter += 1
elif int(num) < gld:
print("Pick a higher number!")
counter += 1
else:
print("Pick a lower number!")
counter += 1
为什么我在输入退出时得到 "invalid literal for int"?我尝试将输入变量转换为 int,我尝试使用 else 语句,我尝试制作 2 个变量,一个用于字符串,一个用于 int,其中 none 个有效。
假设问题中的缩进不正确只是复制粘贴错误...试试这个:
x = input('enter x > ')
print('x == "exit": {}'.format(x == "exit"))
print('x is "exit": {}'.format(x is "exit"))
事情是这样的:
enter x > exit
x == "exit": True
x is "exit": False
或者也许:
x is "exit": True
is
运算符比较对象 identity 但您正在尝试比较两个字符串的内容。
我认为问题来自以下行:
if num is "exit"
正在对 False
求值,当 Python 尝试将文字字符串 exit
转换为 int 时,脚本会继续往下走,它将失败。
尝试用 ==
替换 is
问题是is
比较两个对象看它们是否相同,而想要的是看两个对象的值是否相同。查看此 stack overflow thread 了解更多信息。
请注意,您不能将包含非数字字符的字符串提供给 int()
。
现在 num
应该是 str
,它可以是用户输入的任何内容。另请注意,当您要计算两个值时,请使用 ==
而不是 is
。 is
应该用来判断两个东西是否是同一个对象。
如果你想使用 if-else,试试这个:
if num == "exit":
print("Number of tries: {}".format(counter))
print("Number of correct guesses: {}".format(ccounter))
break
elif not num or not all(char.isdigit() for char in num):
print("You are not giving a number.")
else:
if int(num) == gld:
print("Congratulations, your guessed number {} was right!".format(num))
counter += 1
ccounter += 1
elif int(num) < gld:
print("Pick a higher number!")
counter += 1
else:
print("Pick a lower number!")
counter += 1
这里,all(char.isdigit() for char in num)
正在检查 num
中的每个字符,看它们是否都是数字。我们应该知道任何东西都可能出现在用户的输入中。只有数字可以转换为int
.
我们有另一种更清晰和简单的解决方案。您可能需要在 Python.
中阅读一些关于 try...except...
的文档
try:
if int(num) ...
except ValueError:
# num is not able to be converted to int
print("You are not giving a number.")
import random
print("Welcome to RNG Guesser!\n")
gld = random.randrange(1,10)
counter = 0
ccounter = 0
while True:
print("Number of tries: {}".format(counter))
print("Number of correct guesses: {}".format(ccounter))
num = input("Enter a number: ")
if num is "exit":
print("Number of tries: {}".format(counter))
print("Number of correct guesses: {}".format(ccounter))
break
else:
if int(num) is gld:
print("Congratulations, your guessed number {} was right!".format(num))
counter += 1
ccounter += 1
elif int(num) < gld:
print("Pick a higher number!")
counter += 1
else:
print("Pick a lower number!")
counter += 1
为什么我在输入退出时得到 "invalid literal for int"?我尝试将输入变量转换为 int,我尝试使用 else 语句,我尝试制作 2 个变量,一个用于字符串,一个用于 int,其中 none 个有效。
假设问题中的缩进不正确只是复制粘贴错误...试试这个:
x = input('enter x > ')
print('x == "exit": {}'.format(x == "exit"))
print('x is "exit": {}'.format(x is "exit"))
事情是这样的:
enter x > exit
x == "exit": True
x is "exit": False
或者也许:
x is "exit": True
is
运算符比较对象 identity 但您正在尝试比较两个字符串的内容。
我认为问题来自以下行:
if num is "exit"
正在对 False
求值,当 Python 尝试将文字字符串 exit
转换为 int 时,脚本会继续往下走,它将失败。
尝试用 ==
is
问题是is
比较两个对象看它们是否相同,而想要的是看两个对象的值是否相同。查看此 stack overflow thread 了解更多信息。
请注意,您不能将包含非数字字符的字符串提供给 int()
。
现在 num
应该是 str
,它可以是用户输入的任何内容。另请注意,当您要计算两个值时,请使用 ==
而不是 is
。 is
应该用来判断两个东西是否是同一个对象。
如果你想使用 if-else,试试这个:
if num == "exit":
print("Number of tries: {}".format(counter))
print("Number of correct guesses: {}".format(ccounter))
break
elif not num or not all(char.isdigit() for char in num):
print("You are not giving a number.")
else:
if int(num) == gld:
print("Congratulations, your guessed number {} was right!".format(num))
counter += 1
ccounter += 1
elif int(num) < gld:
print("Pick a higher number!")
counter += 1
else:
print("Pick a lower number!")
counter += 1
这里,all(char.isdigit() for char in num)
正在检查 num
中的每个字符,看它们是否都是数字。我们应该知道任何东西都可能出现在用户的输入中。只有数字可以转换为int
.
我们有另一种更清晰和简单的解决方案。您可能需要在 Python.
中阅读一些关于try...except...
的文档
try:
if int(num) ...
except ValueError:
# num is not able to be converted to int
print("You are not giving a number.")