2016-02-22 25 views
0

卡住以下內容: 返回數組中數字的總和,返回0爲空數組。除了13號碼非常不吉利,所以它不算,13號碼後面的號碼也不算。解決encodebat python列表分片

到目前爲止,我已經寫了:

def sum13(nums): 
    if 13 not in nums: 
     return sum(nums) 

    for i in range(len(nums)): 
     if nums[i] == 13: 

      return sum(nums[:i]) 

13時出現在問題第二次,也沒有後立即計數的數量有問題。任何幫助表示感謝,謝謝。

+1

當你說'return sum(nums [:i])'時,你將在13之後的所有*號碼中捨去,而不是在它後面的號碼之後。你可以說'return sum(nums [:i])+ sum13(nums [i + 2:])',但在sum13([4,6,13,13,4])的情況下,4仍然會被計算在內。爲了解決這個問題,你可以使用'return sum(nums [:i])+ sum13(nums [i + 1 +(nums [i + 1:i + 2]!= [13]):])' – zondo

回答

3

一種方式做到這一點在同一個風格,你開始會是這樣的:

def sum13(nums): 
    if 13 not in nums: 
     return sum(nums) 

    ret = 0 
    count_next = True 
    for num in nums: 
     if num == 13: 
      count_next = False 
     elif count_next: 
      ret += num 
     else: 
      count_next = True 
    return ret 

如果數字是13,記得不要指望下一個號碼。如果下一個是真的(即13不是最後一個數字)就算它。如果下一個都不是這個數字,那麼這個數字就是13記得要計算下一個數字。

+0

'next '是Python中的一個內置關鍵字,所以請嘗試使用不同的變量名稱;我認爲它不會讓你寫,如果是的話,它不應該。 – dwanderson

+0

@dwanderson你是對的,我只是有一個普通的python shell來嘗試,所以我沒有想到它。 – olofom

+0

現在一切都有意義。非常感謝。 –