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)


猜你喜欢
- 无法覆盖vant的UI组件的样式有时候UI组件提供的默认的样式不能满足项目的需要,就需要我们对它的样式进行修改,但是发现加了scoped后修
- 某天写代码突然县道这个问题,顺势总结一波JavaScript 函数和变量声明的“提前”(hoist)行为简单的说 如果我们使用 匿名函数va
- 举例如下:<HTML> <HEAD>  
- MYSQL数据库以它短小、方便、速度快、免费等优点成为很多网站目前首选数据库,但一般都是用PHP+MYSQL相结合来开发各种动态页面,其实A
- virtualenvwrapper是用来管理virtualenv的扩展包,用着很方便。1. 安装:#安装virtualenvwrapper$
- 本文实例讲述了PHP实现的线索二叉树及二叉树遍历方法。分享给大家供大家参考,具体如下:<?php require '
- 本文实例讲述了Yii框架引用插件和ckeditor中body与P标签去除的方法。分享给大家供大家参考,具体如下:在Yii中引用插件注:插件和
- 目录1、吃金币2、打乒乓3、滑雪4、并夕夕版飞机大战5、打地鼠6、小恐龙7、消消乐8、俄罗斯方块9、贪吃蛇10、24点小游戏11、平衡木12
- 最近由于公司有一个向谷歌网站上传文件的需求,需要进行web的自动化测试,选择了selenium这个自动化测试框架,以前没有接触过这门技术,所
- BN与Dropout共同使用出现的问题BN和Dropout单独使用都能减少过拟合并加速训练速度,但如果一起使用的话并不会产生1+1>2
- 从业这几年,自己写过的和帮人参谋的所谓“设计规范”不少了,这个东西大概在中国的决策层眼里是这么回事儿 - 一帮农民在一块田里种粮食,起先天气
- 安装模块1、找到对应的模块 http://www.python-excel.org/2、用pip install 安
- 本文实例讲述了python实现根据ip地址反向查找主机名称的方法。分享给大家供大家参考。具体如下:import sys, sockettry
- Vue3-KeepAlive,多个页面使用keepaliveVue3的生命周期未添加keepAlive的生命周期beforeCreate=&
- 本文实例讲述了原生JavaScript实现的简单省市县 * 联动功能。分享给大家供大家参考,具体如下: * 联动是我们写表单时必不可少的,比如在
- defer介绍defer是golang的一个特色功能,被称为“延迟调用函数”。当外部函数返回后执行defer。类似于其他语言的 try… c
- 约定:import pandas as pdimport numpy as npfrom numpy import nan as NaN滤除
- PyCharm就是Python语言开发中一个很受欢迎的IDE,界面类似于visual studio,android studio,集成的功能
- 最近在处理词向量这块,因为平时习惯把处理的词向量保存成文件,但是txt文件读取出来的都是string格式的数字,有必要转成float型上网查
- 一 创建mappingPUT test{ "mappings": { "