В Python, почему мой цикл for исключает число перед определенным числом, только когда это число является последним в массиве? - PullRequest
3 голосов
/ 16 апреля 2019

Я работаю над проблемой codingbat и получаю неожиданные результаты, когда исключенное число находится в конце массива.

def sum13(nums):
  a = []

  if len(nums) == 0:
    return 0
  for i in range(len(nums)):
    if nums[i] == 13 or nums[i-1] == 13:
      continue
    a.append(nums[i])

  return sum(a)

Код должен добавлять все числа в массиве к списку a и возвращать сумму, исключая любые экземпляры числа 13 и числа, следующего непосредственно за ним. Он прекрасно работает для большинства тестов, но когда массив заканчивается на 13, он не добавляет число с индексом 0 в список, возвращая неверный результат.

Ответы [ 2 ]

4 голосов
/ 16 апреля 2019

Когда i равно 0, nums[-1] оценивается. nums[-1] - последний элемент nums. В этом и заключается ваша проблема.

Если nums[-1] равен 13, continue выполняется, поэтому ничего не добавляется к nums

2 голосов
/ 16 апреля 2019

Обязательно ли использовать списочные индексы?Вы можете просто пройтись по списку и установить флаг, как только вы найдете 13, и сбросить его, когда вы передадите следующий номер.

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