传递十进制数字时,将输入转换为int会引发“ int()以10为基的无效文字”

时间:2018-07-12 19:16:50

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

此例外:

  

ValueError:以10为底的int()无效文字:“ 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))

2 个答案:

答案 0 :(得分:0)

如果在字符串上使用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 > 10 and n2 > 10:elif n1 <= 10 and n2 <= 10。否则结果将不是您期望的。因为if n1 and n2 > 10将被解释为就像您写了if n1 and (n2 > 10)一样(如果n1是一个数字,而数字只有False则为if (n1 != 0) and (n2 > 10))到{ {1}}。

答案 1 :(得分:0)

首先,如果您使用的是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