Могу ли я выйти из цикла for с помощью функции?

#python #loops #gpiozero

#питон #петли #gpiozero

Вопрос:

Я создал for цикл, который будет выполнять таблицы умножения одним нажатием кнопки, используя gpiozero, и хочу сделать длительное нажатие для выхода из цикла.

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

Другая идея состоит в том, чтобы сделать что-то вроде — когда false завершает все циклы — и команда в for цикле переключает это условие на false. Это не то, что я описывал в каких-либо руководствах, и я не уверен, какую терминологию я бы искал, чтобы узнать, можно ли это сделать.

Как я могу этого добиться?

 import gpiozero
import time
from signal import pause

button = gpiozero.Button(2, hold_time=0.5) 
#button wired to gpio 2, long press activates after .5 seconds

a = int(input('Choose a number: '))

print('Press the button to do times tables.')
print('Hold the button to tell maths to quit.')

def cont():
    print('quit maths') 
#this is where I initially tried to use a break

for x in range(1, 13):
    button.wait_for_press()
    button.when_held = cont
    button.wait_for_release()
    print('7 x', x, '=', x * a, flush=True)

pause()
 

Ответ №1:

Вы можете raise создать исключение внутри cont и иметь try/except предложение внутри вашего цикла for и выйти из него.