Проверьте, появляется ли определенная последовательность чисел в массиве. Что не так с моими мыслями? - PullRequest
0 голосов
/ 16 мая 2018

Я изучаю основы Python и выполняю упражнения для пальцев.Этот один вопрос утомляет меня.Я не знаю, где я сделал не так.Вопрос в следующем:

Учитывая массив целых чисел, вернуть True, если последовательность чисел 1, 2, 3 где-то появляется в массиве.

Мое решение:

def array123(nums):
  arr1 = [1, 2, 3]
  if len(nums) < 3:
    return False
  for i in range(len(nums)-2):
    if nums[i:i+3] == arr1:
      return True
    else:
      return False

Я понимаю, что это даст мне False, пока первые 3 символа, поэтому я изменяю его на:

def array123(nums):
  arr1 = [1, 2, 3]
  if len(nums) < 3:
    return False
  for i in range(len(nums)-2):
    print(nums[i:i+3])
    if nums[i:i+3] == arr1:
      return True
  return False

На этот раз это работает.Мне интересно, должен ли я убрать «return False» из раздела подкодов последнего if?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Да.

В первом решении, если первые 3 дюйма - это не то, что вы ищете, вы бы остановились.Это не то, что вы хотите.Вы хотите продолжать движение и пробовать другие местоположения.

Когда вы переместили его из цикла, вы возвращаете false только после того, как проверили все позиции и ни одно из них не совпало.

0 голосов
/ 16 мая 2018

Когда вы пишете

if nums[i:i+3] == arr1:
      return True
    else:
      return False

, если условие не выполняется, функция прекращает выполнение и возвращает False.

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

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