2010-12-06 7 views
0

Ich brauche eine Anzeigetafel durch eine solche Liste von Regeln zu schaffen machen:Erstellen Anzeigers mit komplizierten Regeln

Teams' Plätze in der ersten Phase der Meisterschaft durch die meisten Menge an Punkten bestimmt werden. Für den Sieg in einem Spiel berechnet das Team 3 Punkte, für den Remis - 1 Punkt und für den Verlust - 0 Punkte.

Bei gleichen Ergebnissen von zwei oder mehr Mannschaften werden ihre Plätze in einer solchen Art und Weise bestimmt:

  1. Nach den Ergebnissen von Spiel (e) miteinander:

    • größere Anzahl von Punkten;

    • Der beste Unterschied zwischen geschossenen und zuerkannten Zielen;

    • Größere Anzahl der in diesen Spielen erzielten Tore;

    • Größere Anzahl von Toren auf einem fremden Feld in diesen Spielen erzielt;

  2. Eine größere Anzahl von Siegen in allen Spielen;

  3. Der beste Unterschied zwischen Toren und Gegentoren in allen Spielen;

  4. Die größte Anzahl der in allen Spielen erzielten Tore;

  5. Die größte Anzahl von Toren, die in anderen Feldern in allen Spielen erzielt wurden;

Jetzt habe ich diese Art von Modellen:

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) 

Wie kann ich so eine schreckliche Sache schaffen :) plz, helfen)

+3

Frage ist viel zu vage. Was verstehst du nicht? Wozu brauchst du Hilfe? –

+0

Wie man "fängt", wenn zwei oder mehr Mannschaften die gleiche Punktzahl haben, vergleiche sie und füge sie in die ganze Tabelle ein. –

+0

versuchen Sie, die TeamGame-Objekte nach diesen Regeln zu sortieren?In welchem ​​Kontext werden Sie die Ergebnisse verwenden? – Thomas

Antwort

1

scheint wie das, was Sie tun möchten, ist! Verwende sort(). Art der Python sortiert lexikografisch Tupel, das heißt, wenn das erste Element das gleiche ist es die zweite überprüft (etc ...)

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 

diese Funktion wird eine Liste von Team Objekte zurück in der Reihenfolge sortiert, die Sie wünschen (nach der erste Aufzählungspunkt

+0

Könnten Sie bitte, sagen Sie mir, was genau diese Zeile tut: team_rank = [Team für p, g, b, a, v, Team in Rang] ? –

+0

nach dem Sortieren, Rang ist eine Liste von Tupeln. [team für p, g, b, a, v, Mannschaft im Rang] ist ein Listenverständnis, das eine Liste nur der Teamobjekte in der gleichen Reihenfolge wie die ursprüngliche Liste aufbaut und die Variablen p, g, b, a wegwirft und v. – Thomas

0

ich glaube, Sie versuchen, auf einmal drei Dinge zu tun,.. nicht

  1. Einfügen jeder Mannschaft Informationen in die Tabelle (Modell)
  2. berechnen Punktzahl jeder Mannschaft basierend auf diese Information (mo del)
  3. Anzeigen der Teams in der Reihenfolge basierend auf Punktzahl (anzeigen)
Verwandte Themen