请注意,我是堆栈溢出的新手,可能会遇到一些技术问题。如果我这样做,请指出它们
我一直在编写一个程序,旨在模拟疾病(流感)如何通过我的a-level NEA的人群传播。其中很多是围绕一个3D阵列构建的,该阵列代表一个城镇的许多部分,其中2个维度的行为类似于网格视图(类似于国际象棋或文明4等),第3个存储有关2D单元的信息(例如第一个值)每2d细胞是人口,第二是区域类型,第3是感染量等。代表人们从一个单元移动到另一个单元的代码的一部分,需要知道最近的2D单元在哪里包含在其第三维内的特定值。在实践中,这基本上会告诉计算机最近的工作/娱乐场所。
例如在一个4乘4乘4阵列的数组中,除了随机1s之外都是0(我在程序中使用整数,因为它们在最终产品中将超过2种),它会去虽然每个2D单元格在第三维中找到第二个值中最接近的1到它当前所在的第二个单元格,但是将它存储在数组中,然后移动到下一个单元格。
到目前为止,这是我的代码:(子程序之前的所有内容在最后都是不同的)
townLayout=[[[],[],[],[],[]],[[],[],[],[],[]],[[],[],[],[],[]],[[],[],[],[],[]],[[],[],[],[],[]]]
import random
b=0
while b<5:
i=0
while i<5:#double loop to create 2 dimentions
townLayout[b][i]=[0,ran.ranint(1,4),0,0,0,15,15,0,15,15,0]
i+=1
b+=1
def nearestWork(townLayout):#anitate
b=0
isThere=True
while b<5 and isThere==True:
i=0
xc=15
yc=15
dxc=15
dx=15
dyc=15
dy=15
while i<5 and isThere=True:
multiple=False
x=0
isThere=False
while x<5:
y=0
while y<5:
if townLayout[b][i][1]==4:
isThere=True
if xc>=b:
dxc=xc-b
else:
dxc=b-xc
if yc>=i:
dyc=yc-b
else:
dyc=b-yc
if x>=b:
dx=x-b
else:
dx=b-x
if y>=b:
dy=y-b
else:
dy=b-y
if (dx+dy)<(dxc+dyc):
xc=x
yc=y
elif (dx+dy)==(dxc+dyc):
Multiple=True
y+=1
x+=1
if isThere==True:
townLayout[b][i][8]=xc
townLayout[b][i][9]=yc
else:
print('no places of work detected')
break
if Multiple==True:
townLayout[b][i][10]=1
i+=1
b+=1
return townLayout
有没有办法让这更有效率?它会起作用吗?