Python设计足球联赛赛程表程序的思路与简单实现示例
作者:mattkang 发布时间:2023-05-02 20:58:05
标签:Python,赛程
每年意甲德甲英超西甲各大联赛的赛程表都是球迷们的必看之物,想起之前写过的一段生成赛程表的代码,用Python来写这类东西太舒服了。
这个算法叫做蛇环算法。
即,把所有球队排成一个环形(2列),左边对阵右边,第一支队伍不动,其他队伍顺时针循环,这样就肯定不重复了。
为了方便说明,假设有8支球队a到h。像下面那样按环形排好。
这样,第1轮的对阵就是,(a,h)(b,g)(c,f)(d,e)。
下一轮的时候,第一支球队a不动,其它球队像齿轮一样顺时针走一格。
这样,第2轮的对阵就是,(a,b)(c,h)(d,g)(e,f)。
齿轮继续滑动,直到回到原点,这样每支球队都跟其它所有7支球队对阵了。
千言不如一码。拿英超为例。
from collections import deque
import random
def build_schedule(_teamarr):
scheduleobj = dict.fromkeys(range(1,20))
fixpos = _teamarr[0]
ring = _teamarr[1:]
ring = deque(ring)
#前半赛程,1-19轮(round)
for round in range(1,20):
#第1支球队不动,再加上轮转(rotate)的环
teams = [fixpos] + list(ring)
#切成2列,左边主队,右边客队
home, away = teams[:len(teams)/2],teams[len(teams)/2:]
away = away[::-1]
#随机打乱主客队
scheduleobj[round] = [(x,y) if random.random()>=0.5 else (y,x) for x,y in zip(home,away)]
ring.rotate(1)
#后半赛季对阵跟前半赛季一样,但主客队对调
for round in range(20,39):
scheduleobj[round] = [(y,x) for x,y in scheduleobj[round-19]]
return scheduleobj
if __name__ == '__main__':
teamarr = [u'曼联', u'阿斯顿维拉', u'切尔西', u'西汉姆', u'富勒姆',
u'热刺', u'利物浦', u'南安普顿', u'埃弗顿', u'诺维奇',
u'纽卡斯尔', u'曼城', u'斯托克城', u'桑德兰', u'水晶宫',
u'西布罗姆维奇', u'阿森纳', u'赫尔城', u'卡迪夫城', u'斯旺西']
scheduleobj = build_schedule(teamarr)
print u'---联赛第1轮---'
for h,a in scheduleobj[1]:
print u'{}-{}'.format(h,a)
print u'---联赛第2轮---'
for h,a in scheduleobj[2]:
print u'{}-{}'.format(h,a)
0
投稿
猜你喜欢
- 加载相关库import randomimport seaborn as snsimport matplotlib.pyplot as plt
- 网上下载的 pdf 学习资料有一些会带有水印,非常影响阅读。比如下面的图片就是在 pdf 文件上截取出来的。安装模块PIL:Python I
- 使用微信获取地址信息是和微信支付一道申请的,微信支付申请通过,就可以使用该功能。微信商城中,使用微信支付获取用户的收货地址,可以省略用户输入
- RegExp就是建立正则的对像。如:Set regEx = New RegExp regE
- 网上找了半天 不是dataframe转化成array的就是array转化dataframe,所以这里给汇总一下,相互转换的python代如下
- 有一个查询如下: 代码如下:SELECT c.CustomerId, CompanyName FROM Customers c
- 导言到目前为止,我们探讨的教程是由表现层,业务逻辑层和数据访问层构成的层次体系结构。数据访问层和业务逻辑层分别在教程第一和第二章提到。在Di
- 这篇文章主要介绍了Python中断多重循环的几种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 前序There should be one - and preferably only one - obvious way to do it
- 先给大家展示效果图,感觉不错,请参考实现代码。具体代码如下所示:#!/usr/bin/env python# -*- coding:utf-
- 一种小技巧,可以让python捕获信号量HUP 然后当使用 kill 发起HUP信号量的时候 捕获到进行处理,可以处理为重新读取配置文件并重
- 目录实现思路使用BackgroundSubtractorMOG2进行背景分割使用人像识别填充面部信息使用形态学填充分割出来的前景将人像与目标
- 本文采用OpenCV3和Python3 来实现静态图片的人脸识别,采用的是Haar文件级联。 首先需要将OpenCV3源代码中找到data文
- 在Python操作数据内容时,多数情况下可能遇到下面3种类型的数据处理:hexstring 如:'1C532145697A8B6F&
- 本篇博文主要介绍在Python3中如何构造含参构造函数样例如下:class MyOdlHttp: username = '
- 不是说while就不用,比如前面所列举而得那个猜数字游戏,在业务逻辑上,用while就更容易理解(当然是限于那个游戏的业务需要而言)。另外,
- 现在Ajax是一个相当火的东西,那么Ajax是什么呢?我的理解Ajax就是一个工具,就是一个客户端的技术,不管用何种服务器端技术都可以用Aj
- jupyter notebook 图片显示模糊的解决办法加入这几行代码即可:矢量图设置import matplotlib.pyplot as
- 希尔排序希尔排序是一个叫希尔的数学家提出的一种优化版本的插入排序。首先取一个整数d1=n//2,将元素分为d1个组,每组相邻元素之间的距离为
- 目录前言一、常用命令二、嗅探数据包三、构造数据包四、各个协议用法五、发包,收包六、SYN半开式扫描七、数据包序列化,反序列化八、数据包与字符