2017-03-19 83 views
1

我想在elif語句中將數字添加到if語句中。我如何將它們加在一起得到結果輸出?如何將列表和整數一起添加/組合到列表(Python)中?

def sorting(tup1, tup2): 
    output = [] 
    sumVal = 0 
    wholeTup = tup1 + tup2 
    for i in range(0, len(wholeTup)): 
     if i % 2 == 0 or i == 0: 
     word = wholeTup[i].title() 
     output.append(word) 
     output.sort()  
     elif i % 2 != 0: 
     sumVal = sumVal + wholeTup[i] 
    return output 

print(sorting(("Bob",21,"kelly",21), ("morgan",10,"Anna",2))) 

輸出應該是這個樣子:

["Anna", "Bob", "Kelly", "Morgan", 54] 

他們按字母順序排列的名字和所有他們的年齡加在一起的。

我知道if語句會給我輸出的這一部分:

["Anna", "Bob", "Kelly", "Morgan"] 

而且elif的語句將把這部分:

54 

我如何結合這兩個在一起嗎?是否有可能將if語句和elif語句的輸出結合起來?

+1

所以,你想排序在* even *索引的元組中的名稱,並總結年齡? –

+0

如果你準確解釋了輸出的標準是什麼,它實際上會有幫助嗎?不得不通過運行代碼和排除故障來猜測和解決問題並不是很有趣。 – idjaw

+0

你顯示的代碼有什麼問題? –

回答

1

你可以簡單地將行添加:剛剛return語句之前

output.append(sumVal) 

在程序中添加元組的奇怪的部分的總和,如:

def sorting(tup1, tup2): 
    output = [] 
    sumVal = 0 
    wholeTup = tup1 + tup2 
    for i in range(0, len(wholeTup)): 
     result = " " 
     if i % 2 == 0 or i == 0: 
      word = wholeTup[i].title() 
      output.append(word) 
      output.sort()  
     elif i % 2 != 0: 
      sumVal = sumVal + wholeTup[i] 
    output.append(sumVal) # append the total age to the final result 
    return output

不過你代碼是不合格,un pythonic和低效*。一些想法:

  • 您一直對列表進行排序,而將其排序爲後處理步驟效率更高;
  • 您可以簡化if;和
  • 不需要檢查elif,簡單的else就足夠了,因爲elif中的條件與if語句中的條件完全相反。

你可以改變整個程序分成兩個語句與發電機

def sorting(tup1, tup2): 
    wholeTup = tup1 + tup2 
    return sorted(wholeTup[i] for i in range(0,len(wholeTup),2)) + \ 
     [sum(wholeTup[i] for i in range(1,len(wholeTup),2))]

這裏sorted(..)會趕上發電機wholeTup[i] for i in range(0,len(wholeTup),2)的所有元素,並構建與分類元素的list。這裏發生器將發出所有放置在均勻位置的元素。

另一方面,sum(..)將總結髮生器wholeTup[i] for i in range(1,len(wholeTup),2)產生的元素,並生成年齡總和(位於奇數位置的元素)。我們構造一個帶有該結果的單例表[..],並且附加到sorted(..)調用的結果中。這是我們return的最終結果。

+0

如果某個人的姓名中有一個「無」而不是整數,該怎麼辦? – aj2929

+0

@ aj2929:這兩個程序都會報錯。在這種情況下應該發生什麼? –

+0

會在這種情況下嘗試/除了工作嗎?就像嘗試這個..除了TypeError,做這個,而不是@WillemVanOnsem – aj2929