1

質問:

配列内の数値の合計を返し、空の配列の場合は0を返します。13という数字は非常に不運なので、カウントされず、13の直後の数字もカウントされません。

私のコード:

def sum13(nums):
  l = len(nums)
  tot = 0

  if l==0:
    return 0

  for x in range(l):
    if nums[x]!=13:
      if nums[x-1]!=13:
        tot+=nums[x]

  return tot

失敗している場所:

sum13([1, 2, 2, 1, 13]) should → 6, but my code is outputting 5
sum13([1, 2, 13, 2, 1, 13]) should → 4, but my code is outputting 3
4

29 に答える 29

3

enumerate()インデックスを指定できます。次に、のジェネレータ式を使用して実行できますsum()。リストの最後に追加された0は、nums[i-1]いつでも機能しi = 0ます。

def sum13(nums):
   nums += [0]
   return sum(n for i, n in enumerate(nums) if n != 13 and nums[i-1] != 13)
于 2013-12-20T02:08:22.093 に答える
3

解決策は次のとおりです。

def sum13(nums):

    if len(nums) == 0:
        return 0

    for i in range(0, len(nums)):
        if nums[i] == 13:
            nums[i] = 0
            if i+1 < len(nums): 
                nums[i+1] = 0
    return sum(nums)
于 2015-12-06T04:20:31.157 に答える
2

あなたの問題は、xがゼロのときです。リストの最後の要素を取得するようになります(x - 1)。これを修正するには、がゼロかどうかをテストしないでください。-113x - 1x

if x == 0 or nums[x-1] != 13:

Pythonでは、負のインデックスをリストに渡すと、その要素に逆方向にアクセスするため、次のようになります。

>>> x = [1,2,3,4,5]
>>> x[-1]
5
>>> x[-2]
4
于 2013-02-15T18:44:55.660 に答える
1

You could avoid the bug by using next() function instead of error-prone indexes:

def exclude13(iterable):
    it = iter(iterable)
    for x in it:
        if x == 13: # don't yield 13
           next(it) # skip number immediately after 13
        else:
           yield x

print(sum(exclude13([1, 2, 2, 1, 13]))) # -> 6
print(sum(exclude13([1, 2, 13, 2, 1, 13]))) # -> 4
于 2013-02-15T19:10:14.863 に答える
1
def sum13(nums):
    count = 0
    while count < len(nums):
        if nums[count] == 13:
            del nums[count:count+2]
            continue
        count += 1
    return sum(nums)
于 2013-07-05T06:48:57.230 に答える
1
def sum13(nums):
    count = 0
    sum = 0
    for i in range(len(nums)):
         if nums[i] == 13 or sum == 1 :
            nums[i]= 0
            sum = sum + 1
         count = count + nums[i]
         if sum  ==  2:
            sum  = 0
    if nums == []:
          return 0
    return coun
于 2013-11-08T00:05:17.487 に答える
1
def sum13(nums):
  if len(nums)==0:
    return 0
  sum=0
  for i in range(1,len(nums)):
    if nums[i]==13 or nums[i-1]==13:
      sum = sum
    else:
      sum += nums[i]
  if nums[0]==13:
    return sum
  else:
    return sum + nums[0]

ループフォーム1を開始し、最後に最初の番号(13でない場合)を追加し直します。

于 2015-07-22T21:35:56.350 に答える
1

元のリストが変更されないようにリストのコピーを作成し、番号13とその直後の番号のインスタンスを削除してから、結果のリストを合計します。

def sum13(nums):
    nums = nums[:]
    while 13 in nums:
        i = nums.index(13)
        del nums[i:i+2]
    return sum(nums)

これは、この問題の一番の答えに似ています。これに対する よりエレガントな解決策を探しています

于 2017-06-01T16:02:21.220 に答える
1
    def sum13(nums):
        sum = 0
        len_n = len(nums)
        k = 0
        while k < len_n:
            if nums[k] == 13:
                k += 2
            else:
                sum += nums[k]
                k += 1
        return sum
于 2017-09-09T06:54:02.240 に答える
1

それを見る別の方法:

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

  return sum(nums)-sub
