在Python中实现类似Arduino的循环函数

-2 投票
1 回答
1153 浏览
提问于 2025-04-18 17:41

我刚开始学习编程,对Arduino C有一些了解,但我想转到使用Python在树莓派上进行更复杂的编程。我喜欢在Arduino中可以直接使用loop()这个函数,但在Python中找不到类似的东西。我正在编写一个程序,它会不断检查时间,当时间到达某个特定点时,就会启动代码中的另一个功能。可是“while True:”这个循环似乎不太管用。请忽略代码中的格式问题,因为我复制过来时格式乱了。这段代码是我主要程序的一个基本思路。当时间到达时,我需要它打印出一些东西。

    while True:
        import datetime
        if datetime.time is (12, 15, 17, 000000):
           print "TEST"
           break

1 个回答

1

你的while循环看起来没问题。我觉得问题在于你可能不太明白如何获取当前时间,并将其与你感兴趣的时间进行比较。

datetime.time并不是默认当前时间,它实际上是一个包含时间的结构。它可以是任何时间,比如早上1点1秒,或者下午1点13分(现在的时间)等等。

如果你想获取当前时间,你应该使用datetime.datetime.now().time()。这个操作的意思是问datetime类:“嘿,现在是什么日期和时间?”然后它会返回一个包含这些数据的datetime对象。因为你只关心当前时间,所以加上.time()会返回一个只包含当前时间的time对象。这应该替换掉你代码中的datetime.time

至于你实际比较的内容((12, 15, 17, 000000)),你需要告诉Python你在使用一个time对象,应该用datetime.time(12, 15, 17, 000000)来代替。

另外,正如提到的,当你测试两个值是否相等时,应该使用==is这个关键词是用来判断两个变量是否指向同一个对象,而不是判断两个不同的对象是否相等。除非你确定要使用is,否则最好用==

总的来说,我认为这样应该可以工作:

import datetime

while True:
    if datetime.datetime.now().time() == datetime.time(12, 15, 17, 000000):
       print "TEST"
       break

有关datetime库的文档,请查看这里

编辑:因为我没有足够的声望来评论你的问题,这里是如何让你的程序在特定日期工作的方法:

根据文档这里,你可以使用datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond]]]])来构造一个datetime对象,其中每一组括号都是可选的。

所以我们只需要从上面的代码中更改的就是使用datetime对象,而不是time对象,这意味着我们只需去掉.time()部分,使用datetime.datetime()构造函数来代替datetime.time()构造函数。

import datetime

while True:
    my_date = datetime.datetime(year, month, day, hour, minute, second, microsecond)
    if datetime.datetime.now() == my_date:
       print "TEST"
       break

撰写回答