2017-12-17 20 views
0

私のコードがうまくいかない理由がわかりません。問題は次のとおりです。CodingBat Python:List - 2、sum13

配列の数値の合計を返します。空の配列の場合は0が返されます。 13番は非常に不運なので、13番の直後に来る番号も数えません。

sum13([1、2、2、1])→6

sum13([1,1])→2

sum13([1、2、2、1、13]) →6

私の答え:

def sum13(nums): 
    count = sum(nums) 
    for i in range(len(nums)): 
     if nums[i] == 13: 
      count = count - 13 
      count = count - nums[i+1] 
    return count 
+2

になり、あなたはどのようなデバッグ機能を試してみましたか?あなたは* "is not [sic] working" *? [mcve]を与える。 – jonrsharpe

+0

@ForceBruこれをした場合、13の後の数字はカウントダウンしない直後ではない – intelis

+0

@intelis、yep、私は13の後にすべての数字を無視するべきだと思った... – ForceBru

答えて

0

が問題の要素を削除して、残っているものの上にまとめます。発電機を使用すると、この非常に単純

def remove_13(l): 
    it = iter(l) 
    for x in it: 
     if x == 13: 
      try: 
       next(it) 
      except StopIteration: 
       return 
     else: 
      yield x 

def sum13(l): 
    return sum(remove_13(l)) 
+1

注:Py3.5 + '13'がリストの最後の項目であれば' DeprecationWarning'を表示します。なぜなら、それはもはや静かに渡されない 'StopIteration'を引き起こしているからです。削除するには、明示的に 'try:_ except StopIteration:break'を実行することができます。彼がしようとしているのは、「x == 13:break」の直後に来る数字も「数えません」 - つまり、数字が「数字」であるかどうかは、OPからはっきりしていません。 – AChampion

+0

@AChampion Hmm [PEP 479](https://www.python.org/dev/peps/pep-0479/)のように見えて誰も私に言った。 –

+0

@AChampion私はそれがはっきりしていないことに同意するが、私はそれはありそうもないと思う。 '[1、2、13、4、5、6、7、8、9、10]のリストでは、' 10'が '13'の直後にあると考えるのが少しです。 –

0
def sum13(nums): 
count = sum(nums) 
for i in range(len(nums)): 
    if nums[i] == 13: 
     # count = count - 13 
     # count = count - nums[i+1] 
     #print(nums[:i]) 
     count = sum(nums[:i]) 
return count 
関連する問題