Цикл с i-1 не находит правильное значение - PullRequest
0 голосов
/ 04 октября 2018

Задача:

Возвращает сумму чисел в массиве, возвращая 0 для пустого массива.За исключением того, что число 13 очень неудачно, поэтому оно не учитывается, и числа, которые приходят сразу после 13, также не учитываются.

Ожидается тестовый образец:

  1. sum13 ([1, 2, 13, 2, 1, 13]) → 4
  2. sum13 ([1, 2, 2, 1, 13]) → 6

Мой код дает следующие результаты:

  #sum13([1, 2, 13, 2, 1, 13]) → 3
  #sum13([1, 2, 2, 1, 13]) → 5

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

Почему не учитывается число перед последними 13 числами?

UPD:

Спасибо за комментарии, разберитесь в проблеме.Исправьте так:

  def sum13(nums):
  s = 0
  if not nums:
    return 0
  for i in range(len(nums)):
    if nums[i]==13 or (nums[i-1]==13 and i-1>=0):
      s += 0
    else:
      s += nums[i]
  return s

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Это происходит потому, что для вашего первого прохода цикла i равно -1.

Я думаю, вы можете попробовать эту версию, чтобы дать вам то, что вы хотите:

def sum13(nums):
    s = 0
    if nums:
        prev = False
        for i in range(len(nums)):
            if not prev and nums[i] != 13:
                s += nums[i]
            prev = nums[i] == 13
    return s
0 голосов
/ 04 октября 2018

Ваш цикл начинается с индекса 0, поэтому на первой итерации вы проверяете, есть ли nums [0] == 13 или nums [-1] == 13 (в индексе python -1 вы получите последний элемент списка),Таким образом, в обоих тестовых случаях условие истинно, поскольку последний элемент равен 13, то есть причина, по которой 1 не добавляется в s.Решение состоит в том, чтобы начать ваш индекс с 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...