在 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,它可以是用户输入的任何内容。另请注意,当您要计算两个值时,请使用 == 而不是 isis应该用来判断两个东西是否是同一个对象。

如果你想使用 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.")