Coupes du monde de football¶

On trouvera joint à cet exercice un fichier .txt qui contient les résultats de tous les matchs des coupes du monde de football entre 1930 et 2010 (désolé de ne pas avoir pu récupérer les plus récentes qui vous intéressent peut-être davantage !).

  • La première ligne du fichier contient les étiquettes, elle commence par le caractère #.
  • Toutes les autres lignes sont de la forme : Année, tour, Pays1, buts, Pays 2, buts.

Ainsi le fichier commence par les lignes suivantes:

txt
# Année,Niveau de la compétition,Pays,Buts,Pays,Buts
1930,1er tour,France,4,Mexique,1
1930,1er tour,Belgique,0,Usa,3
1930,1er tour,Brésil,1,Yougoslavie,2
...

On y apprend par exemple que lors de la coupe du monde de 1930, la France a battu le Mexique au premier tour sur le score de 4 buts à 1.

On donne ci-dessous une fonction qui permet de transformer une ligne de type string issue du fichier précédent en un enregistrement de type dictionnaire dont la structure est la suivante :

match = { 
        'annee' : ..., # de type int
        'pays1' : ..., # de type str
        'pays2' : ..., # de type str
        'but1' : ..., # de type int
        'but2' : ... # de type int
        }
In [ ]:
def str2match(chaine : str) -> list :
    """ Cette fonction reçoit une ligne de texte
    issue du fichier 'coupe du monde' et renvoie les
    informations du match correspondant dans le 
    dictionnaire match
    """
    lst = chaine.strip().split(',')
    lst.pop(1)
    match = {
        'annee' : int(lst[0]),
        'pays1' : lst[1],
        'pays2' : lst[3],
        'but1' : int(lst[2]),
        'but2' : int(lst[4])
        }
    return match

# on teste
print(str2match("1930,1er tour,France,4,Mexique,1\n"))

Q0. Compléter la fonction ci-dessous qui permet de lire le fichier coupes_du_monde.txt et d'obtenir la liste de tous les matchs (chaque match étant stocké sous forme de dictionnaire). La fonction précédente sera bien utile...

In [ ]:
def readfile() -> list :
    """ récupère les données du fichier 'coupes_du_monde.txt'
    et renvoie la liste L de tous les matchs. Plus précisément,
    chaque élément de L, c'est à dire chaque match, sera lui aussi
    représenté par un dictionnaire dont la structure est :
    match = { 
        'annee' : ...,
        'pays1' : ...,
        'pays2' : ...,
        'but1' : ...,
        'but2' : ...
        }
    """

    L = []
    with open("coupes_du_monde.txt", mode='r') as myfile :
        for line in myfile :
            if line[0] not in ['\n', '#'] :
                # ... à compléter
    return L

# on teste
list_of_matches = readfile()
print(list_of_matches[:5]) # on affiche les 5 premiers

A noter : la variable list_of_matches sera gloable et utilisable dans toutes les fonctions de la suite de l'exercice...¶

Q1. Combien de matchs ont été recensés dans cette étude entre 1930 et 2010 ?

-> Réponse : ....

In [ ]:
# print(...)

Q2. Compléter la fonction nb_matches(annees : int)->int ci-dessous afin de déterminer combien de matchs ont été joués en 1930 et en 2010 ?

-> Réponses :

  • en 1930 :
  • en 2010 :
In [ ]:
def nb_matches(annee : int) -> int :
    """ renvoie le nombre de matchs joués lors de 
    l'année reçue en paramètre"""

    tot = 0
    for match in list_of_matches :
        # ... à compléter ...
    
    return tot

print(f"nombre de matchs en 1930 :", nb_matches(1930))
print(f"nombre de matchs en 2010 :", nb_matches(2010))

Q3. Déterminer la liste de tous les pays ayant participé à au moins une coupe du monde, et dire combien il y en a.

-> Réponse : nombre de pays différents ayant participé = ...

In [ ]:
def list_of_countries() -> list :
    """ renvoie la liste de tous les pays ayant participé au 
    moins une fois  à une coupe du monde """

    lst = []
    for match in list_of_matches :
        country1 = match['pays1']
        country2 = match['pays2']
        # ... à compléter ...
    return lst

lst = list_of_countries()
print("liste de tous les pays ayant participé :", lst)
print(f"cela fait {len(lst)} pays au total")

Q4. Nombre de matchs joués par la France

-> réponse : ....

In [ ]:
def nb_matches_France():
    tot = 0
    for m in list_of_matches :
        # ...  compléter ...
    return tot

print(f"Nombre de matchs joués par l'équipe de France {nb_matches_France()}")

Q5. Nombres de victoires, nuls et défaites de l'équipe de France :

-> réponse :

  • victoires :
  • nuls :
  • défaites :
In [ ]:
def results_France():
    """ renvoie un tuple contenant les nombres de victoires,
    de nuls et de défaites de l'équipe de France au cours
    des coupes du monde de 1930 à 2010"""
    vic = 0
    nul = 0
    
    for m in list_of_matches :
        if m['pays1'] == 'France' :
            if m['but1']>m['but2'] :
                vic += 1
            if m['but1']==m['but2'] : 
                nul += 1
        # ... à compléter ...
    dft = # ... 
    return vic,nul, dft

print(f"Résultats des matchs de l'équipe de France (V/N/D) {results_France()}")

Q6. Quel a été le plus gros total de buts marqués sur un match ? Quel match ? En quelle année ?

-> Réponse : ...

In [ ]:
match_max = list_of_matches[0]
maximum =  match_max['but1']+ match_max['but2']

for m in list_of_matches :
    # à compléter ...
        
print("Nombre max de buts en un seul match :",maximum)
print(match_max)

Q7. Déterminer le nombre moyens de buts en 1930 et celui en 2010.

-> Réponses :

  • Nombre moyen de buts en 1930 : ...
  • Nombre moyen de buts en 2010 : ...
In [ ]:
def average(annee : int) -> int:
    """ renvoie le nombre moyen de buts au cours des 
    matchs de l'année reçue en paramètre"""
    
    # à compléter
    
    return # ...

print(f"Nombre moyen de buts en 1930 {average(1930):.2f}")
print(f"Nombre moyen de buts en 2010 {average(2010):.2f}")

Q8. Imaginer une autre statistique qui vous semblerait pertinente et calculez-là :

-> Réponse :