于 2019-10-29T12:22:27.827 に答える
1

item=13カウントされない場合とカウントされない場合をitem+1除くリストの合計

def sum13(nums):
  if len(nums)==0:
    return 0
  if nums[-1]==13:
    nums[-1]=0
  for i in range(len(nums)-1):
    if nums[i]==13:
      nums[i]=0
      nums[i+1]=0
  return sum(nums)
于 2020-01-09T09:44:56.707 に答える
1
def sum13(nums):
  result = 0
  i = 0

  while i < len(nums):
    if nums[i] == 13:
      i += 2
      continue
    else:
      result += nums[i]
      i += 1

  return result
于 2020-05-23T07:43:07.817 に答える
0

の直後ある番号を除外する必要があるのに、13の直前にある番号を除外しています。

于 2013-02-15T18:45:34.063 に答える
0

再帰的なソリューションを使用することをお勧めします。リストのインデックスが範囲外になる可能性がある一方で、スライスするとエラーではなく空のリストが表示されることに注意してください。たとえば、a = [1,1,2]の場合、a [3]はエラーになり、a [3:]はエラーになります。空のリスト[]。

def sum13(nums):
  if len(nums) == 0:
    return 0
  sum = sum13(nums[1:])
  if nums[0] != 13:
    return sum + nums[0]
  if nums[0] == 13:
    return sum13(nums[2:])
于 2014-06-05T00:03:10.733 に答える
0

私は次のように問題を解決しました。それはブルートフォースですが、機能します:

def sum13(nums):
    count = 0
    if len(nums) == 0: 
        return 0
    for ans in range(len(nums)):
        if nums[ans] == 13 and ans < len(nums)-1: 
            nums[ans] = 0
            nums[ans+1] = 0
        elif nums[ans] == 13 and ans == len(nums)-1:
            nums[ans] = 0 
        else: 
            count += nums[ans]

    return count
于 2014-12-29T22:08:17.097 に答える
0
def sum13(nums):
  nums2 = []
  if 13 in nums:
    for i in range(len(nums)-1): # the -1 is needed to avoid out of range.
      if nums[i] != 13: nums2.append(nums[i])
      else:
        nums[i] = 0
        nums[i+1] = 0
    return sum(nums2)
  return sum(nums)

別のリストを作成し、必要な図をそのリストに追加しました。これは、すべての要素を調べて、13に等しくない場合はその図を追加することにより、forループを介して行いました。

それが最終的に数13に等しくなったとき、私はそれをゼロに設定することによってその数を変更します(nums [i] = 0)。次に、インデックスを作成して次の数値をゼロに設定する必要があります(nums [i + 1] = 0)。そのため、リストの合計から割引されます。

これは完璧な解決策ではありませんが、機能する解決策です。

于 2018-03-24T23:14:52.537 に答える
0

これは私が取ったアプローチです、これもうまくいきます

nums = [1, 2, 2, 1, 13,2,1,2,3,13,4,5]
counter = 0
temp = []
for i in range(len(nums)):
    if nums[i] == 13:
        if (i+1) != len(nums) and nums[i+1] != 13:
            temp.append(nums[i+1])
            continue
        elif (i+1) == len(nums):
            continue
    else:
        counter = counter + nums[i]
temp_total = sum(temp)
count_total = counter - temp_total
print(count_total)
于 2019-02-11T23:42:55.473 に答える
0

競合する場合は、x=013であるかのようになり、追加されない場合がありますので、最後に確認してください。nums[x-1]nums[0-1]nums[0]

def sum13(nums):
  co=0
  if len(nums)<=0:
    return co
  for a in range(1,len(nums)):
    if nums[a]==13:
      continue
    elif nums[a-1]==13:
      continue
    else:
      co=co+nums[a]      
  if nums[0]!=13:
    co+=nums[0]
  return co


于 2019-06-15T12:14:37.727 に答える
0

これがこの演習の私の解決策です!!!!

def sum13(nums):
    total = 0
    for i in range(len(nums)):
        if (nums[i] == 13 or nums[i-1] == 13 and i != 0):
            total = total
        else:
            total += nums[i]
    return total
