.. index:: Lliga de futbol Lliga de futbol --------------------------------------- La resultats que es produeixen en una lliga de futbol es guarden en una llista on cada element representa un partit disputat. Cada partit és a la seva vegada una llista de **quatre** elements: un string amb el nom de l'equip local, un enter amb els gols marcats per l'equip local, un string amb el nom de l'equip visitant i un enter amb els gols marcats per l'equip visitant. Un exemple d'un partit de la lliga podria ser la llista: *['LasPalmas', 3, 'AthBilbao', 1]*. Obtenir la classificació ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Es vol fer una funció *classif_equips(lPartits)* que a partir de la llista *lPartits* amb la informació dels partits disputats per uns equips de futbol retorni un **diccionari** amb la classificació final. La clau del diccionari serà el nom de l'equip i el valor el seu número de punts. Tots els equips tindran 0 punts abans de disputar la llista de partits. La funció recorre la llista *lPartits* i va actualitzant el diccionari de la classificació en funció del resultat: l'equip que guanya es porta 3 punts, el que perd cap, i si empaten 1 punt cadascú. .. note:: Aquest és un exemple amb els partits disputats fins al 23 de novembre del 2016 a la Fase de Grups de la Champions 2016 al *grup C*, format per: FC Barcelona, Manchester City, Borússia Monchengladbach i Celtic de Glasgow. Els resultats estan extrets de `la pàgina web de la UEFA. `_ >>> lP = [ [ 'Barcelona', 7, 'CelticGlasgow', 0 ], ... [ 'ManchesterCity', 4, 'BorussiaMG', 0 ], ... [ 'BorussiaMG', 1, 'Barcelona', 2 ], ... [ 'CelticGlasgow', 3, 'ManchesterCity', 3 ], ... [ 'Barcelona', 4, 'ManchesterCity', 0 ], ... [ 'CelticGlasgow', 0, 'BorussiaMG', 2 ], ... [ 'ManchesterCity', 3, 'Barcelona', 1 ], ... [ 'BorussiaMG', 1, 'CelticGlasgow', 1 ], ... [ 'BorussiaMG', 1, 'ManchesterCity', 1 ], ... [ 'CelticGlasgow', 0, 'Barcelona', 2 ] ... ] >>> dC = classif_equips(lP) >>> dC == { 'BorussiaMG': 5, 'Barcelona': 12, 'ManchesterCity': 8, 'CelticGlasgow': 2 } True Completa el codi de la funció que tens a continuació: .. literalinclude:: lliga_futbol.py :language: python3 :lines: 1,22-25,27-29,31-33,35-37,39-40,42-43,46-47 | Ordenar la classificació ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ La funció *ordenaClassif(dClassif)* donat un diccionari *dClassif* com el retornat per la funció *classif_equips*, calcula i retorna una llista de parelles/tuples *(nomEquip, punts)* amb la classificació dels equips ordenada en ordre decreixent del número de punts. Quan hi ha igualtat de punts es farà servir l'ordre creixent dels noms per desfer l'empat. Un exemple de una classificació ordenada de equips és: *[ [21, Celta], [15, Betis], [15, Rayo] ]* .. code-block:: python3 >>> dClassif = { 'BorussiaMG': 5, 'ManchesterCity': 8, 'Barcelona': 12, 'CelticGlasgow': 2 } >>> sortedClassif(dClassif) [('Barcelona', 12), ('ManchesterCity', 8), ('BorussiaMG', 5), ('CelticGlasgow', 2)] A continuació hi ha una posible solució: .. literalinclude:: lliga_futbol.py :language: python3 :lines: 50-52,58-67 | Escriure la classificació ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ La funció *mostraClassif(lClassif)* donada una llista amb la classificació ordenada tal com la obtinguda per la funció *ordenaClassif*, **escriu** per pantalla, línia a línia, el seu contingut. .. code-block:: python3 >>> lC = [ ('Barcelona', 12), ('ManchesterCity', 8), ... ('BorussiaMG', 5), ('CelticGlasgow', 2) ] >>> mostraClassif(lC) # doctest: +NORMALIZE_WHITESPACE 1. Barcelona 12 punts 2. ManchesterCity 8 punts 3. BorussiaMG 5 punts 4. CelticGlasgow 2 punts A continuació hi ha una posible solució: .. literalinclude:: lliga_futbol.py :language: python3 :lines: 70,80-82 | Llegir els partits d'un fitxer ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ La funció *llegeixPartits(nomFitxer)* donat un string *nomFitxer* amb el nom d'un fitxer de text que conté resultats dels partits d'una lliga de futbol, llegeix el fitxer línia a línia i obté i retorna la llista dels resultats en el format especificat al començament del problema. .. note:: A continuació veieu el continugut def fitxer :download:`grupC.txt` amb els resultats dels partits de la fase de grups de la Champions d'aquest 2016. .. literalinclude:: grupC.txt >>> llegeixPartits('grupC.txt') [['Barcelona', 7, 'CelticGlasgow', 0], ['ManchesterCity', 4, 'BorussiaMG', 0], ['BorussiaMG', 1, 'Barcelona', 2], ['CelticGlasgow', 3, 'ManchesterCity', 3], ['Barcelona', 4, 'ManchesterCity', 0], ['CelticGlasgow', 0, 'BorussiaMG', 2], ['ManchesterCity', 3, 'Barcelona', 1], ['BorussiaMG', 1, 'CelticGlasgow', 1], ['BorussiaMG', 1, 'ManchesterCity', 1], ['CelticGlasgow', 0, 'Barcelona', 2]] A continuació hi ha una posible solució: .. literalinclude:: lliga_futbol.py :language: python3 :lines: 87,92-106 | Programa principal ^^^^^^^^^^^^^^^^^^^^^^^ El següent programa demana el nom d'un fitxer amb partits de futbol i escriu per pantalla la classificació final. Per tal de fer-ho es fan crides a les 3 funcions anteriors. .. literalinclude:: lliga_futbol.py :language: python3 :lines: 109-119