Python 用复杂规则创建记分牌
我需要制作一个记分板,根据以下规则列表创建: 球队在冠军赛第一阶段的位置是由最多的分数决定的。在一场比赛中获胜的球队得3分,平局得1分,失利得0分 如果两个或两个以上团队的成绩相同,则按照以下方式确定他们的位置:Python 用复杂规则创建记分牌,python,django,Python,Django,我需要制作一个记分板,根据以下规则列表创建: 球队在冠军赛第一阶段的位置是由最多的分数决定的。在一场比赛中获胜的球队得3分,平局得1分,失利得0分 如果两个或两个以上团队的成绩相同,则按照以下方式确定他们的位置: 根据相互之间的博弈结果: 点数较多 得分和失球之间的最大差异 在这些比赛中取得更多的进球 在这些比赛中,在外场上射入更多的球 在所有比赛中取得更多的胜利 在所有比赛中得分和失球之间的最大差异 在所有比赛中进球最多 在所有比赛中,在其他领域进球最多 现在我有这样的模型: from d
- 点数较多
- 得分和失球之间的最大差异
- 在这些比赛中取得更多的进球
- 在这些比赛中,在外场上射入更多的球
from django.db import models
class Team(models.Model):
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name
class Game(models.Model):
beginning = models.DateTimeField()
place = models.CharField(max_length=50)
spectators = models.IntegerField()
def __unicode__(self):
return self.beginning.strftime("%A, %d. %B %Y %I:%M%p")
class TeamGame(models.Model):
RESULT_WIN = 'w'
RESULT_DRAW = 'd'
RESULT_LOSE = 'l'
RESULT_CHOICES = (
(RESULT_WIN, 'Win'),
(RESULT_LOSE, 'Lose'),
(RESULT_DRAW, 'Draw'),
)
HOME_FIELD = 'h'
OUT_FIELD = 'o'
FIELD_CHOICES = (
(HOME_FIELD, 'home'),
(OUT_FIELD, 'out')
)
game = models.ForeignKey(Game)
team_name = models.ForeignKey(Team)
goals_hit = models.IntegerField()
goals_get = models.IntegerField()
result = models.CharField(max_length=1, choices=RESULT_CHOICES, blank=True)
field = models.CharField(max_length=1, choices=FIELD_CHOICES, blank=True)
我怎么能创造出这么可怕的东西呢?:)请帮忙 似乎您要做的是使用sort()。python的排序按字典顺序对元组进行排序,即如果第一项相同,它将检查第二项(等等)
此函数将返回按您希望的顺序排序的团队对象列表(根据第一个要点)。我认为您试图同时做三件事;不要
这个问题太模糊了。你还不明白什么?你需要什么帮助?当两个或两个以上的团队得分相等时,如何“捕捉”它们,比较它们并插入到整个表中。你是否试图按照这些规则“排序”TeamGame对象?你将在什么上下文中使用结果?FWIW字段对于字段来说是一个非常糟糕的名称:)也许是回家还是出去?请别忘了标记一个可接受的答案;)请你告诉我,这一行到底是做什么的:team_rank=[team for p,g,b,a,v,team in rank]?排序后,rank是一个元组列表。[p,g,b,a,v,team in rank的团队]是一个列表理解,它按照与原始列表相同的顺序构建一个团队对象列表,丢弃变量p,g,b,a和v。
def rank_teams():
rank = []
# iterate through teams and create a tuple with most important to least important
# sort params. team bust be the last object
for team in Team.objects.all():
points = 0
best_goal_gap = 0
best_goals = 0
best_away_goals = 0
all_victories = 0
for game in TeamGame.objects.filter(team_name=team):
points += {'w':3, 'd':1, 'l':0}[game.result]
best_goal_gap = max(best_goal_gap, game.goals_hit-game.goals_get)
best_goals = max(best_goals, game.goals_get)
if game.field == 'o':
best_away_goals = max(best_away_goals, game.goals_get)
if game.result == 'w':
all_victories +=1
rank.append((points, best_goal_gap, best_goals, best_away_goals, all_victories, team))
#sort the teams
rank.sort()
team_rank = [team for p,g,b,a,v,team in rank]
return team_rank