fork download
  1. import random
  2. class Player:
  3. def __init__(self, name):
  4. self.name = name
  5. self.points = 0
  6. self.goals_scored = 0
  7. self.goals_conceded = 0
  8. self.results = {}
  9.  
  10. def goal_difference(self):
  11. return self.goals_scored - self.goals_conceded
  12.  
  13. def add_result(self, opponent, my_goals, opponent_goals):
  14. if my_goals > opponent_goals:
  15. self.points += 3
  16. elif my_goals == opponent_goals:
  17. self.points += 1
  18. self.goals_scored += my_goals
  19. self.goals_conceded += opponent_goals
  20. self.results[opponent.name] = (my_goals, opponent_goals)
  21.  
  22. def generate_fixtures(players):
  23. n = len(players)
  24. fixtures = []
  25. for i in range(n):
  26. for j in range(i + 1, n):
  27. fixtures.append((players[i], players[j]))
  28. random.shuffle(fixtures)
  29. return fixtures
  30.  
  31. def display_table(players):
  32. players = sorted(players, key=lambda p: (-p.points, -p.goal_difference(), -p.goals_scored))
  33.  
  34. for i in range(len(players) - 1):
  35. if players[i].points == players[i+1].points:
  36. result = players[i].results[players[i+1].name]
  37. if result[0] < result[1]:
  38. players[i], players[i+1] = players[i+1], players[i]
  39. elif result[0] == result[1] and players[i].goal_difference() < players[i+1].goal_difference():
  40. players[i], players[i+1] = players[i+1], players[i]
  41. elif result[0] == result[1] and players[i].goal_difference() == players[i+1].goal_difference():
  42. if players[i].goals_scored < players[i+1].goals_scored:
  43. players[i], players[i+1] = players[i+1], players[i]
  44.  
  45. print("Rank | Player Name | Points | Goal Difference | Goals Scored")
  46. print("-------------------------------------------------------------")
  47. for rank, player in enumerate(players, start=1):
  48. print(f"{rank}. {player.name} {player.points} {player.goal_difference()} {player.goals_scored}")
  49.  
  50. def main():
  51. num_players = int(input("Enter number of players: "))
  52. players = [Player(input(f"Enter name for player {i+1}: ")) for i in range(num_players)]
  53.  
  54. fixtures = generate_fixtures(players)
  55.  
  56. for home, away in fixtures:
  57. print(f"\nFixture: {home.name} vs {away.name}")
  58. home_goals = int(input(f"Enter goals scored by {home.name}: "))
  59. away_goals = int(input(f"Enter goals scored by {away.name}: "))
  60.  
  61. home.add_result(away, home_goals, away_goals)
  62. away.add_result(home, away_goals, home_goals)
  63.  
  64. display_table(players)
  65.  
  66. if __name__ == "__main__":
  67. main()
Success #stdin #stdout 0.03s 25588KB
stdin
Standard input is empty
stdout
import random
class Player:
    def __init__(self, name):
        self.name = name
        self.points = 0
        self.goals_scored = 0
        self.goals_conceded = 0
        self.results = {}

    def goal_difference(self):
        return self.goals_scored - self.goals_conceded

    def add_result(self, opponent, my_goals, opponent_goals):
        if my_goals > opponent_goals:
            self.points += 3
        elif my_goals == opponent_goals:
            self.points += 1
        self.goals_scored += my_goals
        self.goals_conceded += opponent_goals
        self.results[opponent.name] = (my_goals, opponent_goals)

def generate_fixtures(players):
    n = len(players)
    fixtures = []
    for i in range(n):
        for j in range(i + 1, n):
            fixtures.append((players[i], players[j]))
    random.shuffle(fixtures)
    return fixtures

def display_table(players):
    players = sorted(players, key=lambda p: (-p.points, -p.goal_difference(), -p.goals_scored))

    for i in range(len(players) - 1):
        if players[i].points == players[i+1].points:
            result = players[i].results[players[i+1].name]
            if result[0] < result[1]:
                players[i], players[i+1] = players[i+1], players[i]
            elif result[0] == result[1] and players[i].goal_difference() < players[i+1].goal_difference():
                players[i], players[i+1] = players[i+1], players[i]
            elif result[0] == result[1] and players[i].goal_difference() == players[i+1].goal_difference():
                if players[i].goals_scored < players[i+1].goals_scored:
                    players[i], players[i+1] = players[i+1], players[i]

    print("Rank | Player Name | Points | Goal Difference | Goals Scored")
    print("-------------------------------------------------------------")
    for rank, player in enumerate(players, start=1):
        print(f"{rank}.   {player.name}          {player.points}            {player.goal_difference()}                     {player.goals_scored}")

def main():
    num_players = int(input("Enter number of players: "))
    players = [Player(input(f"Enter name for player {i+1}: ")) for i in range(num_players)]

    fixtures = generate_fixtures(players)

    for home, away in fixtures:
        print(f"\nFixture: {home.name} vs {away.name}")
        home_goals = int(input(f"Enter goals scored by {home.name}: "))
        away_goals = int(input(f"Enter goals scored by {away.name}: "))

        home.add_result(away, home_goals, away_goals)
        away.add_result(home, away_goals, home_goals)

    display_table(players)

if __name__ == "__main__":
    main()