- break and continue statement in Python
- break statement inside a nested loop #
- continue statement #
- 5 простых способов выйти из вложенных циклов в Python
- Python break Statement
- Python break Statement Examples
- 1. break statement with for loop
- 2. break statement with the while loop
- 3. break statement with a nested loop
- Why Python doesn’t support labeled break statement?
break and continue statement in Python
The break statement is used to terminate the loop prematurely when certain condition is met. When break statement is encountered inside the body of the loop, the current iteration stops and program control immediately jumps to the statements following the loop. The break statement can be written as follows:
The following examples demonstrates break statement in action.
python101/Chapter-11/break_demo.py
for i in range(1, 10): if i == 5: # when i is 5 exit the loop break print("i =", i) print("break out")
i = 1 i = 2 i = 3 i = 4 break out
As soon as the value of i is 5 , the condition i == 5 becomes true and the break statement causes the loop to terminate and program controls jumps to the statement following the for loop. The print statement in line 6 is executed and the program ends.
The following programs prompts the user for a number and determines whether the entered number is prime or not.
python101/Chapter-11/prime_or_not.py
1 2 3 4 5 6 7 8 9 10 11 12 13
num = int(input("Enter a number: ")) is_prime = True for i in range(2, num): if num % i == 0: is_prime = False # number is not prime break # exit from for loop if is_prime: print(num, "is prime") else: print(num, "is not a prime")
First Run Output:
Enter a number: 11 11 is prime
Second Run Output:
Enter a number: 23 23 is prime
Third Run Output:
Enter a number: 6 6 is not a prime
A prime number is a number that is only divisible by 1 or by itself. Here are some examples of prime numbers:
1, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 33, 37, 41
A number n is prime if it is not divisible by any number from 2 to n-1 . Consider the following examples:
Here are steps to determine whether the number 5 is prime or not.
Question | Programming Statement | Result |
---|---|---|
Is 5 divisible by 2 ? | 5 % 2 == 0 | False |
Is 5 divisible by 3 ? | 5 % 3 == 0 | False |
Is 5 divisible by 4 ? | 5 % 4 == 0 | False |
Here are steps to determine whether number 9 is prime or not.
Question | Programming Statement | Result |
---|---|---|
Is 9 divisible by 2 ? | 9 % 2 == 0 | False |
Is 9 divisible by 3 ? | 9 % 3 == 0 | True |
In the second step our test 9 % 3 == 0 passed. In other words, 9 is divisible by 3 , that means 9 is not a prime number. At this point, it would be pointless to check divisibility of 9 by the remaining numbers. So we stop.
This is exactly what we are doing in the above program. In line 1, We ask the user to enter a number. In line 3, we have declared a variable is_prime with bool value True . In the end, this variable will determine whether the number entered by the user is prime or not.
The for loop iterates through 2 to num-1 . If num is divisible (line 6) by any number within this range, we set is_prime to False and break out of the for loop immediately. However, if the condition n % i == 0 never satisfies the break statement will not be executed and is_prime will remain set to True . In which case num will be a prime number.
break statement inside a nested loop #
In a nested loop the break statement only terminates the loop in which it appears. For example:
python101/Chapter-11/break_inside_nested_loop.py
for i in range(1, 5): print("Outer loop i = ", i, end="\n\n") for j in range (65, 75): print("\tInner loop chr(j) =", chr(j)) if chr(j) == 'C': print("\tbreaking out of inner for loop . \n") break print('-------------------------------------------------')
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Outer loop i = 1 Inner loop chr(j) = A Inner loop chr(j) = B Inner loop chr(j) = C breaking out of inner for loop . ------------------------------------------------- Outer loop i = 2 Inner loop chr(j) = A Inner loop chr(j) = B Inner loop chr(j) = C breaking out of inner for loop . ------------------------------------------------- Outer loop i = 3 Inner loop chr(j) = A Inner loop chr(j) = B Inner loop chr(j) = C breaking out of inner for loop . ------------------------------------------------- Outer loop i = 4 Inner loop chr(j) = A Inner loop chr(j) = B Inner loop chr(j) = C breaking out of inner for loop . -------------------------------------------------
For every iteration of the outer loop, the inner for loop is executed thrice. As soon as, the condition chr(j) == ‘C’ satisfies the break statement causes an immediate exit from the inner for loop. However, the outer for loop will keep executing as usual.
continue statement #
The continue statement is used to move ahead to the next iteration without executing the remaining statement in the body of the loop. Just like break statement, continue statement is commonly used in conjunction with a condition. The continue statement can be written as follows:
Here is an example to demonstrate the working of the continue statement:
python101/Chapter-11/continue_demo.py
for i in range(1, 10): if i % 2 != 0: continue print("i =", i)
5 простых способов выйти из вложенных циклов в Python
Python — элегантный язык программирования. Но у него есть слабые стороны. Иногда Python не так элегантен, как должен быть.
Например, когда нам нужно выйти из вложенных циклов:
for a in list_a: for b in list_b: if condition(a,b): break
break может помочь выйти только из внутреннего цикла. Можем ли мы напрямую выйти из двух вложенных циклов одновременно? Есть ли в Python какие-то встроенные ключевые слова или приемы для этого?
К сожалению, встроенная поддержка этой операции отсутствует.
В Python нет такой возможности, но она есть в других языках, например, PHP:
В PHP ключевое слово break имеет параметр, который определяет, из скольких вложенных циклов нужно выйти. Значение по умолчанию равно 1, что означает выход из самого внутреннего цикла.
Поскольку Python очень гибкий, у нас есть много других способов получить тот же результат без встроенной поддержки.
В этой статье будут представлены 5 способов выхода из вложенных циклов в Python. А в конце будет упомянуто, как избежать проблемы вложенных циклов, если это возможно.
1. Добавьте флаг
Определим переменную и используем ее в качестве флага. Рассмотрим простой пример:
# add a flag variable break_out_flag = False for i in range(5): for j in range(5): if j == 2 and i == 0: break_out_flag = True break if break_out_flag: break
Как показано выше, переменная break_out_flag — это флаг, сообщающий программе, когда ей следует выйти из внешнего цикла.
Это работает, но код загрязняется, поскольку мы добавляем новую переменную для решения простой задачи.
Давайте рассмотрим другие варианты.
2. Бросить исключение
Если мы не можем использовать ключевое слово break, почему бы не реализовать выход из циклов другим способом? С помощью методов обработки исключений в Python мы можем выйти из вложенных циклов следующим образом:
# raise an exception try: for i in range(5): for j in range(5): if j == 2 and i == 0: raise StopIteration except StopIteration: pass
3. Проверьте то же условие еще раз
Поскольку одно условие приводит к выходну из одного цикла, проверка одного и того же условия в каждом цикле также является допустимым решением. Вот пример:
# check the same condition again for i in range(5): for j in range(5): if j == 2 and i == 0: break if j == 2 and i == 0: break
Приведенный выше способ работает, но это не очень хорошая идея. Это не эффективно и вынуждает нас делать много лишних операций.
4. Используйте синтаксис For-Else
В Python есть специальный синтаксис: «for-else». Он не популярен, а кто-то даже никогда его не использовал. Потому что все привыкли использовать «else» после «if».
Однако, когда дело доходит до разрыва вложенных циклов. Этот нетрадиционный синтаксис может помочь.
# use the for-else syntax for i in range(5): for j in range(5): if j == 2 and i == 0: break else: # only execute when it's no break in the inner loop continue break
Приведенный выше код использует преимущества техники «for-else», поскольку код под оператором else будет выполняться только тогда, когда внутренний цикл завершится без break.
5. Поместите циклы в функцию
Если мы поместим вложенные циклы в функцию, проблема break становится простой. Потому что мы можем использовать ключевое слово return вместо break.
# make it as a function def check_sth(): for i in range(5): for j in range(5): if j == 2 and i == 0: return check_sth() # Run the function when needed
Как показано выше, это решение выглядит более элегантно. Здесь нет переменных флагов, синтаксиса «try-except» или «for-else» и ненужной проверки условий.
Кроме того, «Turn Predicate Loops into Predicate Functions» — это хорошая практика написания кода, введенная командой компилятора LLVM.
Функции в Python очень гибкие. Мы можем легко определять вложенные функции или замыкания. Поэтому, если вложенные циклы будут использоваться только один раз и в пределах функции, мы можем просто определить их внутри этой функции:
def out_func(): # do something def check_sth(): for i in range(5): for j in range(5): if j == 2 and i == 0: return # do something check_sth() # Run the function when needed # do something
Вывод: Избегайте вложенных циклов
Если не существует элегантных решений для выхода из вложенных циклов, почему бы не избегать написания вложенных циклов?
Используя некоторые вспомогательные функции, мы действительно можем избежать вложенных циклов:
# Avoid nested loops import itertools for i, j in itertools.product(range(5), range(5)): if j == 2 and i == 0: break
Как показано выше, наш предыдущий пример может избежать вложенных циклов с помощью функции itertools.product. Это простой способ получить декартово произведение входных итераций.
К сожалению, этот способ не позволяет избежать всех вложенных циклов. Например, если нам нужно обрабатывать бесконечные потоки данных в наших циклах, он не поможет. Но это все равно хорошая идея, чтобы избежать вложенных циклов и улучшить читабельность наших программ.
Спасибо за прочтение! Какой из способов вы считаете самым полезным? Пишите в комментариях!
Еще больше примеров использования Python и Machine Learning в современных сервисах можно посмотреть в моем телеграм канале. Я пишу про разработку, ML, стартапы и релокацию в UK для IT специалистов.
Python break Statement
We can’t use any option, label or condition with the break statement.
Python break Statement Examples
Let’s look at some examples of using break statement in Python.
1. break statement with for loop
Let’s say we have a sequence of integers. We have to process the sequence elements one by one. If we encounter “3” then the processing must stop. We can use for loop for iteration and break statement with if condition to implement this.
t_ints = (1, 2, 3, 4, 5) for i in t_ints: if i == 3: break print(f'Processing ') print("Done")
2. break statement with the while loop
count = 10 while count > 0: print(count) if count == 5: break count -= 1
3. break statement with a nested loop
Here is an example of break statement within the nested loop.
list_of_tuples = [(1, 2), (3, 4), (5, 6)] for t in list_of_tuples: for i in t: if i == 3: break print(f'Processing ')
Why Python doesn’t support labeled break statement?
Many popular programming languages support a labelled break statement. It’s mostly used to break out of the outer loop in case of nested loops. However, Python doesn’t support labeled break statement.
PEP 3136 was raised to add label support to break statement. But, it was rejected because it will add unnecessary complexity to the language. There is a better alternative available for this scenario – move the code to a function and add the return statement.