2010-12-06 5 views
0

мне нужно сделать табло, создавая таким список правил:Создание табло со сложными правилами

команд места на первом этапе Чемпионата определяется наибольшим количеством очков. За победу в матче команда начисляет 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) 

Как я могу создать такие ужасные вещи :) плз, помогите)

+3

Вопрос слишком расплывчатый. Что ты не понимаешь? Как я могу вам помочь? – 2010-12-06 10:19:20

+0

Как «поймать», когда две или более команды имеют равный балл, сравнивают их и вставляют во всю таблицу. – 2010-12-06 11:00:14

ответ

1

кажется, что вы хотите сделать, это! используйте 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 

Эта функция возвращает список объектов команды, отсортированных в порядке, вы желаете (в соответствии с первый буллит

0

Я думаю, что вы пытаетесь сделать три вещи сразу,.. не

  1. Вставка информации каждой команды в таблицу (модель)
  2. Вычислить оценка каждой команды на основе эта информация (mo del)
  3. Показать команды в соответствии с итоговым числом (просмотр)