【问题标题】:Converting input to int throws "invalid literal for int() base 10" when passing in decimal numbers传入十进制数时,将输入转换为 int 会引发“int() base 10 的无效文字”
【发布时间】:2018-07-12 19:16:50
【问题描述】:

这个例外:

ValueError: int() 以 10 为底的无效文字:'17.1'

不断弹出,但我不知道如何解决它。

我必须能够在其中使用小数,而不仅仅是整数,而且如果没有 int(n1)int(n2),它根本无法运行。

n1 = input("Enter the first number: ")
n2 = input("Enter the second number: ")
n1 = int(n1)
n2 = int(n2)
if n1 and n2 > 10:
    print("Both are above 10.")   
elif n1 and n2 <= 10:
    print("Both are below 10.")
avg = (n1 + n2) / 2
print("Average is {:.2f}".format(avg))

【问题讨论】:

  • 为什么要重新分配n1n2?不完全理想。判断我的错误,您正在尝试输入一个无法转换为整数的浮点数。使用float(…)

标签: python python-3.x input int decimal


【解决方案1】:

如果您在字符串上使用int,则字符串必须是整数(不是小数)。但是您可以简单地将其转换为 float 然后它还可以转换表示十进制数字的字符串还有整数:

n1 = float(input("Enter the first number: "))
n2 = float(input("Enter the second number: "))

# Rest of your program

如果你希望它是整数,如果它是一个整数,如果它不是一个整数,你可以尝试两者:

n1 = input("Enter the first number: ")
try:
    n1 = int(n1)
except ValueError:
    n1 = float(n1)

对于您的第二个输入也是如此。

如果您想要精确的小数和运算,您可以使用decimals.Decimalfractions.Fraction 而不是float(与其他两个相比,浮点数更快但精度有限):

from fractions import Fraction

n1 = input("Enter the first number: ")
try:
    n1 = int(n1)
except ValueError:
    n1 = Fraction(n1)

补充说明:

您可能应该使用if n1 &gt; 10 and n2 &gt; 10:elif n1 &lt;= 10 and n2 &lt;= 10。否则结果将不是你所期望的。因为if n1 and n2 &gt; 10 将被解释为好像你已经写了if n1 and (n2 &gt; 10),这相当于(如果n1 是一个数字,并且数字只有False 如果它们是零)到if (n1 != 0) and (n2 &gt; 10)

【讨论】:

    【解决方案2】:

    首先,如果您使用的是int(),则将变量转换为integer,那么您应该将其输出为int,而不是float

    其次你不需要重新分配n1n2,你可以在调用时转换函数返回的值:

    n1 = float(input("Enter the first number: "))
    n2 = float(input("Enter the second number: "))
    

    如果您想确保您的程序的输入只能是数字,您可以使用tryexcept 以防输入字母:

    try:
        n1 = float(input("Enter the first number: "))
        n2 = float(input("Enter the second number: "))
    except ValueError as e:
        print("The values might only be numbers.")
        # print("Exception:\n{}".format(e)) #if you want to see the traceback
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 2021-09-10
      • 2012-02-14
      相关资源
      最近更新 更多