编程语言
首页 > 编程语言> > 用Python模拟欧冠小组抽签,一不小心把某队抽进死亡之组

用Python模拟欧冠小组抽签,一不小心把某队抽进死亡之组

作者:互联网

众所周知,如今的欧冠已经由32支球队组成的欧足联俱乐部顶级赛事,为了娱乐,鄙人专门写了一个欧冠小组赛分组抽签的小程序以图一乐。
素材来源
2020-2021赛季欧洲冠军联赛32强分档情况
一档:拜仁,塞维利亚,皇马,利物浦,尤文图斯,巴黎圣日耳曼,圣彼得堡泽尼特,波尔图;

二档:巴萨,马竞,曼城,曼联,顿涅茨克矿工,多特蒙德,切尔西,阿贾克斯;

三档:基辅迪纳摩,萨尔茨堡红牛,RB莱比锡,国际米兰,奥林匹亚科斯,拉齐奥,克拉斯诺达尔,亚特兰大;

四档:莫斯科火车头,马赛,布鲁日,门兴,伊斯坦布尔,中日德兰,雷恩,费伦茨瓦伦斯

![(https://www.icode9.com/i/ll/?i=20210712101919819.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L05ZUnlu,size_16,color_FFFFFF,t_70)
根据分档结果我自己写了一个抽签的小程序

首先将32支球队按档次排好
import random
d1=((‘拜仁慕尼黑’,‘德国’),(‘利物浦’,‘英格兰’),(‘塞维利亚’,‘西班牙’),(‘皇家马德里’,‘西班牙’),(‘尤文图斯’,‘意大利’),(‘波尔图’,‘葡萄牙’),(‘巴黎圣日耳曼’,‘法国’),(‘圣彼得堡泽尼特’,‘俄罗斯’))
d2=((‘巴塞罗那’,‘西班牙’),(‘马德里竞技’,‘西班牙’),(‘多特蒙德’,‘德国’),(‘曼联’,‘英格兰’),(‘顿涅兹克矿工’,‘乌克兰’),(‘曼城’,‘英格兰’),(‘阿贾克斯’,‘荷兰’),(‘切尔西’,‘英格兰’))
d3=((‘基辅迪纳摩’,‘乌克兰’),(‘RB莱比锡’,‘德国’),(‘萨尔茨堡红牛’,‘奥地利’),(‘奥林匹亚科斯’,‘希腊’),(‘克拉斯诺达尔’,‘俄罗斯’),(‘拉齐奥’,‘意大利’),(‘国际米兰’,‘意大利’),(‘亚特兰大’,‘意大利’))
d4=((‘莫斯科火车头’,‘俄罗斯’),(‘马赛’,‘法国’),(‘布鲁日’,‘比利时’),(‘门兴’,‘德国’),(‘伊斯坦布尔’,‘土耳其’),(‘中日德兰’,‘丹麦’),(‘雷恩’,‘法国’),(‘费伦茨瓦罗斯’,‘匈牙利’))

然后将每档8支球队的顺序打乱

f1=list(d1)
f2=list(d2)
f3=list(d3)
f4=list(d4)

fenzu=[]
for i in range(8):
fenzu.append([])

random.shuffle(f1)
random.shuffle(f2)
random.shuffle(f3)
random.shuffle(f4)

然后先抽出第一档球队,这里应该没太大难度,就是根据打乱后的顺序分A到H组

#抽第一档球队
for m in range(8):
fenzu[m].append(f1[m])

然后抽二三四档球队时先抽球队,再根据是否符合同国回避原则再重新抽球队,可能这个方法比较次数略少比较有局限性,暂不考虑俄罗斯球队避开乌克兰球队的情况。

#抽第二档球队
for n in range(8):

fircountry=fenzu[n][0][1]
seccountry=f2[0][1]
if fircountry != seccountry:
    fenzu[n].append(f2[0])
    f2.remove(f2[0])
else:
    seccountry=f2[1][1]
    if fircountry != seccountry:
        fenzu[n].append(f2[1])
        f2.remove(f2[1])

#抽第三档球队
for n in range(8):

fircountry=fenzu[n][0][1]
seccountry=fenzu[n][1][1]
thircountry=f3[0][1]
if fircountry != thircountry and seccountry != thircountry:
    fenzu[n].append(f3[0])
    f3.remove(f3[0])
else:
    thircountry=f3[1][1]
    if fircountry != thircountry and seccountry != thircountry:
        fenzu[n].append(f3[1])
        f3.remove(f3[1])
    else:
        fenzu[n].append(f3[2])
        f3.remove(f3[2])

#抽第四档球队
for n in range(8):

fircountry=fenzu[n][0][1]
seccountry=fenzu[n][1][1]
thircountry=fenzu[n][2][1]
fourcountry=f4[0][1]

if fircountry != fourcountry and seccountry != fourcountry and thircountry != fourcountry:
    fenzu[n].append(f4[0])
    f4.remove(f4[0])
else:
    fourcountry=f4[1][1]
    if fircountry != fourcountry and seccountry != fourcountry and thircountry != fourcountry:
        fenzu[n].append(f4[1])
        f4.remove(f4[1])
    else:
        fenzu[n].append(f4[2])
        f4.remove(f4[2])
        
print(fenzu[n])

不管那么多了,先秀一下抽签结果吧
某队竟然被我分进了死亡之组(从上到下依次是A到H组)
在这里插入图片描述
目前的抽签程序有两点不足,期待各位网友能帮我完善,也希望后期我也能出一个更加完善的版本。
在抽取二三四档球队时,先抽球队再定范围,与欧冠抽签先定范围再抽球队不同,故容易造成抽签失败另外俄罗斯和乌克兰球队之间的回避暂未考虑进来,故有时会出现俄乌球队同组的尴尬局面
后附完整版代码
在这里插入图片描述
抽签篇未完待续,期待未来能出欧冠16强,8强抽签以及世界杯抽签的程序版本,希望未来能不咕~

标签:fenzu,f2,f3,f4,之组,某队,抽进,seccountry,球队
来源: https://blog.csdn.net/NYRyn/article/details/113796865