用复杂规则创建记分牌

2024-06-26 05:19:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要做一个记分牌,按以下规则创建:

各队在冠军赛第一阶段的名次是由最多的分数决定的。一场比赛获胜该队得3分,平局得1分,失利得0分。在

两个或两个以上小组成绩相等的,按下列方式确定其名额:

  1. 根据相互博弈的结果:

    • 更多点数;

    • 得分和失球之间的最大差异;

    • 在这些比赛中进球数更多;

    • 在这些比赛中,在外场射入更多的球;

  2. 在所有游戏中获得更多的胜利;

  3. 所有比赛中进球和失球的最大区别;

  4. 所有比赛中进球最多的;

  5. 在所有比赛中,在其他领域进球最多的;

现在我有这样的模型:

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)

我怎么能制造出这么可怕的东西?:)Plz,救命!)在


Tags: nameselffieldmodelmodelsresultlengthmax
2条回答

我想你想同时做三件事,别这样

  1. 将每个团队的信息插入表(模型)
  2. 根据该信息计算每个团队的得分(模型)
  3. 根据分数按顺序显示团队(查看)

似乎您要做的是使用sort()。python的sort按字典顺序对元组进行排序,也就是说,如果第一项是相同的,它将检查第二项(等等…)

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

此函数将返回一个按您希望的顺序(根据第一个要点)排序的团队对象列表。在

相关问题 更多 >