Python 用复杂规则创建记分牌

Python 用复杂规则创建记分牌,python,django,Python,Django,我需要制作一个记分板,根据以下规则列表创建: 球队在冠军赛第一阶段的位置是由最多的分数决定的。在一场比赛中获胜的球队得3分,平局得1分,失利得0分 如果两个或两个以上团队的成绩相同,则按照以下方式确定他们的位置: 根据相互之间的博弈结果: 点数较多 得分和失球之间的最大差异 在这些比赛中取得更多的进球 在这些比赛中,在外场上射入更多的球 在所有比赛中取得更多的胜利 在所有比赛中得分和失球之间的最大差异 在所有比赛中进球最多 在所有比赛中,在其他领域进球最多 现在我有这样的模型: from d

我需要制作一个记分板,根据以下规则列表创建:

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

如果两个或两个以上团队的成绩相同,则按照以下方式确定他们的位置:

  • 根据相互之间的博弈结果:

    • 点数较多

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

    • 在这些比赛中取得更多的进球

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

  • 在所有比赛中取得更多的胜利

  • 在所有比赛中得分和失球之间的最大差异

  • 在所有比赛中进球最多

  • 在所有比赛中,在其他领域进球最多

  • 现在我有这样的模型:

    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