2017-10-28 10 views
-1

私は、リスト(nums)をとり、数字が13でないか、または発生していない限り、リスト内の数字を合計する単純なコードを書こうとしています13.私のコードは次のとおりです。リストインデックスの範囲外リスト[0]

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

「リストインデックスが範囲外です。私はリストのインデックスを変更していませんし、nums [0]を呼び出すと、これは0とlen(nums)の間になるように制約されているforループの外にあるので、これを修正する方法がわかりません。問題を解消するよりエレガントな方法でコードを書く方法。

興味深い
+1

は空のリストですか? E:この行にエラーが表示されないことを確かめてください: 'nums [i]!= 13とnums [i - 1]!= 13:'? – tkausl

+2

これは実行時エラーであり、コンパイルエラーではありません。 –

+0

この関数を呼び出すコードを含める必要があります。エラーの原因になると思われます。 – shuttle87

答えて

0

...私はこれを試してみました...

を私はあなたのコードは罰金だ試みたが、あなたがが望むようには動作しません。

def sum13(nums): 
    sum = 0 
    if nums[0] != 13: 
     sum += nums[0] 
    for i in range(len(nums)): 
     print 'Current number:', str(nums[i]) 
     print 'Previous number:', str(nums[i-1]) 
     if nums[i] != 13 and nums[i - 1] != 13: 
     sum += nums[i] 
    return sum 

ls = [10,11,13,12,14,14] 
print 'Total sum:', str(sum13(ls)) 

は59を返し、することになりました。 (10 + 11 + 14 + 14)= 49.

これはなぜ発生したのですか?ループnums [i-1]をチェックインするからです。

最初のループでi = 0なので、i-1 = -1です。したがって、nums [-1]はあなたのリストの最後の項目です。

この小さなテストを試してみることはできますか?この問題を解決する

一つの方法は次のとおりです。

def sum13(nums): 
    sum = 0 
    if nums[0] != 13: 
     sum += nums[0] 
    for i in range(1, len(nums)): 
     print 'Current number:', str(nums[i]) 
     print 'Previous number:', str(nums[i-1]) 
     if nums[i] != 13 and nums[i - 1] != 13: 
     sum += nums[i] 
    return sum 

ls = [10,11,13,12,14,14] 
print 'Total sum:', str(sum13(ls)) 

それはまだあなたのコードとテストを共有することができます動作しない場合は?コメントで述べたように

def sum13(nums): 
    if nums: 
     sum = 0 
     if nums[0] != 13: 
     sum += nums[0] 
     for i in range(1, len(nums)): 
     print 'Current number:', str(nums[i]) 
     print 'Previous number:', str(nums[i-1]) 
     if nums[i] != 13 and nums[i - 1] != 13: 
      sum += nums[i] 
     return sum 
    if not nums: 
     print 'Empty list' 
ls = [10,11,13,12,14,14] 
print 'Total sum:', str(sum13(ls)) 
ls2 = [] 
print sum13(ls2) 

乾杯、

0

nums場合はIndexErrorを引き上げるnums[0]を訪問し、[]です。

ところで:while-loopを使用している場合、あなたは簡単な解決策を持ってしまう、以下を参照:

def sum13(nums): 
    sum = 0 
    i = 0 
    while i < len(nums): 
     x = nums[i] 
     if x == 13: 
      # skip current element and next element 
      i += 2 
     else: 
      sum += x 
      i += 1 
    return sum 
+0

ありがとう、whileループは完全に働いた:) –

関連する問題