Esame Lun 28, Giu 2021 B

Seminari Python - Triennale Sociologia @Università di Trento

Scarica esercizi e soluzioni

B1 Game of Thrones

Apri con Pandas il file game-of-thrones.csv che contiene gli episodi in varie annate.

  • usa l’encoding UTF-8

B1.1) Ti viene fornito un dizionario preferiti con gli episodi preferiti di un gruppo di persone, che però non si ricordano esattamente i vari titoli che sono quindi spesso incompleti: Seleziona gli episodi preferiti da Paolo e Chiara

  • assumi che la capitalizzazione in preferiti sia quella corretta

  • NOTA: il dataset contiene insidiose doppie virgolette " attorno ai titoli, ma se scrivi il codice nel modo giusto questo non dovrebbe essere un problema

Mostra soluzione
[2]:

import pandas as pd
import numpy as np    # importiamo numpy e per comodità lo rinominiamo in 'np'

preferiti = {
    "Paolo" : 'Winter Is',
    "Chiara" : 'Wolf and the Lion',
    "Anselmo" : 'Fire and',
    "Letizia" : 'Garden of'
}


# scrivi qui


../../../_images/exams_2021-06-28_solutions_exam-2021-06-28-sol_7_0.png

B1.2) Seleziona tutti gli episodi che sono stati mandati per la prima volta in onda in un certo anno (colonna Original air date)

  • NOTA: anno ti viene fornito come int

Mostra soluzione
[3]:
anno = 17

# scrivi qui


../../../_images/exams_2021-06-28_solutions_exam-2021-06-28-sol_12_0.png

B2 Punti di interesse universiadi

Scrivi una funzione che dato il file punti-interesse.csv dei punti di interesse di Trento individuati per le Universiadi 2013, RITORNA una lista ordinata e senza duplicati con tutti i nomi che trovi nella colonna CATEGORIA.

Sorgente dati: dati.trentino.it

  • USA un csv.reader e l’encoding latin-1

  • non includere categorie vuote nel risultato

  • alcune categorie sono in realtà più di una divise da trattino, separale in categorie distinte:

    Esempi:

    • Banca- Bancomat-Cambiovaluta

    • Centro commerciale-Grande magazzino

Mostra soluzione
[4]:
import csv

def cercat(file_csv):
    raise Exception('TODO IMPLEMENT ME !')

risultato = cercat('punti-interesse.csv')
print(risultato)

atteso = ['Affitta Camere', 'Agriturismo', 'Alimentari', 'Appartamento Vacanze',
          'Autostazione', 'Banca', 'Bancomat', 'Bar', 'Bed & Breakfast', 'Biblioteca',
          'Birreria', 'Bus Navetta', 'Cambiovaluta', 'Camping', 'Centro Wellness',
          'Centro commerciale', 'Corrieri', 'Discoteca', 'Editoria', 'Farmacia', 'Funivia',
          'Gelateria', 'Grande magazzino', 'Hotel', 'Istituzioni', 'Mercatini', 'Mercato',
          'Monumento', 'Museo', 'Noleggio Sci', 'Numeri utili', 'Parcheggio', 'Pasticceria',
          'Piscina', 'Posta', 'Prodotti tipici', 'Pub', 'Residence', 'Rifugio', 'Ristorante',
          'Scuola Sci', 'Sede Trentino Trasporti', 'Snow Park', 'Souvenir', 'Sport', 'Stadio',
          'Stadio del ghiaccio', 'Stazione dei Treni', 'Taxi', 'Teatro', 'Ufficio informazioni turistiche']
#TEST
print()
for i in range(len(atteso)):
    if risultato[i] != atteso[i]:
        print("ERRORE ALL'ELEMENTO %s:" % i)
        print('   ATTESO:', atteso[i])
        print('  TROVATO:', risultato[i])
        break
