为何不符合条件时if语句仍多次触发?(Raspberry Pi Pico)
问题原因与解决方案
你的问题出在函数内部没有声明操作全局变量:在start()和stop()里,你创建的是局部的isOperating变量,根本没修改全局作用域里的那个isOperating。所以循环里判断的全局isOperating一直是初始的False,每次获取到isOn=True时,都会满足isOn == True and isOperating == False的条件,导致重复执行分支。
修改后的代码
import urequests import time isOperating = False def start(): global isOperating # 声明要操作全局变量 isOperating = True print('isOperating {0}'.format(isOperating)) print('I am operating') def stop(): global isOperating # 声明要操作全局变量 isOperating = False print('isOperating {0}'.format(isOperating)) print('I am not operating') print('Running...') while True: r = urequests.get("aProperURL") jobject = r.json() isOn = jobject['isOn'] if isOn and not isOperating: # 简化布尔判断写法 start() print("Start: I should print once!") print("isOn {0} and isOperating {1}".format(isOn, isOperating)) elif not isOn and isOperating: stop() print("Stop: I should print once!") print("isOn {0} and isOperating {1}".format(isOn, isOperating)) else: print(f"isOn is {isOn} and isOperating is {isOperating}") # 动态显示当前状态 time.sleep(2)
关键修改点
- 在
start()和stop()函数开头,用global isOperating声明要操作的是全局变量,这样函数内的赋值才会改变全局的isOperating值。 - 简化了布尔判断的写法,让代码更简洁直观。
- 修正了else分支的输出内容,动态显示当前
isOn和isOperating的实际状态,避免固定输出错误信息。
内容的提问来源于stack exchange,提问作者djo
相关产品推荐
相关产品推荐

