6种组合安排到各个考室,且每个考室只有一个组合的方法不止有一种,因为40人考室能当32人的用,32人考室能当28人的用.
这次把单个组合的计算空位置的语句改写成了函数.
为了能帮助自己n天后再来看懂这个东西:写下一些说明
形参 zuhe 是一个字符串 ( ‘化生’,‘化政’,'化地’等)
tu 是用来统计 本次计算的循环次数
dx1 是也用来存放 [ 空座位,40人考室数,32人考室数,28人考室数]
嵌套表
zhunumsshuoming 是组合和对应考生的字典结构 {‘化生’:人数}
def dxjisuan(zuhe):
tu = 0
dx1 = []
for i in range(20):
for ii in range(6):
for iii in range(3):
temp = 40 * i + 32 * ii + 28 * iii
if (temp - zhnumsshuoming[zuhe]) > 0 and (temp - zhnumsshuoming[zuhe]) < 19:
tu +=1
dx1.append([temp - zhnumsshuoming[zuhe],i, ii, iii])
return tu , dx1
再建立一个列表
zuhes = ['化生','化政','化地','生政','生地','政地']
就可以开始自动化操作:分别计算六种组合安排时的空位数和安排方式了.
for i in range(len(zuhes)):
jisuan_temp , dx_temp =dxjisuan(zuhes[i])
jisuan.append(jisuan_temp)
dxes.append(dx_temp)
重点是 各个dx列表构成的列表们,dxes
dxes是三重嵌套表:dxes[0----5]分别表示6种组合
下面以 dxes[0][i1]为列,
dxes[0][i1] 表示组合0(化生) 单独计算空座位时,符合要求的第i1种办法,它是个数组表示的方法.dxes[0][i1]的[0]是 dx, [1]是40人考室数 [2]与[3]一次类推.
用嵌套表的好处就是不要去研究 命名规则.有空再去研究 x1 ,x2,x3,这一类的变量命名的自动过程.
接下来就是改进的版2的核心功能:找寻是否有 恰当的安排方法 使得在满足每个考室一个组合的情况下,又符合本校考室情况.如下面的字典所示:40人的19间,32人的6间,28人的1间.(和版2有差别)
{40: 19, 32: 6, 28: 1}
resultdf = pd.DataFrame()
totalbanfa = 0
for i1 in range(len(dxes[0])):
for i2 in range(len(dxes[1])):
for i3 in range(len(dxes[2])):
for i4 in range(len(dxes[3])):
for i5 in range(len(dxes[4])):
for i6