['Affitta Camere', 'Agriturismo', 'Alimentari', 'Appartamento Vacanze', 'Autostazione', 'Banca', 'Bancomat', 'Bar', 'Bed & Breakfast', 'Biblioteca', 'Birreria', 'Bus Navetta', 'Cambiovaluta', 'Camping', 'Centro Wellness', 'Centro commerciale', 'Corrieri', 'Discoteca', 'Editoria', 'Farmacia', 'Funivia', 'Gelateria', 'Grande magazzino', 'Hotel', 'Istituzioni', 'Mercatini', 'Mercato', 'Monumento', 'Museo', 'Noleggio Sci', 'Numeri utili', 'Parcheggio', 'Pasticceria', 'Piscina', 'Posta', 'Prodotti tipici', 'Pub', 'Residence', 'Rifugio', 'Ristorante', 'Scuola Sci', 'Sede Trentino Trasporti', 'Snow Park', 'Souvenir', 'Sport', 'Stadio', 'Stadio del ghiaccio', 'Stazione dei Treni', 'Taxi', 'Teatro', 'Ufficio informazioni turistiche']

B3 gratt

Il profilo di una città può essere rappresentato come una lista 2D dove gli 1 rappredentano gli edifici. Nell’esempio sotto, l’altezza dell’edificio più alto è 4 (la seconda colonna da destra)

[[0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 0],
 [0, 0, 1, 0, 1, 0],
 [0, 1, 1, 1, 1, 0],
 [1, 1, 1, 1, 1, 1]]

Scrivi una funzione che prende un profilo come lista 2-D di 0 e 1 e RITORNA l’altezza del grattacielo più alto, per altri esempi vedere gli assert.

Mostra soluzione
[6]:

def gratt(mat):
    raise Exception('TODO IMPLEMENT ME !')

assert gratt([[0, 0, 0, 0, 0, 0],
              [0, 0, 0, 0, 1, 0],
              [0, 0, 1, 0, 1, 0],
              [0, 1, 1, 1, 1, 0],
              [1, 1, 1, 1, 1, 1]])  == 4

assert gratt([
  [0, 0, 0, 0],
  [0, 1, 0, 0],
  [0, 1, 1, 0],
  [1, 1, 1, 1]
]) == 3

assert gratt([
  [0, 1, 0, 0],
  [0, 1, 0, 0],
  [0, 1, 1, 0],
  [1, 1, 1, 1]
]) == 4

assert gratt([
  [0, 0, 0, 0],
  [0, 0, 0, 0],
  [1, 1, 1, 0],
  [1, 1, 1, 1]
]) == 2

B4 scendisali

Scrivi una funzione che date le dimensioni di n righe e m colonne RITORNA una NUOVA matrice numpy n x m con sequenze che scendono e salgono a righe alterne come negli esempi

  • se m è dispari, lancia ValueError

>>> scendisali(6,10)
array([[0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
       [0., 1., 2., 3., 4., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
       [0., 1., 2., 3., 4., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
       [0., 1., 2., 3., 4., 0., 0., 0., 0., 0.]])
Mostra soluzione
[7]:
import numpy as np

def scendisali(n,m):
    raise Exception('TODO IMPLEMENT ME !')


assert np.allclose(scendisali(1,2),  np.array([[0., 0.],
                                               [0., 0.]]))
assert type(scendisali(1,2)) == np.ndarray

assert np.allclose(scendisali(2,6),  np.array([[0., 0., 0., 2., 1., 0.],
                                               [0., 1., 2., 0., 0., 0.]]))

assert np.allclose(scendisali(6,10), np.array([[0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
                                               [0., 1., 2., 3., 4., 0., 0., 0., 0., 0.],
                                               [0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
                                               [0., 1., 2., 3., 4., 0., 0., 0., 0., 0.],
                                               [0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
                                               [0., 1., 2., 3., 4., 0., 0., 0., 0., 0.]]))
try:
    scendisali(2,3)
    raise Exception("Avrei dovuto fallire prima!")
except ValueError:
    pass
[ ]: