aszchong 2023-01-26 04:27 采纳率: 66.7%
浏览 71
已结题

python的while循环如何只执行一次打印并且不破坏循环

我用python的while Ture死循环来持续监控收盘价,如果有变动(大于0),我希望只打印一次,并且不退出循环,继续监控,如何只执行一次打印并且不破坏循环(下次遇到变动仍只打印一次)?谢谢!
补充:目前sleep(0.5)会打印两次,如果改成sleep(1)是会打印一次,但频率低了跟不上价格的变动,会导致价格出错。

def spj():  # 收盘价
    if qgm() == '00':  # 时间为00的时候(每分钟一次)
        return jg()   # 返回价格


def close():  # 收盘价
    while True:  # 循环执行
        if spj() != None:   # 如果价格不为空
            break  # 跳出循环
        sleep(0.01)  # 循环频率
    return float(spj())   # 返回收盘价


while True:                # 持续监视
    if close() > 0:         #  如果收盘价变动
        print(close())     #  打印收盘价
    sleep(0.5)            #  监视频率

  • 写回答

2条回答 默认 最新

  • 最优质的软件集 2023-01-26 07:32
    关注

    你可以使用一个变量来记录上一次收盘价,并在每次循环中检查当前收盘价是否与上一次收盘价相同。如果不同,则打印当前收盘价并更新上一次收盘价变量。

    last_close = None
    while True:
        current_close = close()
        if current_close > 0 and current_close != last_close:
            print(current_close)
            last_close = current_close
        sleep(0.5)
    
    

    注意: 上面的代码还有其他问题, 例如如果价格一直是0的话,会导致死循环。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • cjh4312 2023-01-29 14:45
    关注

    最好就是多线程,子线程一直监视股价变动,只要变动,就发信号给主线程,子线程不用睡。还有一个为啥变动就要打印呢,设定范围,变动多少才打印吧。再说交易所3秒才发一次价格,你监视那么频繁也没用。

    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月1日
  • 已采纳回答 2月1日
  • 创建了问题 1月26日

悬赏问题

  • ¥15 关于#java#的问题,请各位专家解答!(相关搜索:java程序)
  • ¥15 linux tsi721的驱动编译后 insmod 提示 报错
  • ¥20 multisim测数据
  • ¥15 求无向连通网的所有不同构的最小生成树
  • ¥15 模拟器的framebuffer问题
  • ¥15 opencv检测轮廓问题
  • ¥15 单点式登录SSO怎么爬虫获取动态SSO_AUTH_ACCESS_Token
  • ¥30 哈夫曼编码译码器打印树形项目
  • ¥20 求完整顺利登陆QQ邮箱的python代码
  • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL