Как выполнить итерацию по части массива и почему мой l oop не работает? - PullRequest
1 голос
/ 09 мая 2020

Если число 9 находится в первых 4 цифрах входного массива, оно должно вернуть True. Длина массива может быть меньше 4.

Почему это l oop не работает? Он возвращает True и False только в некоторых тестовых случаях.

def array_front9(nums):
  for num in nums:
    first4 = nums[0:4]
    if num in first4 and num == 9:
      return True
    else:
      return False

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Вам не нужен for l oop, поскольку оператор in будет перебирать символы строки за вас. Вы также должны сравнить строку со строкой, а не с числом, которое никогда не будет равно строке:

def array_front9(nums):
    return '9' in nums[0:4]
0 голосов
/ 09 мая 2020

Хороший первый вопрос: «что означает 9»?

Если у вас есть массив чисел, считанный из командной строки или из пользовательского ввода, то «9», скорее всего, символ «9», то есть код ASCII 57 или кодовая точка Unicode U + 0039.

С другой стороны, если в вашем массиве есть действительные целые числа , тогда вы, вероятно, имеете дело с целочисленным значением 9 (которое будет символом ASCII TAB ).

Во-вторых, вы слишком нетерпеливы!

Рассмотрите этот ввод: [0, 0, 0, 0].

Что происходит?

def array_front9(nums):
  for num in nums:
    first4 = nums[0:4]
    if num in first4 and num == 9:
      return True
    else:
      return False

Ну, nums это [0] * 4, потому что он был передан.

Тогда num начинается как 0.

Тогда first4 становится [0, 0, 0, 0].

Тогда num in first4 определенно верно,

но num == 9 определенно неверно

, поэтому and это False.

Затем if не выполняется, а else выполняется

Итак, ваш код выполняется a return False.

Но это не так!

Потому что это произошло, когда вы все еще смотрели на самое первое значение в массиве. Вы никогда не проверяли другие значения, потому что вы return False слишком рано.

Вам разрешено сделать упреждающий возврат, когда вы знаете результат - когда вы обнаружите 9 в первые 4 места. Но если вы собираетесь сканировать каждое из 4 мест, вы не можете вернуть false , пока не завершите sh сканирование.

Примерно так:

for num in nums[0:4]:
    if num == 9:
        return True

# Note: this is after the for loop
return False
...