按下按钮时中断 while 循环

Break a while loop when a button is pressed

我目前正在尝试设置此代码,以便在这种情况下 button1 连接到 RPi GPIO 的按钮运行函数 c1 并一直循环该函数直到另一个按钮 button2 被按下,然后它运行函数 c2 在该函数中保持循环。

    #Import RPi GPIO module
    from gpiozero import Button

    #Assign name to buttons GPIO pins
    button1 = Button(2)
    button2 = Button(4)

    def c1():
        while True:
            print('c1')
            grade = float(input('Select grade: '))
            if grade < 10:
            print('Less than 10')
        else:
            print ('invalid input')

   def c2():
       while True:
            print('c2')
            grade = float(input('Select grade: '))
            if grade < 10:
                print('Less than 10')
            else:
                print ('invalid input')

我遇到了破坏函数 c1 的麻烦,我尝试在按下另一个按钮时在 while 中添加一个 break,但没有任何运气,因为代码没有'不要停下来。

    def c1():
        while True:
            print('c1')
            grade = float(input('Select grade: '))
        if grade < 10:
            print('Less than 10')
        elif button2.is_pressed:
            break

我也试过用这个来打破循环,但我什至不确定这是不是一个正确的方法,无论如何它没有用。

    def c1():
        while True:
            print('c1')
            grade = float(input('Select grade: '))
            if grade < 10:
                print('Less than 10')
            elif button2.is_pressed:
                c1() == False
                break

我不确定是否正确,但我觉得必须改变函数让我们假设 c1False 来打破循环。我希望在按下新按钮后告诉代码停止循环,但它没有成功。

我在这里错过了什么?

你的程序调试了吗?你检查过 break 被调用了吗?

它可能会帮助您找到问题。

您还可以打印:button2.is_pressed 以了解发生了什么。

如果这是 确切的 代码,那么您可能会注意到 breakwhile 循环之外。

def c1():
    while True:
        print('c1')
        grade = float(input('Select grade: '))
    if grade < 10:
        print('Less than 10')
    elif button2.is_pressed:
        break

同时,在这段代码中,您需要在while循环之前设置boolean变量,然后将其设置为false。如果您使用此方法,则不需要 break,因为一旦变量设置为 false,该函数将中断 while 循环。

def c1():
    while True:
        print('c1')
        grade = float(input('Select grade: '))
        if grade < 10:
            print('Less than 10')
        elif button2.is_pressed:
            c1() == False
            break

试试这个:

def c1():
    flag = True
    while flag == True:
        print('c1')
        grade = float(input('Select grade: '))
        if grade < 10:
            print('Less than 10')
        elif button2.is_pressed: #try using if here instead of elif
            flag = False

或者这样:

def c1():
    while True:
        print('c1')
        grade = float(input('Select grade: '))
        if grade < 10:
            print('Less than 10')
        elif button2.is_pressed: #try using if here instead of elif
            break

编辑:也许您错过了 elif,如果不起作用,请尝试使用 if

编辑 2:进一步的问题。

def c1():
    while True:
        print('c1')
        if button2.is_pressed:
            break
        grade = float(input('Select grade: '))
        if grade < 10:
            print('Less than 10')