Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
36 / 30 / 13
Регистрация: 08.12.2012
Сообщений: 810

Внешний цикл for: при всех break во внутреннем цикле, во внешнем их нет

14.05.2025, 17:51. Показов 1343. Ответов 8

Студворк — интернет-сервис помощи студентам
столкнулся со странным для меня поведение внешнего цикла for
вот код , из комментариев , думаю, понятно что он ищет, НО
при всех break во внутреннем цикле, во внешнем их нет, но
почему-то строка после else внешнего цикла "Среди чисел от 0 до 1000000 нет подходящих"
не выводится
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import random
 
for i in range(1_000_001):  # перебираем все сиды от 0 до 1000000
    random.seed(i)
    for j in range(20):  # симулируем 20 бросков монеты
        if not random.randrange(2):
            break  # если выпадает решка, то переходим к следующему сиду (этот не подходит)
    else:  # если цикл не был прерван, значит все 20 монет выпали "орлом"
        print(i)  # выводим "удачный" сид
        break
else:
    print("Среди чисел от 0 до 1000000 нет подходящих")  # этот текст будет выведен если
 # среди чисел от 0 до 1000000 не найдется подходящего сида
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.05.2025, 17:51
Ответы с готовыми решениями:

Проблема с циклом while и оператором break
Всем, доброго времени суток! Подскажите пожалуйста как исправить код Выполняя ДЗ, хотел сделать...

Как сделать два условия в цикле без break
Нужно, чтобы как только sum стало 10 он выходил из цикла, но чтобы был шаг i, который меняется на...

Цикл while зациклился, несмотря на break
Доброго времени суток! Столкнулась с проблемой зацикливания. На входе имеем следующие данные: 1)...

8
 Аватар для ViachaslauK
122 / 179 / 16
Регистрация: 08.10.2024
Сообщений: 618
14.05.2025, 19:04
Цитата Сообщение от ujif Посмотреть сообщение
почему-то строка после else внешнего цикла "Среди чисел от 0 до 1000000 нет подходящих"
не выводится
И не должна, у вас выход происходит по break в строке 10
else выполняется для цикла for/while только если он естественно закончился
1
36 / 30 / 13
Регистрация: 08.12.2012
Сообщений: 810
14.05.2025, 19:14  [ТС]
Цитата Сообщение от ViachaslauK Посмотреть сообщение
у вас выход происходит по break в строке 10
это понятно, НО, else относится к внутреннему циклу for j in range(20),
я убрал break из else и тогда внешний цикл отработал до конца и
была выведена строка "Среди чисел от 0 до 1000000 нет подходящих"
Вопрос остается, как break в данном месте кода
Python
1
2
3
else:  # если цикл не был прерван, значит все 20 монет выпали "орлом"
        print(i)  # выводим "удачный" сид
        break
относится к прерыванию внешнего цикла?
0
 Аватар для ViachaslauK
122 / 179 / 16
Регистрация: 08.10.2024
Сообщений: 618
14.05.2025, 19:37
Лучший ответ Сообщение было отмечено ujif как решение

Решение

Цитата Сообщение от ujif Посмотреть сообщение
относится к прерыванию внешнего цикла?
Смотрите - у вас внутренний цикл закончился и не вызвал break. дальше пошло выполнение else - это уже НЕ внутренний цикл, а после него, то есть управление уже во внешнем цикле и там вызывается break, который и прерывает нормальное выполнение цикла.
1
36 / 30 / 13
Регистрация: 08.12.2012
Сообщений: 810
14.05.2025, 19:54  [ТС]
Цитата Сообщение от ViachaslauK Посмотреть сообщение
Смотрите - у вас внутренний цикл закончился и не вызвал break. дальше пошло выполнение else - это уже НЕ внутренний цикл, а после него, то есть управление уже во внешнем цикле и там вызывается break, который и прерывает нормальное выполнение цикла.
спасибо за поддержку, довольно странное поведение, на мой взгляд, везде пишут, что для прерывания внешнего, нужен break именно в его пространстве, но , теперь буду иметь в виду и такое развитие
0
 Аватар для ViachaslauK
122 / 179 / 16
Регистрация: 08.10.2024
Сообщений: 618
15.05.2025, 08:15
Цитата Сообщение от ujif Посмотреть сообщение
что для прерывания внешнего, нужен break именно в его пространстве,
Break в else НЕ относится к внутреннему циклу. Не знаю как бы это нарисовать
Python
1
2
3
4
5
6
7
8
for i in range(...):                # внешний цикл
    ...
    for j in range(20):            # внутренний цикл
        if ...:
            break                  # прерывает внутренний цикл
    else:                          # этот else связан с внутренним for
        print(i)
        break                      # ← ЭТО break относится к ВНЕШНЕМУ for
Добавлено через 3 минуты
Вот например в try/excep - похожее поведение
Python
1
2
3
4
5
6
7
8
try:
    # код, который может вызвать исключение
except Ошибка:
    # обработка исключения
else:
    # выполняется, если исключения НЕ было
finally:
    # выполняется ВСЕГДА (даже если был return или ошибка)
1
36 / 30 / 13
Регистрация: 08.12.2012
Сообщений: 810
15.05.2025, 15:29  [ТС]
Цитата Сообщение от ViachaslauK Посмотреть сообщение
Break в else НЕ относится к внутреннему циклу
Python
1
2
3
4
5
6
7
8
9
10
11
12
import random
 
for i in range(1_000_001):  # перебираем все сиды от 0 до 1000000
    random.seed(i)
    for j in range(20):  # симулируем 20 бросков монеты
        if not random.randrange(2):
            break  # если выпадает решка, то переходим к следующему сиду (этот не подходит)
    else:  # если цикл не был прерван, значит все 20 монет выпали "орлом"
        print(i)  # выводим "удачный" сид
        
else:
    print("Среди чисел от 0 до 1000000 нет подходящих")
Спасиб , я понял, попробовал код без break в else и он отработал до конца и
вывел print("Среди чисел от 0 до 1000000 нет подходящих")
а с break как вы и пишете, код прерывается сразу , как только было выведено
print(i)
0
 Аватар для ViachaslauK
122 / 179 / 16
Регистрация: 08.10.2024
Сообщений: 618
15.05.2025, 17:12
Цитата Сообщение от ujif Посмотреть сообщение
break как вы и пишете, код прерывается сразу , как только было выведено
print(i)
С этими брейками нужно в приниципе быть очень осторожным и не использовать без крайней нужды
в последнем релизе 3.14 в принципе ввели
PEP 765 : Запретить return// break, continueвыходящие из finallyблока.
Это чисто для информации)
1
36 / 30 / 13
Регистрация: 08.12.2012
Сообщений: 810
15.05.2025, 17:56  [ТС]
Цитата Сообщение от ViachaslauK Посмотреть сообщение
С этими брейками нужно
спасиб, очень полезная инфа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2025, 17:56
Помогаю со студенческими работами здесь

Циклы while, операторы break и continue
здравствуйте, вроде делаю по книге: #while-в переводе "пока" i = 0 while i < 10: i += 1...

Ошибка в цикле for/break
Задание: найти, является ли число number произведением двух чисел из списка nums. Само на себя...

Поиск по списку используя цикл и оператор break
Даны металлы . Используя цикл for, break и item (метод items возвращает множество - подобный), т.е....

Остановка цикла без использования break
Доброго времени суток. Есть понимание, как работает оператор break, но есть догадка, что можно...

Как правильно установить функцию Break
Привет! У меня есть программный код который представлен ниже, мне нужно чтобы вместо pass была...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru