2016-01-30 86 views
0

本程序必須輸入一個數字並打印數字中的第二位數字。如何找到數字中的第二大數字? Python

i have tried this ==> 
a=raw_input("Please enter the nummber =") 
l=list() 
for i in a: 
    l.append(int(i)) 
great=0 
for i in range(0,len(l)): 
    for j in l: 
     if l[i]>j: 
      if l[i]>great: 
       great=l[i] 
print great 
for i in range(20): 
    great-=1 
    for j in l: 
     if j==great: 
      print "Second largest number is ",j 
      break 

但是這給了輸出

Please enter the nummber =1459 
9 
Second largest number is 5 
Second largest number is 4 
Second largest number is 1 
+2

你在解釋場景和演示你已經嘗試過什麼以及輸出是什麼時做得很好。如果你也寫了你所期望的輸出結果,那將會更好。 –

回答

1

我認爲這將工作:

print great 
flag = 0 
for i in range(20): 
    great-=1 
    for j in l: 
     if j==great: 
      print "Second largest number is ",j 
      flag = 1 
      break 
    if flag: 
     break 
+1

雖然這個答案可能是正確和有用的,但如果你[包括一些解釋一起](http://meta.stackexchange.com/q/114762/159034)來解釋它如何幫助解決這個問題,它是首選。如果存在導致其停止工作並且用戶需要了解其曾經工作的變化(可能不相關),這在未來變得特別有用。 – Hatchet

+0

感謝您的評論。 – cjahangir

1

這一點很容易使用python map的內建功能和sorted

一次完成你有從raw_input您可以d的號碼O此

>>> a 
'1459' 
>>> ordnum = sorted(map(int,a),reverse=True) 
>>> ordnum[1] 
5 
>>> ordnum 
[9, 5, 4, 1] 
>>> 

第一地圖每個數字轉換爲數字和結果傳遞給它們排序默認情況下升序排列的順序,但與reverse鍵字參數的奧登被逆轉,那麼你得到一個有數字的列表,所以第二個元素就是所需數字。

或者因爲你已經做地圖一部分,您可以直接做分類部分以列表

>>> l 
[1, 4, 5, 9] 
>>> l.sort(reverse=True) 
>>> l 
[9, 5, 4, 1] 
>>> 

相同的效應。

你的代碼的問題在於你不會打破第一個for循環,只有第二個,打破你既可以做@cjahangir顯示,也可以把它變成一個函數,

def second_great(great,num): 
    for i in range(10): 
     great -= 1 
     for j in num: 
      if j == great: 
       return j 

並調用它作爲

print great 
print "Second largest number is ", second_great(great,l) 

通過@Blckknght指出的那樣,爲int轉換是在這種情況下,因爲不需要單獨處理時的數字是爲了正確地,一個因此,您可以使用set刪除任何版本中的重複。

>>> b="1459934" 
>>> sorted(b,reverse=True) 
['9', '9', '5', '4', '4', '3', '1'] 
>>> sorted(set(b),reverse=True) 
['9', '5', '4', '3', '1'] 
>>> sorted(map(int,set(b)),reverse=True) 
[9, 5, 4, 3, 1] 
>>> 
+1

我想指出,您不需要將單位數字字符串轉換爲整數,以便正確排序。這是隻有不同長度的數字字符串按照字典順序排序時纔會出現問題(例如,在「2」之前出現「10」)。 – Blckknght

相關問題