Matrici - Liste di liste 3 - Challenges
Sfida - Precariato a Murabasso
✪ Siamo nel 2020 e per Pier Giorgio della Cinta di Murabasso il lavoro fisso è ormai un miraggio. Ogni mese si giostra tra vari lavoretti e, siccome è una persona poco ordinata, tiene un registro di tutti i lavoretti part time ed occasionali che svolge per portare a casa la pagnotta.
Il problema del disordine è infatti che usa liste, ma il povero Pier Giorgio non sa che esistono strutture molto più comode! Una volta risolto potresti guardare la sfida simile Precariato ad Altomuro che usa invece liste di dizionari.
Questi dati sono salvati un una lista di liste, in cui ogni elemento è così composto:
[Etichetta, Ammontare, Stato_pagamento]
Si sta avvicinando il momento di compilare la dichiarazione dei redditi e Pier Giorgio avrebbe bisogno di sapere quanti soldi ha incassato finora e quanti se ne deve ancora aspettare. In più gli piacerebbe sapere quale è stato il lavoro più redditizio dell’anno (GIA’ PAGATO)
Calcolare il totale già ricevuto e il totale da ricevere ancora
Trovare il lavoro GIA’ PAGATO più redditizio
Esempio - dati:
[1]:
lavori = [
["Straordinari in fonderia", 175.13, "non pagato"],
["Part time gelateria", 450, "non pagato"],
["Rendita investimenti", 500, "pagato"],
["Pettinatura pitoni", 1000, "pagato"],
["Installazione artistica", 600, "non pagato"],
["Noleggio scarpe eleganti", 100, "non pagato"]
]
STAMPA:
1. Totale ricevuto: 1500
Totale da ricevere: 1325.13
2. Il lavoro più pagato finora è: Pettinatura pitoni
[2]:
lavori = [
["Straordinari in fonderia", 175.13, "non pagato"],
["Part time gelateria", 450, "non pagato"],
["Rendita investimenti", 500, "pagato"],
["Pettinatura pitoni", 1000, "pagato"],
["Installazione artistica", 600, "non pagato"],
["Noleggio scarpe eleganti", 100, "non pagato"]
]
# scrivi qui
Sfida - Incartati
✪✪ La fabbrica Le Cariamelle in collaborazione con vari studi dentistici produce caramelle giganti iper-zuccherose che stiva in uno scaffale
con n
ripiani aventi ciascuno m
scompartimenti. Purtroppo, una visita del Nuclo Anti Sofisticazioni dei carabinieri scopre che le confezioni non riportano i gravi rischi per la salute: per evitare multe stellari, la fabbrica deve al più presto incartarle, e assegna quindi ad ogni ripiano un tipo di confezionamento diverso.
Per esempio, dato uno scaffale
di cariamelle così:
[['f','e','a','b'],
['a','c','g','f'],
['b','c','d','f']]
e una lista di confezioni
come ['/','|','!']
, dovrai MODIFICARE lo scaffale
così:
[['/f/', '/e/', '/a/', '/b/'],
['|a|', '|c|', '|g|', '|f|'],
['!b!', '!c!', '!d!', '!f!']]
Più formalmente, scrivi una funzione che data una matrice scaffale
come lista di liste di stringhe, MODIFICA scaffale
mettendo ai lati di ogni stringa caratteri presi dalla lista confezioni
. Ogni riga avrà una confezione diversa, vedere esempi.
se la lista di
confezioni
ha lunghezza diversa dalle righe discaffale
, sollevaValueError
[4]:
from pprint import pprint
def incarta(scaffale, confezioni):
raise Exception('TODO IMPLEMENT ME !')
m1 = [['a']]
riga_zero_m1 = m1[0]
res = incarta(m1, ['|'])
assert res == None
assert m1 == [['|a|']]
# controlla che la riga zeresima punti ancora esattamente alla stessa regione di memoria originale
assert id(m1[0]) == id(riga_zero_m1)
m2 = [['f','g']]
incarta(m2, ['|'])
assert m2 == [['|f|','|g|']]
m3 = [['a'],
['b'],]
incarta(m3, ['?','|'])
assert m3 == [['?a?'],
['|b|']]
m3 = [['f','e','a','b'],
['a','c','g','f'],
['b','c','d','f']]
incarta(m3, ['/','|','!'])
from pprint import pprint
#pprint(m3, width=53)
assert m3 == [['/f/', '/e/', '/a/', '/b/'],
['|a|', '|c|', '|g|', '|f|'],
['!b!', '!c!', '!d!', '!f!']]
try:
incarta([['a']], ['/','!'])
raise Exception('Avrei dovuto fallire prima !')
except ValueError:
pass
Sfida - Cantiere pubblico
✪✪✪ Il sindaco di Tangentonia ha ordinato che venga costruita la sua nuova mega-villa con fondi pubblici. Per dirigere i lavori ha assunto come ingegnere capo il figlio neo-diplomato geometra: prevedibilmente, la casa risultante è un disastro… ci sono i mattoni dei piani, ma mancano le mura esterne, il tetto, le fondamenta e le mattonelle per ricoprire i piani:
[['f','e','a','b'],
['a','c','g','f'],
['b','c','d','f']]
Per rimediare alla situazione imbarazzante, il sindaco decide di assumere te, perchè nel curriculum che hai inviato alla pubblica amministrazione hai falsamente dichiarato di essere un ingegnere plurilaureato con vent’anni d’esperienza in costruzione di ville abusive.
Data una lista di mattonelle
come per es ['^','-','_','=']
, dovrai produrre una NUOVA casa così (le mura sono sempre '|'
):
[ [' ', '^', '^', '^', '^', ' '],
['|', 'f', 'e', 'a', 'b', '|'],
['|', '-', '-', '-', '-', '|'],
['|', 'a', 'c', 'g', 'f', '|'],
['|', '_', '_', '_', '_', '|'],
['|', 'b', 'c', 'd', 'f', '|'],
['|', '=', '=', '=', '=', '|']
]
Più formalmente, scrivi una funzione che:
Data una matrice
mat
come lista di liste di stringhenxm
e una lista di caratterimattonelle
din+1
elementi, RITORNA una NUOVA matrice ottenuta intervallando le righe dimat
con caratteri presi damattonelle
.
Ai lati delle righe metti sempre il carattare
'|'
eccetto per l’ultimo piano del tettoSe
mattonelle
è di lunghezza diversa dal numero di righe dimat + 1
, sollevaValueError
L’esercizio chiede solo di restituire una matrice. Volendo far qualcosa in più per stampare meglio, una volta ottenuta la matrice chiamando la funzione, prova a stampare qualcosa del genere (il sindaco ti ricompenserà generosamente, tanto non sono soldi suoi):
^^^^
|feab|
|----|
|acgf|
|____|
|bcdf|
|====|
[5]:
from pprint import pprint
def cantiere(mat, mattonelle):
raise Exception('TODO IMPLEMENT ME !')
m1 = [['a']]
assert cantiere(m1, ['^','=']) == [ [' ','^',' '],
['|','a','|'],
['|','=','|']]
assert m1 == [['a']]
m2 = [['f','g']]
assert cantiere(m2, ['^','=']) == [[' ', '^', '^', ' '],
['|', 'f', 'g', '|'],
['|', '=', '=', '|']]
m3 = [['a'],
['b'],]
assert cantiere(m3, ['^','-','=']) == [[' ', '^', ' '],
['|', 'a', '|'],
['|', '-', '|'],
['|', 'b', '|'],
['|', '=', '|']]
m4 = [['f','e','a','b'],
['a','c','g','f'],
['b','c','d','f']]
#pprint(cantiere(m4, ['^','-','-','=']))
#pprint(m3, width=53)
assert cantiere(m4, ['^','-','_','=']) == [[' ', '^', '^', '^', '^', ' '],
['|', 'f', 'e', 'a', 'b', '|'],
['|', '-', '-', '-', '-', '|'],
['|', 'a', 'c', 'g', 'f', '|'],
['|', '_', '_', '_', '_', '|'],
['|', 'b', 'c', 'd', 'f', '|'],
['|', '=', '=', '=', '=', '|']]
try:
cantiere([['a']], ['/','!','='])
raise Exception('Avrei dovuto fallire prima !')
except ValueError:
pass