听说本赛季欧冠八分之一抽签抽了两次?
那我本人也尝试写一个欧冠16强抽签的Python程序,看一看抽两次会抽出什么样的结果,代码如下
import random
d1=(('曼城','英格兰','A'),('利物浦','英格兰','B'),('阿贾克斯','荷兰','C'),('皇家马德里','西班牙','D'),('拜仁慕尼黑','德国','E'),('曼联','英格兰','F'),('里尔','法国','G'),('尤文图斯','意大利','H'))
d2=(('巴黎圣日耳曼','法国','A'),('马德里竞技','西班牙','B'),('葡萄牙体育','葡萄牙','C'),('国际米兰','意大利','D'),('本菲卡','葡萄牙','E'),('比利亚雷亚尔','西班牙','F'),('萨尔茨堡红牛','奥地利','G'),('切尔西','英格兰','H'))
seed=list(d1)
others=list(d2)
random.shuffle(seed)
random.shuffle(others)
print(seed)
print(others)
avail=[]
duizhen=[]
for i in range(8):
duizhen.append([])
for j in range(8):
duizhen[j].append(others[j])
print(duizhen[j])
for m in range(8):
seedzu=seed[m][2]
seedguo=seed[m][1]
avail=[]
for n in range(8):
if len(duizhen[n])<2:
otherszu=duizhen[n][0][2]
othersguo=duizhen[n][0][1]
if seedzu== otherszu:
continue
else:
if seedguo==othersguo:
continue
elif (seedguo=='俄罗斯' and othersguo=='乌克兰') or (seedguo=='乌克兰' and othersguo=='俄罗斯'):
continue
else:
avail.append(n)
else:
continue
random.shuffle(avail)
duizhen[avail[0]].append(seed[m])
for n in range(8):
print(duizhen[n])
抽签思路,先抽取每一场小组第二,再根据抽取球队抽取符合条件的小组第一。
让我们看一看模拟着抽两次是什么样的结果吧
#第一次抽签结果
[('巴黎圣日耳曼', '法国', 'A'), ('阿贾克斯', '荷兰', 'C')]
[('国际米兰', '意大利', 'D'), ('曼联', '英格兰', 'F')]
[('本菲卡', '葡萄牙', 'E'), ('曼城', '英格兰', 'A')]
[('马德里竞技', '西班牙', 'B'), ('尤文图斯', '意大利', 'H')]
[('切尔西', '英格兰', 'H'), ('里尔', '法国', 'G')]
[('萨尔茨堡红牛', '奥地利', 'G'), ('拜仁慕尼黑', '德国', 'E')]
[('比利亚雷亚尔', '西班牙', 'F'), ('利物浦', '英格兰', 'B')]
[('葡萄牙体育', '葡萄牙', 'C'), ('皇家马德里', '西班牙', 'D')]
#第二次抽签结果
[('本菲卡', '葡萄牙', 'E'), ('阿贾克斯', '荷兰', 'C')]
[('国际米兰', '意大利', 'D'), ('曼城', '英格兰', 'A')]
[('葡萄牙体育', '葡萄牙', 'C'), ('里尔', '法国', 'G')]
[('萨尔茨堡红牛', '奥地利', 'G'), ('尤文图斯', '意大利', 'H')]
[('比利亚雷亚尔', '西班牙', 'F'), ('利物浦', '英格兰', 'B')]
[('切尔西', '英格兰', 'H'), ('皇家马德里', '西班牙', 'D')]
[('巴黎圣日耳曼', '法国', 'A'), ('曼联', '英格兰', 'F')]
[('马德里竞技', '西班牙', 'B'), ('拜仁慕尼黑', '德国', 'E')]
咦,第二次惊现曼联对阵大巴黎。
如果程序在抽签过程中报错,再运行一次就好。
这个程序并不能保证百分之百输出全部结果,希望未来能有友友优化成为普适的抽签程序。