2012-06-05 48 views
3

我是Python新手。 首先,代碼應該接受一個輸入(形式爲「x/y/z」,其中x,y和z是任何正整數)並將其分解爲三個不同的變量。當我的代碼對輸入進行排序時,爲什麼它在某些情況下不起作用?

input = raw_input() 
a, b, c = input.split("/", 2) 

我想我的代碼的第二部分,基於其數值取這三個變量,並對其進行排序。

order = [a, b, c] 
print order 
order.sort() 
print order 

雖然這完全適用於大多數的投入,我已經發現,輸入「23/9/2」和「43/8/2」輸出尚未排序因此不正確的順序返回。有什麼想法可能導致這些輸入不起作用?

回答

10

的問題是,你是字符串進行排序,並期待他們像整數進行排序。如果您想要數字排序,請首先將您的字符串列表轉換爲整數列表。

>>> sorted(['23', '9', '2']) 
['2', '23', '9'] 
>>> sorted(map(int, ['23', '9', '2'])) 
[2, 9, 23] 

這裏是你如何能重寫代碼:如果您需要將其轉換回字符串

input = raw_input() 
a, b, c = map(int, input.split("/", 2)) 
order = [a, b, c] 
print order 
order.sort() 
print order 

,只需使用map(str, order)。請注意,在Python 2.x map()上返回一個列表,在3.x上它將返回一個生成器。

+0

知道了!非常感謝您的快速幫助。 – zch

+0

+1以獲得清晰的答案和良好的信息。 @Zach,別忘了接受解決問題的答案。保持SO愛情火車羅林'。 – JoeFish

+0

感謝您的提醒,@JoeFish。所以告訴我,我必須等待10分鐘才能接受答案,並且我離開計算機的時間太長了。 – zch

0

要排序的字符串,但你要排序的整數。所以你必須將每個字符串轉換爲整數使用int

order = [int(a), int(b), int(c)] 
相關問題