2017-02-14 46 views
0

小問題:當我使用int但爲什麼當我使用eval時,爲什麼不能使用這段代碼? int只能採取一個輸入?有沒有一種方法可以使多個輸入簡潔如使用eval? Int是一個更強的條件,所以我很好奇它是如何工作的。多個輸入使用int而不是eval

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

int需要一個輸入和可能的基礎:

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

34 

但是你可以使用intmap一起:

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

[1, 2, 3] 
0

使用列表理解:

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

main() 
0

Python正試圖解析整個字符串爲一個是整數而不是三個。

你可以做的是:

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

這樣要拆分清單分成三個字符串,然後轉換(映射)每個字符串爲int。

0

int只能取一個輸入?

是的,這在技術上也適用於eval。只是eval可能會返回int以外的內容。在你的情況下,我假設你在input提示符下輸入類似1, 2, 3的東西。 eval只是將它解析爲它返回的元組,並將unpacks解析爲您的三個變量。

你可以,但是,輕鬆實現類似你想使用什麼列表理解的東西:

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

這樣做,你不冒險讓從eval返回的是一些完全出乎意料的類型的額外好處。

使用eval需要注意的一點是,它接受任何有效的Python語法並執行解析結果,其中可能包括任意函數調用,包括擦除硬盤驅動器的代碼。當你只是寫一個程序供你自己使用時,沒什麼問題,但只是爲了讓你知道。

相關問題