Выход из нескольких циклов
Есть входной список, элементы которого состоят из некого текста. Нужно проверить, есть ли в элементах списка слова из одного списка и из другого, и если есть слова из одного, и нет из другого, то вывести некое сообщение.
Не получается завершить несколько циклов после получения результата и перейти к следующему элементу списка
some_text = ['some text','another text','one more'] whitelist = ['another','more'] blacklist = ['some','else'] for text in some_text: for items in blacklist: if text.find(items) != -1: for item in whitelist: if text.find(item) == -1: print('Found!') else: print('Not found')
Также прошу простить за возможные ошибки или опечатки в коде.
Отслеживать
23.4k 3 3 золотых знака 49 49 серебряных знаков 70 70 бронзовых знаков
задан 29 июн 2015 в 14:57
83 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака
связанный вопрос Можно ли прервать цикл, находясь внутри функции?
17 дек 2017 в 16:33
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Вариант первый, некрасивый
Для выхода из цикла до его нормального завершения в Python используется оператор break :
for item in items: if some_condition: break
Для того, чтобы выйти из нескольких циклов по условию, выполнившемуся во внутреннем цикле, используется флаг выхода — переменная, которая изначально имеет значение False , а при необходимости выйти из цикла преждевременно принимает значение True :
flag = False for outer in outer_list: for inner in inner_list: if some_condition: flag = True break if flag: break
Таким образом можно выйти из любого количества вложенных циклов, нужно лишь добавлять проверку на флаг выхода в конец каждого.
Вариант второй, красивый
Вам стоит немного поменять структуру вашего кода. Для начала вынесите проверки на вхожденения слов из blacklist и whitelist в отдельную функцию:
def contains_words(text, words_list): for word in words_list: if text.find(word) != -1: return True return False
Теперь проверка на вхождение слов из whitelist и невхождение слов из blacklist будет выглядеть так:
for text in some_text: if contains_words(text, whitelist) and not contains_words(text, blacklist): print("Found") else: print("Not found")
Если выражение contains_words(text, whitelist) вернёт False , Python не станет вычислять значение выражения not contains_words(text, blacklist) , так как, каким бы оно ни было, значение выражения contains_words(text, whitelist) and not contains_words(text_blacklist) всегда будет False .
Переписав код таким образом вы сохраните изначально задуманную функциональность, при этом значительно повысив читаемость кода и упростив возможные изменения в будущем.
Прервать (break) внешний (средний) вложенный цикл for в цикле
Доброго времени суток! Возникла заминка с циклами в питоне. Суть задачи в том, чтоб при нахождении определенного значения в списке «c», список «a» переходил на следующею итерацию, а списки «b» и «c» обнулялись. Не могу понять как такое провернуть с циклом с двойным вложением.
a = [1, 2, 3, 4, 5] b = [10, 20, 30, 40, 50] c = [100, 200, 300, 400, 500] for i in a: for j in b: for q in c: if q == 400: pass print(i, j, q)
Если цикл с одним вложением — все очень просто. Помогает инструкция брейк, цикл «b» завершается и наступает переход к следующей итерации цикла «a»:
a = [1, 2, 3, 4, 5] b = [10, 20, 30, 40, 50] for i in a: for j in b: if j == 40: break print(i, j)
а как быть в первом случае?
Выход из цикла в С и Python: как правильно останавливать
Операто р «break» позволяет просто прервать цик л п ри достижении необходимого результата. После его объявления программа начнет выполнение со следующего оператора. Если «break» применяется во вложенном цикле, то выполнение кода продолжится во внешнем цикле, полностью заканчивая выполнение вложенного.
Например:
number = 0
for number in range(20):
print (“Я искомое число“ + str(number))
for another_number in range range(5):
number = number +1
if number == 3:
break
print( “ Я число, которое остановило программу:“ + str(another_number))
print ( “Цикл окончен“ )
В нашем случае , ка к т олько будет найдено , переменная «number» станет равной «3», вложенный цикл окончит свою работу , а код продолжит свою работу во внешнем цикле.
Оператор « continue »
Данный оператор применяется, когда нужно совершить не полный выход из цикла Python. Его используют, если необходимо не полностью выйти из цикла, а перейти к его следующей итерации. Или же «continue» применяется во внешнем цикле, для того чтобы пропустить выполнение вложенного.
Например:
number = 0
for number in range(20):
print (“Я искомое число“ + str(number))
continue
for another_number in range range(5):
number = number +1
if number == 3
print( “ Я число, которое остановило программу:“ + str(another_number))
print ( “Цикл окончен“ )
При таком применении оператора «continue» в ложенный цикл выполняться не будет.
Выход из цикла в С/С++
- break;
- continue.
Оператор « break »
Оператор «break» применяется в циклах «for», «while», «do-while», а также с оператором «switch». Наиболее часто оператор «break» применяется с условным оператором «if», когда в коде проверяется какое-то условие , и если найдено соответствие, то происходит выход из цикла.
Например:
#include
using namespace std;
void main()
int i, j;
// Рассмотрим применение «break» в разных ситуациях
// Применение «break» в цикле for
cout
for (i = 0; i < 10; i++)
if (i == 7)
break; // выход из цикла С, когда переменная i в нашем for будет равняться 7
// после выхода из цикла выполняется следующий код
cout >
// Применение «break» в цикле while
cout
i = 0;
while (i < 10)
if (i == 7)
break;
cout i++;
>
// Применение «break» в цикле do-while
cout
i = 0;
do
if (i == 7)
break;
cout i++;
> while (i < 10);
>
Операто р «continue»
Как и в языке Python, оператор «continue» применяется , когда необходимо перейти к следующей итерации цикл а л ибо необходим выход из вложенного цикла С во внешний. Данный оператор применяется во всех циклах С: for, while, do-while.
Например:
int main()
for (int count = 0; count < 40; ++count)
// Когда число делится на 5 без остатка, тогда пропускаем весь код при помощи оператора «continue»
if ((count % 5) == 0)
continue; // после этого оператора пропускается весь код, а выполнение программы переходит на конец цикла
// Когда число не делится без остатка на 5, тогда выполнение кода продолжается
std::cout
// Если сработало условие и отреагировал оператор «continue», тогда работа программы переносится в эту точку
>
return 0;
>
Заключение
Выход из цикла Python и С/С++ происходит по похожему сценарию. Если выучить правильное применение операторов «break» и «continue» в этих языках программирования, тогда эти знания можно будет применять и в других языках, потому что подход будет идентичным.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Как выйти из цикла if в python? [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 3 года назад .
Скажите пожалуйста как выйти из цикла в питоне? Срочно! (если понадобится код то вот
s = input().split() a = int(s[0]) b = int(s[1]) m = min(a, b) for i in range(m): o = m - i if a % o == 0 and b % o == 0: print(o)
надо после print(o)выйти из цикла
Отслеживать
47.8k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 22 апр 2020 в 7:35
bratlukandr bratlukandr
1 1 1 серебряный знак 1 1 бронзовый знак
Возможный дубликат вопроса: Как выйти из цикла python
22 апр 2020 в 7:38
Просто добавьте break в условии после print
22 апр 2020 в 7:41
@AlexanderChernin, не дубликат, там другая ситуация — два вложенных цикла.
22 апр 2020 в 7:44
Спасибо за ответ!
22 апр 2020 в 8:11
Теперь бы еще узнать как сделать так чтобы этот код всегда работал меньше чем за 1 секунд)
22 апр 2020 в 8:11
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Используйте break для выхода из цикла. Используйте return для выхода из функции.
Отслеживать
ответ дан 22 апр 2020 в 8:25
Vitaly Potlov Vitaly Potlov
1,074 2 2 золотых знака 10 10 серебряных знаков 21 21 бронзовый знак
Можно оформить как функция и добавить return для выхода
def www(): s = input().split() a = int(s[0]) b = int(s[1]) m = min(a, b) for i in range(m): o = m - i if a % o == 0 and b % o == 0: print(o) return www()
Отслеживать
ответ дан 22 апр 2020 в 8:20
975 1 1 золотой знак 8 8 серебряных знаков 15 15 бронзовых знаков
- python
- python-3.x
- циклы
-
Важное на Мете
Связанные
Похожие
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.21.1314
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
