Python Для циклов с операторами while и if: Почему он не возвращается в первом случае? - PullRequest
0 голосов
/ 27 февраля 2020

Эй, ребята, я знаю, этот вопрос может показаться глупым, но я только начал. Это Python 3.7.
В любом случае я написал 2 версии кода, вторая работает, но я добавил еще одну, пока oop, где я думал, что она не нужна. Почему не работает первая версия? Итерирует список чисел (чисел).

Это из постановки задачи: Напишите функцию, которая принимает список целых чисел и возвращает True, если она содержит 007 в порядке.

  • spy_game ( [1,2,4,0,0,7,5]) -> True
  • spy_game ([1,0,2,4,0,5,7]) -> True
  • spy_game ([1,7,2,0,4,5,0]) -> False

Мой первый код был таким, и он всегда возвращал False:

z = 0

for i in nums:
    while z < 2:
        if i != 0:
            break
        else:
            z += 1
            break
    if i != 7:
        break
    else:
        return True

return False

Почему это меняется, заставляет его работать?

z = 0

for i in nums:
    while z < 2:
        if i != 0:
            break
        else:
            z += 1
            break
    while not z < 2:
        if i != 7:
            break
        else:
            return True

return False

Большое спасибо!

1 Ответ

0 голосов
/ 27 февраля 2020

Ваша проблема в том, как вы используете while-l oop. Код в while-l oop выполняется, пока выполняется условие. Однако вы вызываете перерыв или возвращаетесь внутрь while-l oop в каждом случае. Так что вы на самом деле хотите использовать оператор if вместо while-l oop. Тогда перерыв будет работать так, как вы ожидали, что он будет работать в первом примере. Прерывание заставляет программу выпрыгнуть из текущего l oop, то есть while-l oop. Но для того, чтобы первый пример работал правильно, он должен выпрыгнуть из более высокого значения для -l oop. Использование if вместо while должно исправить это.

Может быть попробовать что-то вроде этого:

z = 0

for i in nums:
   if z < 2:
      if i == 0:
         z += 1
   else:
      if i == 7:
         return True

return False
...