如何解决如何让python每x秒执行一次功能?
我正在学习python,并试图制作一种疾病模型(绿色),其中绿色的球反弹,如果红色的球碰到它们,它们就会染上红色。 我正在努力做到,每隔x秒,每个受感染的红球都有可能死亡并变黑,但是我不知道该怎么做。我曾尝试使用pygame的时钟,但无法弄清楚。
这是die函数
def die(particle_list):
for i in particle_list:
if (i.colour == red) and random.choice([1,1,0])==0:
i.colour = black
解决方法
使用time.sleep
方法。在指定的秒数内它将阻止程序执行。
我还想指出,对于这样的概率,最好使用随机数。在您的示例中,粒子有15个死亡的机会为1,因此您可能希望生成一个从0到1的随机数,而我的数字是下面的那个粒子将死亡的0.066666667(1/15)。
此示例将执行您想要的操作:
import random
def die(particle_list,death_rate):
for particle in particle_list:
if random.random() <= death_rate:
particle.color = black
,
如果检查红球以杀死它们的任务是在不影响其余过程的情况下发生的,那么我建议您使用一个单独的线程来检查它并执行操作。
请查看标准库中的threading模块以获取示例。
最简单的示例是:
import threading,time
def checkballs_and_turn_black(balls_data):
while True:
time.sleep(10) # sleep for 10 secs
for ball in balls_data:
if check_probability(ball):
ball.set_black()
t = threading.Thread(target=checkballs_and_turn_black,args=(actual_balls_data,))
t.start()
,
我现在已经解决了这个问题。我还没有弄清楚多线程是如何工作的,但是我将为此研究教程,因为这似乎比我想像的要容易。我是这样做的:
d = 0
def day_counter():
global day_count,timelist
time = int(pg.time.get_ticks()/1000)
if time not in timelist:
timelist.append(time)
d = True
if timelist[-1]%(seconds_in_a_day) == 0 and d:
day_count += 1
d = False
e = True
使得常量e在游戏中的每一天(每(seconds_in_a_day)秒滴答作响)变为True,然后,我使用常量e来调节其他基于时间的函数发生的频率,如下所示:
def die(particle_list):
global sick_count,dead_count,e
for i in particle_list:
if i.colour == red and e:
if r.random() < death_rate:
i.colour = black
sick_count -= 1
dead_count += 1
e = False
代表OP添加的答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。