2011-04-15 170 views
2

我需要輸入3個整數形式stdin並輸出它們的總和。這是我做的:在python中輸入輸入?

(n,l,k) = raw_input().split() 
print n + l + k 

當然,我得到nlk字符串連接,所以我改變這一點:

(n,l,k) = raw_input().split() 
print int(n) + int(l) + int(k) 

現在,它的確定。但是有什麼辦法「對飛」設置爲變量的數據類型,所以nlk成爲int進一步使用(我想n = int(n))whitout明確的重新分配?

UPDATE:

如果我需要輸入intstringint(元組項目是不同類型的)什麼? 這意味着我不能這樣做

(n,S,k) = [int(i) for i in raw_input().split()] 

任何zip(),lambda表達式,接受類型?

由於提前, 伊利亞

+0

如果您有混合類型,請簡化。*爲變量設置數據類型*根本沒有任何意義。你不會「神奇地」強加類型。你的**代碼**根據它的需要來強加類型。 'int(n)+ l + int(k)'是你如何處理'int','str','int'。 – 2011-04-15 10:13:43

回答

3

不是真的。你需要告訴它你想要什麼。在Python中有一些更簡潔的方法可以做到這一點。

(n,l,k) = [int(v) for v in raw_input().split()] 

這對於所有用戶輸入都是正確的。它必須經過驗證並轉換爲程序的其他部分。

哦,你可以使用類型對象列出你想要的類型。使用變量是引用的事實,您也可以使用變量引用類型對象。

print [t(tok) for (t, tok) in zip((int, str, int), raw_input().split())] 
+0

我簡化了我的問題,所以我更新了問題。 – 2011-04-15 07:21:58

+0

我沒有看到任何區別。但是您還需要記住,在Python中,變量n,l和k實際上並不具有類型。它們是對具有類型的對象的引用。他們不「知道」他們指的是什麼。 – Keith 2011-04-15 07:25:27

1

你可以將輸入變量作爲字典來處理嗎?

var_types = { 'n': int, 'S': str, 'k': int } # dict, so no given order 
var_order = ('n', 'S', 'k') # a tuple with a given order of variables 

input_var = dict((k, var_types[k](v)) for k, v in zip(var_order, raw_input().split())) 

對於給定的字符串12 abc 34返回:

{'S': 'abc', 'k': 34, 'n': 12} 

這樣你就可以集中定義var_types在一個地方的所有輸入變量。將爲每個raw_input對話定義var_order

2

我想這你想要做什麼:

(n,l,k) = [f(i) for i,f in zip(raw_input().split(),(int,str,int))] 

所以我們荏苒輸入值和將輸入轉換爲所需的類型功能的列表(或者更確切地說,一個元組)在一起。

你不能做的是告訴Python n應該總是包含一個int並讓它自動轉換。 Python中的變量只是綁定到一個值的名稱 - 任何值 - 所以你不能在它們綁定的值之外添加任何狀態。