2. Fitxers de Classificació [4p]

Disposem de fitxers de text amb els resultats dels partits realitzats un dia determinat del FIFA World Cup de futbol. En un mateix dia hi pot haver partits de grups diferents. Els partits no estan ordenats. Cada línia del fitxer conté la informació sobre un partit amb les informacions següents separades per coma (','):

  • grup (una lletra majúscula entre la 'A' i la 'F' incloses)

  • nom d’un equip

  • nombre de gols que ha marcat

  • nom de l’equip contrari

  • nombre de gols del contrari

Disposem d’un exemple al fitxer partits-23-11-2022.txt amb el contingut següent:

F,Morocco,0,Croatia,0
E,Germany,1,Japan,2
F,Belgium,1,Canada,0
E,Spain,7,Costa Rica,0

Es vol llegir aquesta informació i escriure la informació de la taula classificatòria que se’n deriva. Amb aquest objectiu es demana que al mòdul csfc (fitxer csfc.py) facis les funcions següents:

Avís

Les funcions tenen el mateix pes de nota.

2.1. Llegeix Classificació

Es demana la funció

csfc_llegeix(dm, g, Dreg)

tal que

donats

  • dm una tupla (tuple) amb dos enters (int) que indiquen un dia del mes i un mes, respectivament

  • g un str que indica un grup (lletra majúscula entre la 'A' i la 'F')

  • Dreg un diccionari (dict) on la clau és un str (noms d’equip) i el valor és None (o sigui res)

i donat que al directori actual hi ha el fitxer partits-d-m-2022.txt tal que:

  • d és el primer element de dm

  • m és el segon

  • té el format descrit abans

retorna una llista on per cada partit que es troba al fitxer indicat i que és del grup g hi ha una subllista amb 4 valors:

  • els noms dels dos equips (str)

  • els gols (int) marcats pels dos equips respectivament

En cas que tan sols un dels noms d’equip (sigui del grup que sigui) no estigui a Dreg aleshores la funció retornarà la llista [-1].

Per exemple, donats el diccionari i la llista següents:


>>> Dreg = {'Morocco': None, 'Croatia': None, 'Germany': None, 'Japan': None, 'Belgium': None, 'Canada': None, 'Spain': None, 'Costa Rica': None}

>>> Llin = [
... 'F,Morocco,0,Croatia,0',
... 'E,Germany,1,Japan,2',
... 'F,Belgium,1,Canada,0',
... 'E,Spain,7,Costa Rica,0']

la crida següent ha de retornar la llista que la segueix:


>>> csfc_llegeix((1, 11), 'E', Dreg)
[['Germany', 'Japan', 1, 2], ['Spain', 'Costa Rica', 7, 0]]

Observa que la llista només conté els partits del grup E. Si no n’hi hagués cap la llista retornada seria buida []. Si hi hagués tan sols un equip que no fos correcte (no inclòs al diccionari) la llista resultant seria [-1].

Disposes dels jocs de proves al fitxer csfc_llegeix_test.txt.

2.2. Escriu Classificació

Es demana la funció

csfc_escriu(D, L, g)

tal que donats:

  • D un diccionari (com el resultant de la funció Genera Taula del problema Taula Classificatòria) que té per clau un nom de selecció s (str) i per valor els resultats d’aquesta selecció en forma d’una llista de tuples, una per cada partit disputat per s, amb els 3 valors següents:

    • el nom de la selecció contrària (str)

    • els gols fets per la mateixa selecció s

    • els gols fets per la selecció contrària

  • L una llista on cada element és una llista amb un nom d’equip (que és una clau del diccionari D) i 4 int que representen els punts, total de gols a favor, total de gols en contra i diferència de gols de l’equip en qüestió.

  • g un str que indica un grup (lletra majúscula entre 'A' i 'F').

crea un fitxer de text amb el nom grupX.txt on X és la lletra indicada a g i a on per cada element de la llista L (informació que correspon a un equip) hi haurà una línia en el format que es mostra a l’exemple següent i en el mateix ordre que a L.

Per exemple, donats el diccionari i llista següents:


>>> Dt = {
... 'Germany': [('Japan', 1, 2), ('Spain', 1, 1), ('CostaRica', 4, 2)],
... 'Spain': [('CostaRica', 7, 0), ('Germany', 1, 1), ('Japan', 1, 2)],
... 'CostaRica': [('Spain', 0, 7), ('Japan', 1, 0), ('Germany', 2, 4)],
... 'Japan' : [('Germany', 2, 1), ('CostaRica', 0, 1), ('Spain', 2, 1)]}

>>> L = [['Japan', 6, 5, 4, 1], ['Spain', 4, 9, 3, 6], ['CostaRica', 4, 5, 4, 1], ['Germany', 4, 4, 3, 1]]

la crida csfc_escriu(Dt, L, 'E') ha de generar el fitxer 'grupE.txt' amb el text següent:

Japan,6,5,4,1,Germany:2-1,CostaRica:0-1,Spain:2-1
Spain,4,9,3,6,CostaRica:7-0,Germany:1-1,Japan:1-2
CostaRica,4,5,4,1,Spain:0-7,Japan:1-0,Germany:2-4
Germany,4,4,3,1,Japan:1-2,Spain:1-1,CostaRica:4-2

No oblidis que al final de cada línia hi ha un caràcter salt de línia '\n'.

Disposes dels jocs de proves al fitxer csfc_escriu_test.txt.

Avís

  • El nom de les funcions han de ser exactament el demanat a l’enunciat.

  • El nom dels fitxers amb el teu codi han de ser exactament el nom indicat a l’enunciat amb l’extensio .py i és important que no contingui res més que la definició de la funció demanada.