于 2019-07-06T07:11:52.437 に答える
0
def sum13(nums):
    sum=0
    ind13=[]
    for num in nums:
        if num==13:
            num=0
            ind13=nums.index(13)
            ind13next=ind13+1
            nums[ind13]=0
            if nums[ind13] !=nums[-1]:
                nums[ind13next]=0
                sum=sum+num
        else:
            sum=sum+num
    return sum
于 2019-08-13T12:14:47.430 に答える
0
def sum13(nums):

  summed=0
  flag=True
  index_13=0

  for index, num in enumerate(nums):

    if num==13:
      index_13=index
      flag=False

    if flag==True:
      summed=summed+num

    if index_13+1<= len(nums)-1 and num==nums[index_13+1]:
       flag=True

  return summed
于 2019-08-22T21:12:38.890 に答える
0
def sum13(nums):
    li=[]
    if nums[-1]==13:
        li.append(13)
    for i in range(len(nums)-1):
        if nums[i]==13:    
            li.append(nums[i])
            li.append(nums[i+1])
    n=sum(nums)
    return (n-sum(li))
于 2020-05-30T17:21:01.683 に答える
0

配列内の数値の合計を返し、空の配列の場合は0を返します。13という数字は非常に不運なので、カウントされず、13の直後の数字もカウントされません。

   def sum13(nums):
       nums += [0]
       add=sum(j for i, j in enumerate(nums) if j != 13 and nums[i-1] != 13)
       return add
于 2020-06-04T07:22:38.730 に答える
0
def sum13(nums):
  sum=0
  count=0
  for i in range(len(nums)):
    if nums[i]!=13:
        count=count-1
        if count<=0:
            sum=sum+nums[i]
    else:
        count=2
  return sum
于 2020-07-20T11:45:36.463 に答える
0

私が問題について考える方法は、最後の要素を除いて、リストをループするのに役立ちます。次に、値が13の場合、次の要素は0になります。そこから-リストをリロードします-すべての13を0に置き換えます。最後に、リストの値を単純に合計します。

def sum13(nums):
for i,x in enumerate(range(len(nums)-1)):
    if (nums[x]==13):
        nums[i+1]=0
        nums=nums
for i,x in enumerate(nums):
    if x==13: #if the element is equal to 13
        nums[i]=0
return sum(nums)
于 2020-09-24T02:00:53.053 に答える
0

これも機能するはずです。基本的に、それは二重継続ステートメントです。enumerate()を使用して、反復ごとにインデックスと値のペアを割り当てます。数値が==13->続行する場合、次の反復アイテムはelifステートメントの対象となります。これは、13が前にあるアイテムに対しても続行されます。Elifは、インデックス> = 1のアイテムに対してのみ実行されます(したがって、 [0]で範囲外になります)。

def sum13(nums):
  if nums ==[]:
    return 0
  sum = 0
  for index, val in enumerate(nums):
    if nums[index] == 13:
      continue
    elif nums[index-1] == 13 and index > 0:
      continue
    else:
      sum += val
  return sum
于 2020-12-29T18:53:40.047 に答える
0
def sum13(nums):

  total = sum(nums)

  for i in range (len(nums)):
    if nums[i]==13:
      total = total - nums[i]
      if (i+1) < len(nums) and nums[i+1]!=13: #Using !=13 because 13 will already
        total = total-nums[i+1]               #be detected from previous if

  return total
于 2021-12-11T22:00:30.257 に答える
0
def sum13(nums):
  if len(nums) == 0:
    return 0
  total = 0
  for i in range(len(nums)):
    if nums[i] == 13 and  (len(nums)-1)>i:
      nums[i+1]=0
      total = total
    elif nums[i]==13:
      total = total
    else:
      total = total +nums[i]
  return total
于 2021-12-19T10:05:04.630 に答える
0

ここで別の解決策:

def sum13(nums):
  for i in range (len(nums)) :
    if nums[i] == 13 :
      nums[i] = 0 
      if i+1 < len(nums) and nums[i+1] != 13 :
        nums[i+1] = 0
        
  return sum(nums)
于 2022-01-01T20:51:24.323 に答える