2016-08-24 1 views
3

私はプログラミングに慣れていません。数字13と番号13を除く任意の数字を除いて、指定されたリストにすべての数字を追加しようとしています。私が持っている問題は、13がリストの最後にある場合、最初の数字を追加しないということです。どんな助けもありがとう。次のように私が持っているコードは:特定の数字と次の数字以外のリストに数字を追加する

def sum13(nums): 
    total = 0 
    for i in range(len(nums)): 
     if nums[i] == 13 or nums[i-1] == 13: 
      total += 0 
     else: 
      total += nums[i] 

    return total 

def main(): 
    print sum13([1, 2, 2, 1, 13]) 
    print sum13([1, 2, 13, 2, 1, 13]) 
main() 

二つの例は、それが最初に1を加算していないので、しかし、それは5と3の結果6,4をもたらすはずです。

+0

リストの数字13のインデックスが==リスト[-1]かどうかをチェックします。 – Dan

答えて

2

インデックスでは、-1はリスト内の最後のアイテムを意味します。したがって、あなたのコードでi0(最初の数字)の場合、リストの最後の項目が13であるため、カウントされません。

あなたはその条件にi > 1という簡単なチェックでこの問題を解決することができます。

:我々はすべてワンライナーを愛しているから、ここでのラインで同等の機能があります、それは価値がある何のために

if nums[i] == 13 or (i > 0 and nums[i - 1] == 13): 

return sum(num for i, num in enumerate(nums) if num != 13 and (i == 0 or nums[i - 1] != 13)) 
0

私の命題:

def sum13(numbers): 
    total = 0 
    skip = False 
    for i, number in enumerate(numbers): 
     if number == 13: 
      skip = True 
      continue 
     if skip: 
      skip = False 
      continue 
     total += number 

    return total 


def test(): 
    cases = [ 
     ([13, 1, 1], 1), 
     ([13, 1, 5, 13], 5), 
     ([1, 13, 5, 1], 2), 
     ([1, 2, 2, 1, 13], 6), 
     ([1, 2, 13, 2, 1, 13], 4), 
    ] 
    for case in cases: 
     assert sum13(case[0]) == case[1] 


test() 

読む私場合について列挙あなたの新しいt: https://docs.python.org/3.4/library/functions.html#enumerate

関連する問題