在python中检查条件后的循环通知语句

在python中检查条件后的循环通知语句,python,Python,我正在做一个小的概念证明,并使用python来说明这个想法。其思想是程序将在循环中运行并检查输入。现在,如果输入低于阈值,则会发送通知。但我试图将通知限制在4秒的间隔内。这就是我失去逻辑或语法的地方。不管怎样,它都在做一些意想不到的事情 1:继续输入0,它将显示低于阈值的消息,直到达到4秒标记,然后它仅在一行中打印消息4次。我想让他们每4秒就出现一次。想法是(A)输入可能在4秒内发生变化,通知切换。(B) 如果weightIn上次通知时间+4): 最后通知时间=时间 发送通知() #实际处理

我正在做一个小的概念证明,并使用python来说明这个想法。其思想是程序将在循环中运行并检查输入。现在,如果输入低于阈值,则会发送通知。但我试图将通知限制在4秒的间隔内。这就是我失去逻辑或语法的地方。不管怎样,它都在做一些意想不到的事情

1:继续输入0,它将显示低于阈值的消息,直到达到4秒标记,然后它仅在一行中打印消息4次。我想让他们每4秒就出现一次。想法是(A)输入可能在4秒内发生变化,通知切换。(B) 如果weightIn<0.5,我希望该通知作为提醒播放,每次脚本达到该条件时重复4秒。如果为真,则通知将在第一次发送后4秒发出

对不起,如果我试图解释它。我对python还很陌生

import threading
def main():
        while True:
                weightIn = float(input("Get value: "))
                threshold = .5

                def operation():
                        if weightIn < 0.5:
                                #send notification at an interval of 4 sec
                                threading.Timer(4.0, operation).start()
                                print("Below weight threshhold...send notification")
                        else:
                                print("You are good")

                if threshold is not None:
                    operation()

main()
导入线程
def main():
尽管如此:
weightIn=float(输入(“获取值:”)
阈值=.5
def操作():
如果权重小于0.5:
#以4秒的间隔发送通知
threading.Timer(4.0,操作).start()
打印(“低于重量阈值…发送通知”)
其他:
打印(“你很好”)
如果阈值不是无:
操作()
main()

首先避免在循环中声明函数。然后问问自己,对象是否不合适,因为它正确地包含了状态属性

但对于算法部分,它很简单(如果我正确理解了问题…)。存储上次通知的时间戳,如果超过4秒,则发送新通知。在伪代码中:

last_notification_time = 0
threshold = 0.5
loop:
    weighIn = get_new_value()
    if weightIn < threshold:
        time = get_time_in_seconds()
        if (time > last_notification_time + 4):
            last_notification_time = time
            send_notification()
    # actual processing
last\u notification\u time=0
阈值=0.5
循环:
加权=获取新值()
如果权重小于阈值:
时间=以秒为单位获取时间()
如果(时间>上次通知时间+4):
最后通知时间=时间
发送通知()
#实际处理
在Python中,它可能看起来像:

#import time

def main():
    last_notification_time = 0
    threshold = 0.5
    while True:
        weighIn = float(input("Get value: "))
        if weightIn < threshold:
            cur_time = time.time()
            if (cur_time > last_notification_time + 4):
                last_notification_time = time
                print("Below weight threshhold...send notification")
        # actual processing

main()
#导入时间
def main():
上次通知时间=0
阈值=0.5
尽管如此:
加权=浮动(输入(“获取值:”)
如果权重小于阈值:
cur_time=time.time()
如果(当前时间>上次通知时间+4):
最后通知时间=时间
打印(“低于重量阈值…发送通知”)
#实际处理
main()

目前,我建议使用轮询和timeit,这是一个应该导入的模块。时间就是模块,也就是说。轮询是一个概念。@Serge——同意不在循环中声明函数……真让人尴尬,我确实这么做了。我明白你关于阅读时间戳的观点…这完全有效!!再次感谢你的指导。