Есть ли еще цикл for, если да, почему еще не выполняется? - PullRequest
0 голосов
/ 25 октября 2019
numbers = [10, 20, 33, 55, 39, 55, 75, 37, 21, 23, 41, 13]

for num in numbers:
    if num % 2 == 0:
       print(num)
       break
else:
   print(num)

В приведенном выше коде у меня есть блок else, соответствующий циклу for, который не выполняется. кто-нибудь может подсказать мне, почему он не выполняется?

Ответы [ 4 ]

3 голосов
/ 25 октября 2019

Да, блок else соответствует циклу for, но он будет выполняться, только если break НИКОГДА не выполняется. Поскольку у вас есть четные числа в numbers, выполняется разрыв списка, и поэтому else не выполняется

for num in numbers:
  if num % 2 == 0:
     print(num)
     break
else:
  print(num)

Попробуйте с этим списком number=[11,22,33], блок else будет выполнен, длядополнительная информация 4.4. операторы break и continue и другие операторы Loops

Python имеет другой синтаксис, где операторы Loop могут иметь предложение else

операторы Loop могут содержать предложение else;он выполняется, когда цикл завершается из-за исчерпания итерируемого (с помощью for) или когда условие становится ложным (с помощью while), но не тогда, когда цикл завершается оператором break. Это иллюстрируется следующим циклом, который ищет простые числа:

0 голосов
/ 25 октября 2019

Я думаю, лучше продемонстрировать это с помощью различных тестов. Таким образом, цикл for может иметь блок else. блок else выполняется только в том случае, если цикл завершен нормально. IE не было break в цикле. если мы создадим функцию, которая принимает список и делитель. мы видим, что если условие if соответствует и мы печатаем, а затем прерываем, блок else никогда не запускается. Только если мы пройдем весь цикл без break, то else будет выполнено

def is_divisable_by(nums, divider):
    for num in nums:
        if num % divider == 0:
            print(num, "is divsiable by ", divider)
            break
    else:
        print("none of the numbers", nums, "were divisable by", divider)

numbers = [1, 6, 3]
numbers2 = [7, 8, 10]
is_divisable_by(numbers, 2)
is_divisable_by(numbers, 7)
is_divisable_by(numbers2, 4)
is_divisable_by(numbers2, 6)

ВЫХОД

6 is divsiable by  2
none of the numbers [1, 6, 3] were divisable by 7
8 is divsiable by  4
none of the numbers [7, 8, 10] were divisable by 6
0 голосов
/ 25 октября 2019

Кажется, что отступ не верен, попробуйте это.

for num in numbers:
    if num % 2 == 0:
        print(num)
        break
    else:
        print(num)
0 голосов
/ 25 октября 2019

Для этого еще нет «если». Я думаю, вам нужно что-то вроде этого:

numbers = [10, 20, 33, 55, 39, 55, 75, 37, 21, 23, 41, 13]

for num in numbers:
    if num % 2 == 0:
        print(num)
        break
print(num)
...