Marató¶
Els resultats de carreres de marató s’emmagatzemen en fitxers amb una
estructura on la primera línia conté una capçalera detallant el
significat de cada dada del fitxer i, per les següents línies,
cadascuna correspon a un corredor i, per cadascún, s’indica el cognom,
el temps de la carrera (hores, minuts i segons) i la nacionalitat, tot
separat per espais. Com a exemple, pots descarregar el fitxer
marato.txt que té el següent
contingut:
nom hores minuts segons país
Gebrmariam 02 08 14 ETH
Mutai 02 09 18 KEN
Kipkosgei 02 10 39 KEN
Goumri 02 10 51 MAR
Kwambai 02 11 31 KEN
Keflezighi 02 11 38 USA
DosSantos 02 11 51 BRA
Desa les següents funcions al fitxer marato.py.
Dissenya la funció
converteix()que donat el nom d’un fitxer amb resultats d’una marató, retorni una llista de tuples on cada tuple correspongui a un corredor i contingui el cognom, el temps de la carrera convertit a segons i la nacionalitat. Aquesta llista ha d’estar en el mateix ordre que el fitxer. Exemple:>>> converteix('marato.txt') [('Gebrmariam', 7694, 'ETH'), ('Mutai', 7758, 'KEN'), ('Kipkosgei', 7839, 'KEN'), ('Goumri', 7851, 'MAR'), ('Kwambai', 7891, 'KEN'), ('Keflezighi', 7898, 'USA'), ('DosSantos', 7911, 'BRA')]
Nota
Podeu descarregar el fitxer amb tests
converteix.txtDissenya la funció
temps_sota()que donada una llista de tuples com la de l’apartat anterior i un tempsten segons, indiqui si algun corredor ha fet un temps per sota det. Tingues en compte que la llista pot no estar ordenada.>>> lt = [('Gebrmariam', 7688, 'ETH'), ('Mutai', 7749, 'KEN'), ... ('Kipkosgei', 7810, 'KEN'), ('Goumri', 7810, 'MAR'), ... ('Kwambai', 7871, 'KEN'), ('Keflezighi', 7871, 'USA'), ... ('DosSantos', 7871, 'BRA')] >>> temps_sota(lt,7700) True >>> temps_sota(lt,7650) False >>> lt = [('Gebrmariam', 7694, 'ETH'), ('Mutai', 7758, 'KEN'), ... ('Kipkosgei', 7839, 'KEN'), ('Goumri', 7851, 'MAR')] >>> temps_sota(lt,7600) False >>> lt = [('Gebrmariam', 7694, 'ETH'), ('Mutai', 7758, 'KEN'), ... ('Kipkosgei', 7439, 'KEN'), ('Goumri', 7851, 'MAR')] >>> temps_sota(lt,7600) True
Nota
Podeu descarregar el fitxer amb tests
temps_sota.txtDissenya una funció
diferencia_primer()que donada una llista de tuples com les dels apartats anteriors i el nom d’un fitxer, creï un fitxer amb el nom donat on cada línia representa un corredor i inclou el cognom i el temps de diferència amb el primer classificat en segons separats per un espai en blanc. Suposa que la llista està ordenada per temps. El primer classificat també ha d’aparèixer al fitxer amb un temps de 0.>>> lt = [('Gebrmariam', 7688, 'ETH'), ('Mutai', 7749, 'KEN'), ... ('Kipkosgei', 7810, 'KEN'), ('Goumri', 7810, 'MAR'), ... ('Kwambai', 7871, 'KEN'), ('Keflezighi', 7871, 'USA'), ... ('DosSantos', 7871, 'BRA')] >>> diferencia_primer(lt, 'dif1.txt') >>> f1 = open ('dif1.txt', 'r') >>> s1 = f1.read() >>> s1 'Gebrmariam 0\nMutai 61\nKipkosgei 122\nGoumri 122\nKwambai 183\nKeflezighi 183\nDosSantos 183\n' >>> lt = [('Kwambai', 7871, 'KEN'), ('Gebrmariam', 7894, 'ETH'), ... ('Keflezighi', 7899, 'USA'), ('Mutai', 7931, 'KEN'), ... ('Kipkosgei', 7956, 'KEN'), ('Goumri', 7979, 'MAR')] >>> diferencia_primer(lt, 'dif2.txt') >>> f2 = open ('dif2.txt', 'r') >>> s2 = f2.read() >>> s2 'Kwambai 0\nGebrmariam 23\nKeflezighi 28\nMutai 60\nKipkosgei 85\nGoumri 108\n'
Nota
Podeu descarregar el fitxer amb tests
diferencia_primer.txt
Solucions
Disposeu de solucions al fitxer marato.py