关键词: python入门实践 少年编程教育 turtle 类与对象 新冠肺炎模拟 面向对象:为人的类 属性: 类属性 类属性 实例属性 实例属性 此时人们开始关注新冠疫情,部分人开始佩戴口罩。 方法 turtle标题可以显示当前天数和感染人数 引入天数的概念 面向对象:引入潜伏期和患病天数的概念,引入死亡的概念 属性: 类属性 类属性 实例属性 实例属性 实例属性 此时人们开始关注新冠疫情,部分人开始佩戴口罩。 方法 turtle标题可以显示当前天数、感染人数、死亡人数、总人数 运行截图: 思路启发: 注意问题: 面向对象:引入隔离状态和免疫 属性: 类属性 类属性 类属性 类属性 实例属性 认为 实例属性 实例属性 实例属性 此时人们开始关注新冠疫情,部分人开始佩戴口罩。 方法 分配隔离区域为左上区域 如有帮助,欢迎/转载~
【python】利用turtle库可视化模拟新冠疫情
基础版:模拟新冠疫情爆发早期,新冠病毒刚开始出现
status
,分为健康
和患病
__init__
:定义对象的属性move
:人的随机运动infect
:健康人与患者距离小于50,则有50%的概率感染类的相关代码
# 相关类库的导入 import math import random import turtle import time import datetime # 有关参数的定义 TOTAL_W = 500 #模拟场地总宽度 TOTAL_H = 400 #模拟场地总高度 DANGER_DIS = 50 #传染距离 RATE = 0.5 #传染率 class person(object): def __init__(self,status): self.turt = turtle.Turtle() self.turt.shape('circle') # 健康状态,1 为确诊 0 为健康 self.status = status if self.status == 1: self.turt.color("red") else: self.turt.color("green") #随机定义该点的位置 self.x = random.randint(-TOTAL_W*0.9,TOTAL_W*0.9) self.y = random.randint(-TOTAL_H*0.9,TOTAL_H*0.9) self.turt.penup() self.turt.goto(self.x,self.y) def move(self): dx = random.randint(-2, 2) dy = random.randint(-2, 2) if - TOTAL_W*0.9 < self.x + dx < TOTAL_W*0.9: self.x+=dx else: self.x-=dx if - TOTAL_W*0.9 < self.y + dy < TOTAL_W*0.9: self.y+=dx else: self.y-=dy #如果他们超出了边界就会往回走 self.turt.penup() self.turt.goto(self.x, self.y) def infect(self,rate): x = random.randrange(0,100) # 根据传入的感染率的参数 if x/100 < rate: self.status = 1 #此人被感染 self.turt.color('red') def reset(self): self.turt.penup() self.turt.setpos(self.pos)
运行截图
进阶版:模拟新冠疫情爆发初期,民众防疫意识加强,开始佩戴口罩
person
添加新的方法和属性
total_num
:实验总人数infected_num
:感染人数status
,表示该对象的健康状态,分为健康
和患病
mask
,表示该个体是否佩戴口罩,分为佩戴口罩
和不佩戴口罩
佩戴口罩可以有效降低感染率(以下数据为主观猜测,未经验证和校对)
具体情况如下:
患者是否佩戴口罩
健康人是否佩戴口罩
健康人的感染率
佩戴
佩戴
1 %
佩戴
不佩戴
15 %
不佩戴
佩戴
30 %
不佩戴
不佩戴
80 %
__init__
:定义对象的属性move
:人的随机运动infect
:健康人与患者距离小于50,则有根据他们是否佩戴口罩,有不同的概率感染类的相关代码
# 相关类库的导入 import math import random import turtle import time import datetime # 有关参数的定义 TOTAL_W = 500 #模拟场地总宽度 TOTAL_H = 400 #模拟场地总高度 DANGER_DIS = 50 #传染距离 class person(object): #类属性 infected_num = 0 total_num = 0 def __init__(self,status,mask): person.total_num += 1 self.turt = turtle.Turtle() # 是否带口罩,1圆形 为戴口罩/0方形 为不戴口罩, self.mask = mask if self.mask == 1: self.turt.shape('circle') elif self.mask == 0: self.turt.shape('square') # 健康状态,1 为确诊/0 为健康 self.status = status if self.status == 1: self.turt.color("red") self.infected_day = 0 person.infected_num += 1 else: self.turt.color("green") #随机定义该点的位置 self.x = random.randint(-TOTAL_W*0.9,TOTAL_W*0.9) self.y = random.randint(-TOTAL_H*0.9,TOTAL_H*0.9) self.turt.penup() self.turt.goto(self.x,self.y) def move(self): dx = random.randint(-2, 2) dy = random.randint(-2, 2) if - TOTAL_W*0.9 < self.x + dx < TOTAL_W*0.9: self.x+=dx else: self.x-=dx if - TOTAL_W*0.9 < self.y + dy < TOTAL_W*0.9: self.y+=dx else: self.y-=dy #如果他们超出了边界就会往回走 self.turt.penup() self.turt.goto(self.x, self.y) def infect(self,rate): x = random.randrange(0,100) if x/100 < rate: self.status = 1 #此人被感染 self.infected_day = 0 #有了感染天数,且变为0 self.turt.color('red') person.infected_num+=1 #感染人数+1 def day(self): if self.status == 1: self.infected_day += 1
运行截图
高阶版:模拟新冠疫情爆发中期,人们逐渐了解肺炎的相关性质(潜伏、死亡等)
total_num
:实验总人数infected_num
:感染人数status
,表示该对象的健康状态,分为健康
、潜伏
、确诊
infected_day
,表示患病天数,当患病天数大于4天后有一定概率由潜伏转变为确诊,大于7天有一定概率死亡mask
,表示该个体是否佩戴口罩,分为佩戴口罩
和不佩戴口罩
佩戴口罩可以有效降低感染率(以下数据为主观猜测,未经查证)
具体情况如下:
患者是否佩戴口罩
健康人是否佩戴口罩
健康人的感染率
佩戴
佩戴
1 %
佩戴
不佩戴
15 %
不佩戴
佩戴
30 %
不佩戴
不佩戴
80 %
__init__
:定义对象的属性move
:人的随机运动,但是健康患者不会到隔离区,确诊患者只会在隔离区infect
:健康人与患者距离小于50,则有根据他们是否佩戴口罩,有不同的概率感染day
:如果这个人已患病,则调用这个函数其患病天数+1,当患病天数大于最短潜伏期后,一定概率转为确诊,大于最短死亡期后,一定概率死亡类的相关代码
# 相关类库的导入 import math import random import turtle import time import datetime class person(object): #类属性 infected_num = 0 total_num = 0 dead_num = 0 def __init__(self,status,mask): person.total_num += 1 self.turt = turtle.Turtle() # 是否带口罩,1为戴口罩 圆形/0为不戴口罩 方形 self.mask = mask if self.mask == 1: self.turt.shape('circle') elif self.mask == 0: self.turt.shape('square') # 健康状态,2 为确诊 红色/1 为潜伏 黄色/0 为健康 绿色 self.status = status if self.status == 2: self.infected_day = 0 person.infected_num += 1 self.turt.color("red") elif self.status == 1: self.infected_day = 0 person.infected_num += 1 self.turt.color("yellow") else: self.turt.color("green") #随机定义该点的位置 self.x = random.randint(-TOTAL_W*0.9,TOTAL_W*0.9) self.y = random.randint(-TOTAL_H*0.9,TOTAL_H*0.9) self.turt.penup() self.turt.goto(self.x,self.y) def move(self): dx = random.randint(-2, 2) dy = random.randint(-2, 2) if - TOTAL_W*0.9 < self.x + dx < TOTAL_W*0.9: self.x+=dx else: self.x-=dx if - TOTAL_W*0.9 < self.y + dy < TOTAL_W*0.9: self.y+=dx else: self.y-=dy #如果他们超出了边界就会往回走 self.turt.penup() self.turt.goto(self.x, self.y) def infect(self,rate): x = random.randrange(0,100) if x/100 < rate: self.status = 1 #此人的状态进入潜伏期 self.infected_day = 0 #有了感染天数,且变为0 self.turt.color('yellow') person.infected_num+=1 def day(self): if self.status > 0: if self.infected_day >= 7: x = random.randrange(0,100) if x/100 < DEATH_Rate: #死亡率为5% #确定死亡时返回某个值 return -1 if self.status == 1: self.infected_day += 1 if self.infected_day >= 4: x = random.randrange(0,100) if x/100 < Diagnose_Rate: self.status = 2 self.turt.color('red') return 0 def dead(self): # 死亡以后颜色变为灰色 self.turt.color('gray') person.total_num -= 1 person.dead_num += 1 if self.status>0: person.infected_num -= 1 def __del__(self): person.total_num -= 1 if self.status>0: person.infected_num -= 1
【已经失败】最终版:模拟新冠疫情爆发后期,政府开始组织治疗、隔离
total_num
:实验总人数infected_num
:感染人数dead_num
:死亡人数isolated_num
:隔离人数status
,表示该对象的健康状态,分为健康
、潜伏
、确诊
、免疫
康复
的人具备对新冠肺炎的抵抗力(仅为主观猜测,未查找相关资料求证)infected_day
,表示患病天数,当患病天数大于4天后有一定概率由潜伏转变为确诊,大于7天有一定概率死亡isolated
,表示该对象是否被隔离,一旦确诊立刻送往隔离mask
,表示该个体是否佩戴口罩,分为佩戴口罩
和不佩戴口罩
佩戴口罩可以有效降低感染率(以下数据为主观猜测,未经验证和校对)
具体情况如下:
患者是否佩戴口罩
健康人是否佩戴口罩
健康人的感染率
佩戴
佩戴
1 %
佩戴
不佩戴
15 %
不佩戴
佩戴
30 %
不佩戴
不佩戴
80 %
__init__
:定义对象的属性,但是起始状态健康的人不会出现在隔离区move
:人的随机运动,但是健康患者不会到隔离区,确诊患者只会在隔离区内infect
:健康人与患者距离小于50,则有根据他们是否佩戴口罩,有不同的概率感染day
:如果这个人已患病,则调用这个函数其患病天数+1,当患病天数大于最短潜伏期后,一定概率(诊断率)转为确诊,大于最短死亡期后,一定概率(死亡率)死亡isolated
:如果此人确诊,则立即送往隔离区域heal
:对隔离区患者进行治疗,如果治疗成功则变为免疫
状态编程失败,隔离功能没法写,CPU效率不够,会直接卡死
(听说给文章的人代码bug特别少👀)
联系邮箱:mrjingcheng@foxmail.com
有问题欢迎通过邮箱交流。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算