Домашнее задание

Практическая задача на структуры данных: нужно провести симуляцию плей-офф чемпионата. На входе есть список команд. Его вы задаете сами любым удобным способом. Далее вы случайным образом (модуль random) разбиваете команды по парам и формируете сетку плей-офф - думаю все знают, как проводятся такие турниры (1/8-я, 1/4-я, полуфиналы и финал). Далее проводите матчи - счет определяется случайным образом. По окончании турнира нужно иметь возможность запросить и посмотреть как выступила в турнире та или иная команда - с кем на какой стадии играла, счет матча.


In [15]:
import random

countries = ["switzerland", "poland", "croatia", "portugal", "wales", "northern_ireland", "hungary", "belgium", "germany", "slovakia", "italy", "spain", "france", "ireland", "england", "iceland"]
round_name = []
game_result = {"tournament_round": "", "home": "", "rival": "", "result": [0,0], "win": False}
tournament_result = {}

round_count = 1
while round_count < len(countries):
    round_name.append(round_count)
    round_count = round_count * 2
def set_result(home, rival, tournament_round):
    home_team_goals = 0
    rival_team_goals = 0
    while home_team_goals == rival_team_goals:
        home_team_goals = random.randint(0, 10)
        rival_team_goals = random.randint(0, 10)
        game_result["home"] = home
        game_result["rival"] = rival
        game_result["result"] = [home_team_goals, rival_team_goals]
        game_result["tournament_round"] = "1/" + str(tournament_round)
        if home_team_goals > rival_team_goals:
                game_result["win"] = True
                break
        elif home_team_goals < rival_team_goals:
            game_result["win"] = False
            break
    return game_result.copy()

def get_results(country):
    results = []
    for name1 in round_name:
        for name2 in tournament_result[str(name1)]:
            if name2["home"] == country or name2["rival"] == country:
                results.append(name2)
    return results

for name in reversed(round_name):
    count = 0
    games = []
    while count < name:
        games.append(set_result(countries[count], countries[count + 1], name))
        if (games[count].get("win")):
            del countries[count + 1]
        else:
            del countries[count]
        count = count + 1
    tournament_result.setdefault(str(name))
    tournament_result[str(name)] = games.copy()
print("Winner:", countries[0], "!!!\nWith games result: \n", get_results(countries[0]))
print ("\n", get_results("poland"))


Winner: spain !!!
With games result: 
 [{'tournament_round': '1/1', 'home': 'poland', 'rival': 'spain', 'result': [1, 6], 'win': False}, {'tournament_round': '1/2', 'home': 'spain', 'rival': 'iceland', 'result': [5, 4], 'win': True}, {'tournament_round': '1/4', 'home': 'slovakia', 'rival': 'spain', 'result': [1, 5], 'win': False}, {'tournament_round': '1/8', 'home': 'italy', 'rival': 'spain', 'result': [3, 6], 'win': False}]

 [{'tournament_round': '1/1', 'home': 'poland', 'rival': 'spain', 'result': [1, 6], 'win': False}, {'tournament_round': '1/2', 'home': 'poland', 'rival': 'belgium', 'result': [8, 3], 'win': True}, {'tournament_round': '1/4', 'home': 'poland', 'rival': 'croatia', 'result': [5, 3], 'win': True}, {'tournament_round': '1/8', 'home': 'switzerland', 'rival': 'poland', 'result': [3, 4], 'win': False}]