树莓派使用gpiozero控制LED实现答题反馈时仅首次闪烁后续无响应
核心问题定位
- 全局计数变量
i未做轮次重置:i在程序启动时初始化为0,仅在第一轮答题过程中会从0逐步累加至循环退出阈值,后续所有答题轮次中i始终保持大于循环判断阈值的状态,直接跳过内层LED闪烁的执行逻辑。 - 循环逻辑冗余:代码中两个独立的
if判断没有做分支衔接,虽然场景下两个判断不会同时为真,但存在无意义的重复判断。 - 类型处理疏漏:题目数量使用
float类型接收,存在浮点边界判断的潜在风险;原循环条件while i <=10实际会执行11次闪烁操作,和预期的10次闪烁效果不匹配。
修正后可实现预期效果的代码
from gpiozero import LED from time import sleep import random led_g = LED(4) led_r = LED(17) n = 0 print("How many equations do you want to make?") # 以整数类型接收题目数量,消除浮点判断风险 s = int(input()) while n < s: # 每轮答题开始前重置闪烁计数器 i = 0 a = random.randint(1, 10) b = random.randint(1, 10) q = a + b print("What is", a, "+", b, "?") x = float(input()) # 循环执行10次闪烁,按答题结果选择对应LED while i < 10: if x == q: led_g.on() sleep(0.1) led_g.off() sleep(0.1) else: led_r.on() sleep(0.1) led_r.off() sleep(0.1) i += 1 n += 1
内容的提问来源于stack exchange,提问作者Paul.0416
相关产品推荐
相关产品推荐

