You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何不符合条件时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:00:59