使用int而不是eval的多个输入

时间:2017-02-14 00:56:10

标签: python

小问题:当我使用int时,为什么这段代码不起作用,但是当我使用eval时呢? int只能输入一个?有没有办法让多个输入像使用eval一样简洁? Int是一个更强大的条件,所以我很好奇它是如何工作的。

a,b,c = int(input("enter numbers: "))
print(no_teen_sum(a,b,c))

这会给ValueError: invalid literal for int() with base 10,但以下代码可以正常工作。

a,b,c = eval(input("enter numbers: "))
print(no_teen_sum(a,b,c))

4 个答案:

答案 0 :(得分:0)

int需要一个输入,可能还有一个基数:

>>> int('46',7) # 46 is 34 in base 7

34

但您可以将intmap一起使用:

>>> map(int,['1','2','3'])

[1, 2, 3]

答案 1 :(得分:0)

使用列表理解:

def main():
    numbers = input("enter numbers: ").split()
    print(no_teen_sum(*[int(n) for n in numbers)])

main()

答案 2 :(得分:0)

Python试图将整个字符串解析为一个整数而不是三个。

你能做的是:

a, b, c = map(int, input("enter numbers: ").split())

这样您就可以将列表拆分为三个字符串,然后将每个字符串转换(映射)为int。

答案 3 :(得分:0)

  

int只能输入一个?

是的,对于eval来说,技术上也是如此。只是eval可能会返回int之外的其他内容。在您的情况下,我假设您在1, 2, 3提示符下输入input之类的内容。 eval只是将其作为元组进行解析,并将unpacks解析为三个变量。

但是,您可以使用列表解析轻松实现类似于您想要的内容:

a, b, c = [int(x.strip()) for x in input("Enter numbers: ").split(",")]

这样做的另一个好处是,您不会有eval返回的完全意外类型的风险。

使用eval的一个警告可能值得注意的是它接受任何有效的Python语法并执行解析结果,其中可能包括任意函数调用,包括擦除硬盘驱动器的代码。当你只为自己编写一个程序供你使用时,这并不是什么大问题,只是让你知道。