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

 更新时间:2016年06月28日 17:59:31   作者:mattkang  
足球联赛的赛制就是一支队伍在一个赛季中主客场分别面对联赛中除了自身以外的球队一次,对此我们可以使用一种循环算法来实现,接下来就一起来看一下Python设计足球联赛赛程表程序的思路与简单实现示例:

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

2016628175142697.png (146×203)

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

2016628175458245.png (113×197)

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

2016628175639423.jpg (171×357)

相关文章

  • Python机器学习库之Scikit-learn基本用法详解

    Python机器学习库之Scikit-learn基本用法详解

    Scikit-learn 是 Python 中最著名的机器学习库之一,它提供了大量实用的机器学习算法以及相关的工具,可以方便我们进行数据挖掘和数据分析,在这篇文章中,我们将介绍 Scikit-learn 的基本使用,包括如何导入数据、预处理数据、选择和训练模型,以及评估模型的性能
    2023-07-07
  • Pytorch实现全连接层的操作

    Pytorch实现全连接层的操作

    这篇文章主要介绍了pytorch实现简单全连接层的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  •  python中的元类metaclass详情

     python中的元类metaclass详情

    这篇文章主要介绍了python中的metaclass详情,在python中的metaclass就是帮助developer实现元编程,更多详细内容需要的小伙伴可以参考一下
    2022-05-05
  • python对gif图压缩的完美解决方案

    python对gif图压缩的完美解决方案

    上图图片的时候由于图片太大,导致上次不成功,因此需要对文件进行统一压缩,这篇文章主要给大家介绍了关于python对gif图压缩的完美解决方案,需要的朋友可以参考下
    2021-11-11
  • Python函数中apply、map、applymap的区别

    Python函数中apply、map、applymap的区别

    这篇文章主要介绍了 Python函数中apply、map、applymap的区别 ,文章围绕 Python函数中apply、map、applymap的相关资料展开详细内容,需要的朋友可以参考一下
    2021-11-11
  • Python中的yeild关键字提高代码执行效率场景实例探究

    Python中的yeild关键字提高代码执行效率场景实例探究

    在Python编程语言中,yeild是一个非常实用的关键字,它不仅可以帮助你编写更加简洁的代码,还可以提高代码的执行效率,本文将详细介绍yeild在Python中的使用方法,并通过示例代码进行演示,让我们一起来探索这个强大的关键字吧
    2024-01-01
  • 详解Python中的多线程

    详解Python中的多线程

    这篇文章主要介绍了Python中的多线程,线程就是进程中一条执行程序的执行路径,一个程序至少有一条执行路径,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Python  Pandas教程之使用 pandas.read_csv() 读取 csv

    Python  Pandas教程之使用 pandas.read_csv() 读取 csv

    这篇文章主要介绍了Python Pandas教程之使用pandas.read_csv()读取csv,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Python绘制堆叠柱状图的实例

    Python绘制堆叠柱状图的实例

    今天小编就为大家分享一篇Python绘制堆叠柱状图的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python利用matplotlib做图中图及次坐标轴的实例

    Python利用matplotlib做图中图及次坐标轴的实例

    今天小编就为大家分享一篇Python利用matplotlib做图中图及次坐标轴的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07

最新评论