Python设计足球联赛赛程表程序的思路与简单实现示例


Posted in Python onJune 28, 2016

每年意甲德甲英超西甲各大联赛的赛程表都是球迷们的必看之物,想起之前写过的一段生成赛程表的代码,用Python来写这类东西太舒服了。
这个算法叫做蛇环算法。
即,把所有球队排成一个环形(2列),左边对阵右边,第一支队伍不动,其他队伍顺时针循环,这样就肯定不重复了。
为了方便说明,假设有8支球队a到h。像下面那样按环形排好。

Python设计足球联赛赛程表程序的思路与简单实现示例

这样,第1轮的对阵就是,(a,h)(b,g)(c,f)(d,e)。
下一轮的时候,第一支球队a不动,其它球队像齿轮一样顺时针走一格。

Python设计足球联赛赛程表程序的思路与简单实现示例

这样,第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)

Python设计足球联赛赛程表程序的思路与简单实现示例

Python 相关文章推荐
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
浅谈python对象数据的读写权限
Sep 12 Python
通过源码分析Python中的切片赋值
May 08 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
python实现图像识别功能
Jan 29 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 Python
Python使用tkinter模块实现推箱子游戏
Oct 08 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
Django-imagekit的使用详解
Jul 06 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
python Scrapy爬虫框架的使用
Jan 21 Python
详解Python中heapq模块的用法
Jun 28 #Python
Python中operator模块的操作符使用示例总结
Jun 28 #Python
基础的十进制按位运算总结与在Python中的计算示例
Jun 28 #Python
Python中的with语句与上下文管理器学习总结
Jun 28 #Python
深入解析Python中的上下文管理器
Jun 28 #Python
详解Python中contextlib上下文管理模块的用法
Jun 28 #Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 #Python
You might like
PHP 可阅读随机字符串代码
2010/05/26 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
关于this和self的使用说明
2010/08/01 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
浅谈python内置变量-reversed(seq)
2017/06/21 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
Python 内存管理机制全面分析
2021/01/16 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
高级销售员求职信
2013/10/25 职场文书
2014年情人节活动方案
2014/02/16 职场文书
小学班主任评语大全
2014/04/23 职场文书
法制宣传标语集锦
2014/06/25 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
JavaScript实现简单图片切换
2021/04/29 Javascript
使用pandas模块实现数据的标准化操作
2021/05/14 Python
vue实现滑动解锁功能
2022/03/03 Vue.js
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