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

Python 使用int而不是eval的多个输入,python,Python,小问题:为什么这段代码在我使用int时不起作用,但在我使用eval时起作用? int只能接受一个输入?有没有一种方法可以让它像使用eval一样简洁地接受多个输入?Int是一个更强的条件,所以我对它的工作原理很好奇 a,b,c = int(input("enter numbers: ")) print(no_teen_sum(a,b,c)) 这将给出ValueError:int()的无效文本,以10为基数,但以下代码确实有效 a,b,c = eval(input("enter numbers:

小问题:为什么这段代码在我使用
int
时不起作用,但在我使用
eval
时起作用?
int
只能接受一个输入?有没有一种方法可以让它像使用eval一样简洁地接受多个输入?Int是一个更强的条件,所以我对它的工作原理很好奇

a,b,c = int(input("enter numbers: "))
print(no_teen_sum(a,b,c))
这将给出
ValueError:int()的无效文本,以10为基数,但以下代码确实有效

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

int
接受一个输入,可能还有一个基数:

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

34
但是您可以将
int
map
一起使用:

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

[1, 2, 3]

使用列表理解:

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

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

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

你能做的是:

a, b, c = map(int, input("enter numbers: ").split())
通过这种方式,您可以将列表拆分为三个字符串,然后将每个字符串转换(映射)为int

int
只能接受一个输入

是的,这在技术上也适用于
eval
。只是
eval
可能返回的不是
int
。在您的情况下,我假设您在
input
提示符上输入类似
1,2,3
的内容
eval
只是将其解析为一个元组,并返回到三个变量中

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

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

main()
a, b, c = [int(x.strip()) for x in input("Enter numbers: ").split(",")]
这样做的另一个好处是,您不必冒着从
eval
返回某些完全意外的类型的风险

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