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