利用Python+excel分析2020~2021欧冠十六强淘汰赛对阵情况

使用工具

Excel、PyCharm(Python3.6)

目的

计算十六强队伍各自对阵其余球队的概率

步骤

一、Python分析各队可能的对阵情况

利用python分析出各个队伍可能遇到的对手,逻辑很简单,就不赘述啦。

list1=['拜仁','皇马','曼城','利物浦','切尔西','多特','尤文','巴黎']
list2=['马竞','门兴','波尔图','亚特兰大','塞维利亚','拉齐奥','巴塞罗那','莱比锡']
pairs=[]

# 双方是否能够在淘汰塞第一轮相遇
def isOK(str1,str2):
    if str1=='拜仁':
        if str2=='门兴':# 同联赛
            return False;
        elif str2=='马竞':# 同小组
            return False;
        elif str2=='莱比锡':# 同联赛
            return False;
        else: return True;
    elif str1=='皇马':
        if str2=='门兴':# 同小组
            return False;
        elif str2=='马竞':# 同联赛
            return False;
        elif str2=='塞维利亚':# 同联赛
            return False;
        elif str2=='巴塞罗那':# 同联赛
            return False;
        else: return True;
    elif str1=='曼城':
        if str2=='波尔图':# 同小组
            return False;
        else: return True;
    elif str1=='利物浦':
        if str2=='亚特兰大':# 同小组
            return False;
        else: return True;
    elif str1=='切尔西':
        if str2=='塞维利亚':# 同小组
            return False;
        else: return True;
    elif str1=='多特':
        if str2=='拉齐奥':# 同小组
            return False;
        elif str2=='门兴':# 同联赛
            return False;
        elif str2=='莱比锡':# 同联赛
            return False;
        else: return True;
    elif str1=='尤文':
        if str2=='亚特兰大':# 同联赛
            return False;
        elif str2=='拉齐奥':# 同联赛
            return False;
        elif str2=='巴塞罗那':# 同小组
            return False;
        else: return True;
    elif str1=='巴黎':
        if str2=='莱比锡':# 同小组
            return False;
        else: return True;

for i in range(len(list1)):
    pair=[] # 同一个第一名对阵情况放在一起
    for j in range(len(list2)):
        if isOK(list1[i],list2[j]):
            pair.append(list1[i]+'&'+list2[j])
    pairs.append(pair)

这样就可以很轻松得到各队可能的对阵情况
可能对阵情况

二、Python排列出所有可能的对阵情况

再根据可能的对阵情况,算法逻辑为从各组第一名的list中选一种对阵出来,然后判断这8个对阵中是否有重复队伍,无重复队伍则匹配成功,代码如下:

num=1 # 成功配对数
for a in range(len(pairs[0])):
    for b in range(len(pairs[1])):
        for c in range(len(pairs[2])):
            for d in range(len(pairs[3])):
                for e in range(len(pairs[4])):
                    for f in range(len(pairs[5])):
                        for g in range(len(pairs[6])):
                            for h in range(len(pairs[7])):
                                clubs = []
                                # a
                                club=pairs[0][a].split('&')
                                for i in range(len(club)):
                                    clubs.append(club[i])
                                # b
                                club = pairs[1][b].split('&')
                                for i in range(len(club)):
                                    clubs.append(club[i])
                                # c
                                club = pairs[2][c].split('&')
                                for i in range(len(club)):
                                    clubs.append(club[i])
                                # d
                                club = pairs[3][d].split('&')
                                for i in range(len(club)):
                                    clubs.append(club[i])
                                # e
                                club = pairs[4][e].split('&')
                                for i in range(len(club)):
                                    clubs.append(club[i])
                                # f
                                club = pairs[5][f].split('&')
                                for i in range(len(club)):
                                    clubs.append(club[i])
                                # g
                                club = pairs[6][g].split('&')
                                for i in range(len(club)):
                                    clubs.append(club[i])
                                # h
                                club = pairs[7][h].split('&')
                                for i in range(len(club)):
                                    clubs.append(club[i])
                                clubs=set(clubs)
                                if len(clubs)==16:
                                    print('第'+str(num)+'种分组方案:'+pairs[0][a]+','+pairs[1][b]+','+pairs[2][c]+','+
                                          pairs[3][d]+','+pairs[4][e]+','+pairs[5][f]+','+pairs[6][g]+','+pairs[7][h])
                                    num=num+1;

至此就可以得出所有可能的对阵情况,共3305种
在这里插入图片描述

三、Excel计算各队对阵情况概率

先把输出的3000+种情况复制到excel中,通过分隔功能存储好
在这里插入图片描述
然后用矩阵形式准备计算俩俩之间的概率,公式如下:=COUNTIF(Sheet1!$B 2 : 2: 2:I$3306,CONCATENATE(Sheet4!EKaTeX parse error: Expected 'EOF', got '&' at position 5: 16,"&̲",Sheet4!D17))/3305
在这里插入图片描述
为了方便观看,增加一个条件判断,让其颜色不一致
在这里插入图片描述
在这里插入图片描述
此时,就可以看出对阵情况的概率分布了。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值