如何让代码在代码的其余部分继续读取其中的一部分?

How to have code continue to read one piece throughout the rest of the code?

提问人:Tel e 提问时间:11/9/2023 更新时间:11/10/2023 访问量:19

问:

好的,我正在尝试弄清楚如何让这段代码继续检查按钮是否在整个代码中被读取,如果它读取按钮已被按下,则按钮会告诉它附加到它的代码。

def main():
    clear()
    display.set_pen(GREEN)
    display.text("Blink of an Eye", 30, 25, 240, 5)
    display.update()
    time.sleep(2)
    clear()
    screen = 1
    while True:
        while True:
            if button_b.is_pressed():
                clear()
                play()
                break
            elif button_a.is_pressed():
                clear()
                howToPlay()
                break
            else:
                display.set_pen(YELLOW)
                display.text('''How To Play:
Press 'A' ''', 15, 35, 240, 4)
                display.update()
                time.sleep(1)
                clear()
                display.set_pen(MAGENTA)
                display.text('''Play:
Press 'B' ''', 15, 35, 240, 4)
                display.update()
                time.sleep(1)
                clear()

现在,按钮仅在代码开头(当 while 语句重新启动时)起作用,这是有道理的,但这不是我需要它做的。我需要它不断检查按钮并同时运行最后一点代码,因此当用户在代码运行时按下按钮时,它将按照按钮所说的执行操作。

微蟒蛇 树莓派皮克托尼

评论


答:

0赞 Peter I. 11/10/2023 #1

您的代码中有一些怪癖。我将从上到下: 生产线

screen = 1

可以省略,因为“screen”在代码的其余部分不使用。也许只是减少代码的剩余部分,但无论如何......

下一个构造

    while True:
        while True:

是一个很酷的:你把一个无限循环放在一个无限循环周围。由于内部循环永远不会终止(至少在程序运行时),因此外部循环将只运行一次,并且永远不会到达其结束。

然后:

            if button_b.is_pressed():
                clear()
                play()
                break

如果你按下按钮 b 会发生什么?触发此“if”语句。显示屏被清除并开始播放。然后 while 循环终止!?啊,现在我明白你为什么使用两个无限循环了。 只需使用“继续”而不是“中断”,您就可以了。 但更重要的是:由于这里没有 time.sleep(),循环会立即重复。我敢打赌,你还不够快,无法在两者之间松开按钮。 因此,您不想知道按钮状态是否为“按下”,因为这种情况会连续发生多个循环。

您最好想知道按钮的状态是否从“未按下”更改为“已按下”:

    button_b_state = False
    # ... 
        while True:
            if button_b.is_pressed() and button_b_state == False:
                button_b_state = True # remember current state
                # ...
            else:
                button_b_state = False # remember current state

按钮 a 也是如此。只有一个问题:为什么对按钮 a 使用“elif”?这意味着您只想知道未按下按钮 b 时的状态。 如果我同时按下两个按钮会怎样?

然后是“其他”部分:这实际上是用户界面。为什么要把它放在“其他”墙后面?因此,只有在没有按下按钮时才会显示。为什么要将两个不同颜色的文本放在显示屏上的同一空间?黄色和洋红色!我预计这种组合很难集中注意力,尤其是在以 2Hz 闪烁时。

HTH型