Esame Lun 31, Mag 2021 - A e B¶
Seminari Python @Sociologia, Università di Trento
Modulo A¶
A1 babbà¶
✪✪ Scrivi del codice che data una lettera cerca da trovare e una frase, produce una lista con tutte le parole contenti quella lettera
[1]:
cerca = 'à' # ['città', 'babbà']
#cerca = 'è' # ['è', 'bignè', 'caffè']
frase = "Questa città è piena di babbà , bignè e caffè"
# scrivi qui
A2 Il Tempio della Fortuna¶
✪✪ Esplorando il Tempio della Fortuna, hai trovato delle pietre preziose ciascuna con un numero sacro scavato sopra di essa. Sei tentato di prenderle tutte, ma un messaggio sopra le pietre avverte minaccioso che solo gli stolti prendono i numeri senza prima aver consultato l’Oracolo.
A fianco trovi la statua di un Buddha a gambe incrociate che tiene un vassoio con delle cavità in sequenza - qualche cavità ha un fagiolo, altri sono vuote.
Date una lista pietre di numeri e una oracolo di booleani, scrivi del codice che MODIFICA la lista sacca mettendoci dentro solo i numeri di pietre per cui c’è un True alla corrispondente posizione di oracolo
assumi che entrambe le liste abbiano esattamente le stesse dimensioni
Esempio - dati:
[2]:
pietre = [9, 7, 6, 8, 7]
oracolo = [True, False, True, True, False]
Dopo il tuo codice deve risultare:
>>> print(sacca)
[9, 6, 8]
[3]:
pietre,oracolo = [9,7,6,8,7], [True, False, True, True, False] # [9, 6, 8]
#pietre,oracolo = [3,5,2,3,4,2,4], [True, True, False, True, False, True, False] # [3,5,3,2]
sacca = []
# scrivi qui
A3 rospo¶
✪✪ Dato una stringa parola e una stringa ripetizioni contenente solo cifre, metti nella variabile risultato una stringa contenente tutte le lettere di parola ripetute per il numero di volte indicato alla posizione corrispondente in ripetizioni
[4]:
parola, ripetizioni = "rospo", "14323" # 'roooosssppooo'
#parola, ripetizioni = "artificio", "144232312" # 'arrrrttttiifffiicccioo'
# scrivi qui
A4 miniera¶
✪✪ Dato un dizionario miniera che associa chiavi a numeri, MODIFICA il dizionario estratto associando le stesse chiavi di miniera a liste con le chiavi ripetute il numero di volte indicato.
Esempio - dato
miniera = {'ottone': 5,
'rame' : 8,
'ferro' : 1}
estratto = {}
dopo il tuo codice deve risultare
>>> print(estratto)
{'ottone': ['ottone', 'ottone', 'ottone', 'ottone', 'ottone'],
'rame' : ['rame', 'rame', 'rame', 'rame', 'rame', 'rame', 'rame', 'rame'],
'ferro' : ['ferro']}
[5]:
miniera = {'ottone' : 5,
'rame' : 8,
'ferro' : 1}
estratto = {}
# scrivi qui
Modulo B¶
B1 Strutture sanitarie¶
✪✪ Scrivere una funzione che apre il dataset SANSTRUT001.csv con pandas (encoding UTF-8) e prende in input un codice comune e una stringa di testo, e RITORNA un dataframe con selezionate solo le righe aventi quel codice comune e che contengono la stringa nella colonna ASSISTENZA. Il dataset ritornato deve avere solo le colonne STRUTTURA, ASSISTENZA, COD_COMUNE, COMUNE. La funzione STAMPA anche il numero di righe trovate.
Fonte dati: dati.trentino.it
Mostra soluzione[6]:
import pandas as pd
import numpy as np
def strutsan(cod_comune, assistenza):
raise Exception('TODO IMPLEMENT ME !')
[7]:
strutsan(22050, '') # nessun filtro assistenza
***** SOLUZIONE
Trovate 6 strutture
[7]:
| STRUTTURA | ASSISTENZA | COD_COMUNE | COMUNE | |
|---|---|---|---|---|
| 0 | PRESIDIO OSPEDALIERO DI CAVALESE | ATTIVITA` CLINICA | 22050 | CAVALESE |
| 1 | PRESIDIO OSPEDALIERO DI CAVALESE | DIAGNOSTICA STRUMENTALE E PER IMMAGINI | 22050 | CAVALESE |
| 2 | PRESIDIO OSPEDALIERO DI CAVALESE | ATTIVITA` DI LABORATORIO | 22050 | CAVALESE |
| 3 | CENTRO SALUTE MENTALE CAVALESE | ASSISTENZA PSICHIATRICA | 22050 | CAVALESE |
| 4 | CENTRO DIALISI CAVALESE | ATTIVITA` CLINICA | 22050 | CAVALESE |
| 5 | CONSULTORIO CAVALESE | ATTIVITA` DI CONSULTORIO MATERNO-INFANTILE | 22050 | CAVALESE |
[8]:
strutsan(22205, 'CLINICA')
***** SOLUZIONE
Trovate 16 strutture
[8]:
| STRUTTURA | ASSISTENZA | COD_COMUNE | COMUNE | |
|---|---|---|---|---|
| 59 | PRESIDIO OSPEDALIERO S.CHIARA | ATTIVITA` CLINICA | 22205 | TRENTO |
| 62 | CENTRO DIALISI TRENTO | ATTIVITA` CLINICA | 22205 | TRENTO |
| 63 | POLIAMBULATORI S.CHIARA | ATTIVITA` CLINICA | 22205 | TRENTO |
| 64 | PRESIDIO OSPEDALIERO VILLA IGEA | ATTIVITA` CLINICA | 22205 | TRENTO |
| 73 | OSPEDALE CLASSIFICATO S.CAMILLO | ATTIVITA` CLINICA | 22205 | TRENTO |
| 84 | NEUROPSICHIATRIA INFANTILE - UONPI 1 | ATTIVITA` CLINICA | 22205 | TRENTO |
| 87 | CASA DI CURA VILLA BIANCA SPA | ATTIVITA` CLINICA | 22205 | TRENTO |
| 90 | CENTRO SERVIZI SANITARI | ATTIVITA` CLINICA | 22205 | TRENTO |
| 93 | PSICOLOGIA CLINICA | ATTIVITA` CLINICA | 22205 | TRENTO |
| 122 | ASSOCIAZIONE TRENTINA SCLEROSI MULTIPLA, ONLUS | ATTIVITA` CLINICA | 22205 | TRENTO |
| 123 | ANFFAS TRENTINO ONLUS | ATTIVITA` CLINICA | 22205 | TRENTO |
| 124 | COOPERATIVA SOCIALE IRIFOR DEL TRENTINO ONLUS | ATTIVITA` CLINICA | 22205 | TRENTO |
| 126 | AGSAT ASSOCIAZIONE GENITORI SOGGETTI AUTISTICI... | ATTIVITA` CLINICA | 22205 | TRENTO |
| 127 | AZIENDA PUBBLICA SERVIZI ALLA PERSONA - RSA PO... | ATTIVITA` CLINICA | 22205 | TRENTO |
| 130 | CST TRENTO | ATTIVITA` CLINICA | 22205 | TRENTO |
| 133 | A.P.S.P. 'BEATO DE TSCHIDERER' - AMB. LOGO-AUD... | ATTIVITA` CLINICA | 22205 | TRENTO |
[9]:
strutsan(22205, 'LABORATORIO')
***** SOLUZIONE
Trovate 5 strutture
[9]:
| STRUTTURA | ASSISTENZA | COD_COMUNE | COMUNE | |
|---|---|---|---|---|
| 61 | PRESIDIO OSPEDALIERO S.CHIARA | ATTIVITA` DI LABORATORIO | 22205 | TRENTO |
| 85 | LABORATORI ADIGE SRL | ATTIVITA` DI LABORATORIO | 22205 | TRENTO |
| 86 | LABORATORIO DRUSO SRL | ATTIVITA` DI LABORATORIO | 22205 | TRENTO |
| 89 | CASA DI CURA VILLA BIANCA SPA | ATTIVITA` DI LABORATORIO | 22205 | TRENTO |
| 92 | CENTRO SERVIZI SANITARI | ATTIVITA` DI LABORATORIO | 22205 | TRENTO |
B2 Strutture Comune di Trento¶
✪✪ Scrivere una funzione selcir che apre il dataset 2019-02-17-strutture-comune-di-trento.csv con un reader csv (encoding utf-8) e data una lista filtro di parole, seleziona solo le righe che contengono alla colonna Circoscrizione almeno una delle parole indicate, STAMPA quanti risultati sono stati trovati e RITORNA una NUOVA lista di liste riportante le colonne Nome
e Circoscrizione (senza header)
il filtro dovrebbe funzionare anche se nel testo ci sono parole con capitalizzazione diversa
ATTENZIONE 1: usare punto e virgola
;come delimiter nel csv readerATTENZIONE 2: se più parole del filtro vengono rilevate in una riga, dovresti includere la riga nell’output solo una volta!
Fonte dati: dati.trentino.it
Mostra soluzione[10]:
import csv
def selcir(filtro):
raise Exception('TODO IMPLEMENT ME !')
selcir(['argentario', 'gardolo'])
Trovati 16 risultati
[10]:
[['Argentario', 'Circoscrizione n. 06 - Argentario'],
['Martignano', 'Circoscrizione n. 06 - Argentario'],
['Montevaccino', 'Circoscrizione n. 06 - Argentario'],
['Gardolo', 'Circoscrizione n. 01 - Gardolo'],
['Roncafort (via Caproni)', 'Circoscrizione n. 01 - Gardolo'],
['Il Piccolo Girasole - Marnighe', 'Circoscrizione n. 06 - Argentario'],
['Gardolo', 'Circoscrizione n. 01 - Gardolo'],
['Aquilone - Gardolo', 'Circoscrizione n. 01 - Gardolo'],
['Roncafort (via Caneppele)', 'Circoscrizione n. 01 - Gardolo'],
['Arcobaleno - Martignano', 'Circoscrizione n. 06 - Argentario'],
['Margit Levinson - Roncafort', 'Circoscrizione n. 01 - Gardolo'],
['Biancaneve - Gardolo', 'Circoscrizione n. 01 - Gardolo'],
['Girasole - Melta', 'Circoscrizione n. 01 - Gardolo'],
['Gardolo - Meano', 'Circoscrizione n. 01 - Gardolo'],
['Argentario', 'Circoscrizione n. 06 - Argentario'],
['Gardolo', 'Circoscrizione n. 01 - Gardolo']]
[11]:
selcir(['argentario', 'Gardolo', 'RAVINA'])
Trovati 22 risultati
[11]:
[['Argentario', 'Circoscrizione n. 06 - Argentario'],
['Martignano', 'Circoscrizione n. 06 - Argentario'],
['Montevaccino', 'Circoscrizione n. 06 - Argentario'],
['Gardolo', 'Circoscrizione n. 01 - Gardolo'],
['Ravina', 'Circoscrizione n. 05 - Ravina - Romagnano'],
['Romagnano', 'Circoscrizione n. 05 - Ravina - Romagnano'],
['Roncafort (via Caproni)', 'Circoscrizione n. 01 - Gardolo'],
['Il Piccolo Girasole - Marnighe', 'Circoscrizione n. 06 - Argentario'],
['Gardolo', 'Circoscrizione n. 01 - Gardolo'],
['Aquilone - Gardolo', 'Circoscrizione n. 01 - Gardolo'],
['Ravina', 'Circoscrizione n. 05 - Ravina - Romagnano'],
['Roncafort (via Caneppele)', 'Circoscrizione n. 01 - Gardolo'],
['Arcobaleno - Martignano', 'Circoscrizione n. 06 - Argentario'],
['Girotondo - Ravina', 'Circoscrizione n. 05 - Ravina - Romagnano'],
['Margit Levinson - Roncafort', 'Circoscrizione n. 01 - Gardolo'],
['Biancaneve - Gardolo', 'Circoscrizione n. 01 - Gardolo'],
['Gli gnomi del bosco - Romagnano',
'Circoscrizione n. 05 - Ravina - Romagnano'],
['Girasole - Melta', 'Circoscrizione n. 01 - Gardolo'],
['Gardolo - Meano', 'Circoscrizione n. 01 - Gardolo'],
['Argentario', 'Circoscrizione n. 06 - Argentario'],
['Ravina Romagnano', 'Circoscrizione n. 05 - Ravina - Romagnano'],
['Gardolo', 'Circoscrizione n. 01 - Gardolo']]
B3 gradini¶
✪✪✪ Data una matrice quadrata numpy mat di dimensione n, RITORNA un NUOVO array numpy contenente i valori recuperati dalla matrice nell’ordine seguente:
1,2,*,*,*
*,3,4,*,*
*,*,5,6,*
*,*,*,7,8
*,*,*,*,9
se la matrice non è quadrata, lancia
ValueErrorNON usare liste python!
SUGGERIMENTO: quanti elementi deve avere l’array da ritornare?
Esempio:
>>> gradini(np.array([ [6,3,5,2,5],
[3,4,2,3,4],
[6,5,4,5,1],
[4,3,2,3,9],
[2,5,1,6,7] ] ))
array([6., 3., 4., 2., 4., 5., 3., 9., 7.])
[12]:
import numpy as np
def gradini(mat):
raise Exception('TODO IMPLEMENT ME !')
m1 = np.array([ [7] ])
assert np.allclose(gradini(m1), np.array([7]))
m2 = np.array([ [6,8],
[9,3]])
assert np.allclose(gradini(m2), np.array([6,8,3]))
m3 = np.array([ [6,3,5,2,5],
[3,4,2,3,4],
[6,5,4,5,1],
[4,3,2,3,9],
[2,5,1,6,7]])
assert np.allclose(gradini(m3), np.array([6,3,4,2,4,5,3,9,7]))
[13]:
#SOLUZIONE 'PRO'
B4 muro¶
✪✪✪ Dato una lista ripe di ripetizioni e una matrice n x m mat come lista di liste, RITORNA una matrice completamente NUOVA prendendo le righe di mat e replicandole il numero di volte indicato nelle corrispondenti celle di ripe
NON devono risultare puntatori dalla matrice nuova a quella vecchia!
Esempio:
>>> muro([3,4,1,2], [['i','a','a'],
['q','r','f'],
['y','e','v'],
['e','g','h']])
[['i', 'a', 'a'],
['i', 'a', 'a'],
['i', 'a', 'a'],
['q', 'r', 'f'],
['q', 'r', 'f'],
['q', 'r', 'f'],
['q', 'r', 'f'],
['y', 'e', 'v'],
['e', 'g', 'h'],
['e', 'g', 'h']]
[14]:
def muro(ripe, mat):
raise Exception('TODO IMPLEMENT ME !')
m1 = [['a']]
assert muro([2], m1) == [['a'],
['a']]
m2 = [['a','b','c','d'],
['e','q','v','r']]
r2 = muro([3,2], m2)
assert r2 == [['a','b','c','d'],
['a','b','c','d'],
['a','b','c','d'],
['e','q','v','r'],
['e','q','v','r']]
r2[0][0] = 'z'
assert m2 == [['a','b','c','d'], # vogliamo una NUOVA matrice
['e','q','v','r']]
m3 = [['i','a','a'],
['q','r','f'],
['y','e','v'],
['e','g','h']]
r3 = muro([3,4,1,2], m3)
assert r3 == [['i', 'a', 'a'],
['i', 'a', 'a'],
['i', 'a', 'a'],
['q', 'r', 'f'],
['q', 'r', 'f'],
['q', 'r', 'f'],
['q', 'r', 'f'],
['y', 'e', 'v'],
['e', 'g', 'h'],
['e', 'g', 'h']]
[ ]: