Python 2.7机器人项目:如何实现条件变化时仅打印一次?
解决循环重复打印的问题:跟踪状态变化输出
嘿,这个问题我太熟了——循环里重复刷相同内容确实烦人,尤其是机器人项目里,控制台快到看不清有用信息对吧?核心思路就是跟踪上一次的状态,只有当状态发生变化时才执行打印操作,完全避免重复输出。
具体实现步骤
- 初始化状态变量:在循环外部定义一个变量,用来记录上一次输出的状态(初始值设为和所有可能状态都不同的值,比如
None)。 - 每次循环确定当前状态:把不同条件对应的输出内容统一存到一个
current_state变量里。 - 对比状态再打印:只有当当前状态和上一次状态不一致时,才打印并更新状态变量。
修改后的代码示例(适配Python 2.7)
try: # 初始化上一次状态,放在循环外避免每次重置 last_state = None while True: # 先获取摇杆轴数据(把你的some stuff里的操作抽出来) axis_value = joystick.get_axis(1) current_state = None # 按条件匹配当前状态描述 if 0.01 < axis_value <= 0.25: current_state = 'moving backward with 25% speed' # 可以扩展其他条件分支,比如不同速度、前进、停止等 elif axis_value > 0.25: current_state = 'moving backward with full speed' elif -0.25 <= axis_value <= -0.01: current_state = 'moving forward with 25% speed' else: current_state = 'stopped' # 只有状态变化时才打印 if current_state != last_state: print(current_state) last_state = current_state # 更新上一次状态 # 可选:加个小延迟,降低CPU占用,让状态检测更稳定 # import time; time.sleep(0.1) except KeyboardInterrupt: # 处理Ctrl+C中断,做一些退出清理 print("\nExiting robot control...")
关键细节说明
- 状态变量的作用:
last_state就像一个“记忆器”,记住上一次输出的内容,避免重复触发打印。 - 统一状态描述:把所有条件对应的输出都放到
current_state里,不管有多少个分支,对比逻辑只需要写一次,代码更简洁。 - 延迟优化:添加
time.sleep(0.1)可以让循环每秒跑10次左右,既不会错过状态变化,又能减少CPU资源消耗,机器人项目里非常实用。
内容的提问来源于stack exchange,提问作者Jason Tsang
相关产品推荐
相关产品推荐

