小问题:当我使用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))
答案 0 :(得分:0)
int
需要一个输入,可能还有一个基数:
>>> int('46',7) # 46 is 34 in base 7
34
但您可以将int
与map
一起使用:
>>> 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语法并执行解析结果,其中可能包括任意函数调用,包括擦除硬盘驱动器的代码。当你只为自己编写一个程序供你使用时,这并不是什么大问题,只是让你知道。