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的Django框架中为代码添加注释的方法
Jul 16 Python
Python找出list中最常出现元素的方法
Jun 14 Python
微信 用脚本查看是否被微信好友删除
Oct 28 Python
浅谈scrapy 的基本命令介绍
Jun 13 Python
python编程培训 python培训靠谱吗
Jan 17 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
python中类的属性和方法介绍
Nov 27 Python
django admin组件使用方法详解
Jul 19 Python
详解如何减少python内存的消耗
Aug 09 Python
python机器学习库xgboost的使用
Jan 20 Python
pandas中DataFrame检测重复值的实现
May 26 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 discuz 主题表和回帖表的设计
2009/03/13 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
大学生水果店创业计划书
2014/01/28 职场文书
高三体育教学反思
2014/01/29 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
门面房租房协议书
2014/12/01 职场文书
大学四年个人总结
2015/03/03 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
Python的property属性详细讲解
2022/04/11 Python
python playwrigh框架入门安装使用
2022/07/23 Python