【17集】计算机模拟动画合集-科普-中英cc字幕-Primer

#p1中的python代码模拟
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 14 13:34:14 2023
@author: wangq
"""
"""
al 模拟生物
"""
"""
食物成对出现,物种随机选择一对食物,如果有其他物种,也选择这个食物。那么他们会平分这一个食物,
"""
import random
import matplotlib.pyplot as plt
import json
from matplotlib.font_manager import FontProperties
plt.rcParams['font.sans-serif'] = ['Simhei'] #显示中文
plt.rcParams['axes.unicode_minus'] = False #显示负号
def find_food(species_num,food):
for key,value in species_num.items():
if value>0:
for i in range(value):
choice = random.randint(0,len(food)-1)
x = food[choice]
if x['食物数量']>0:
x['食物数量']-=1
x[key]+=1
#第二天各自的数量
num = {'鹰':0,'鸽子':0}
for i in range(len(food)):
if food[i]['食物数量'] == 0:#有两个生物吃了
#鹰 和 鸽子
if food[i]['鹰'] == 1 and food[i]['鸽子'] == 1:
a = random.randint(0,1)
# 鸽子 有一半几率存活
num['鸽子'] += a
#鹰 有一半几率繁殖
b = random.randint(0,1)
num['鹰'] += 1+b
#鹰 和 鹰
if food[i]['鹰'] == 2:
pass
#鸽子 和 鸽子
if food[i]['鸽子'] == 2:
num['鸽子'] += 2
elif food[i]['食物数量'] == 1:#一个生物吃了
if food[i]['鹰'] == 1:
num['鹰'] += 2
else:
num['鸽子'] += 2
return num
if __name__=='__main__':
num_1 = []
num_2 = []
species_num = {'鹰':10,'鸽子':20}
for i in range(20):
food = [{'食物数量':2,'鹰':0,'鸽子':0} for i in range(1000)]
species_num = find_food(species_num,food)
num_1.append(species_num['鹰'])
num_2.append(species_num['鸽子'])
num_sum = [i+j for i,j in zip(num_1,num_2)]
plt.plot([[i] for i in range(len(num_1))], num_2)
plt.plot([[i] for i in range(len(num_1))], num_sum)
plt.legend(['鸽子', '总数'])
plt.show()