Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

[HW] Homework 4 di recupero (scade 5 giorni prima dell'esame)

andrea.sterbini (208020 points)
756 1270 2377
in HW4 by (208k points)
edited by

ATTENZIONE

  • eventuali correzioni verranno inserite qui, tenete d'occhio questa pagina
  • NOTA: Se trovate dei disallineamenti tra testo e definizioni/test FANNO FEDE I TEST.
  • NOTA: il programma test_01.py DISATTIVA la funzione print ed aggiunge alcuni controlli. Per disattivarli e usare print assegnate la variabile DEBUG=True in test_01.py

Istruzioni

Per svolgere l'homework:

  • Installate le librerie necessarie
  • Scaricate il file HW4rec.zip e scompattatelo in una directory
    • Lo zip contiene
      • l'esercizio da svolgere, descritto all'inizio del file program01.ita.py
        • l'esercizio consiste nel realizzare, se necessario definendo funzioni ausiliarie, la funzione descritta all'inizio del file, completandone il codice
      • altre librerie e file necessari ad eseguire i test sulla vostra macchina
  • Posizionatevi nella directory creata unzippando l'archivio ed:
    • rinominate il file program01.ita.py col nome program01.py
    • analizzate il problema spezzandolo in funzioni piccole e implementatelo editando il file program01.py  
  • ATTENZIONE: il programma NON DEVE eseguire nessun input() o print(), infatti riceve tutte le informazioni di cui ha bisogno tramite i parametri della funzione che dovete completare e torna il risultato con return.
  • ATTENZIONE: SONO VIETATE le variabili globali.
  • ATTENZIONE: SONO VIETATE tutte le altre librerie a parte quelle già importate nel testo.
  • ATTENZIONE: i vostri programmi NON DEVONO sfruttare eventuali periodicità o caratteristiche strutturali degli input, ma devono essere applicabili a qualsiasi input valido.
  • ATTENZIONE: NON LASCIATE ISTRUZIONI DI TEST NEL PROGRAMMA, A MENO CHE NON SIANO DOPO UNA RIGA
    • if __name__ == '__main__':
      • vostre istruzioni di test che in questo modo non vengono eseguite durante l'import del file che viene fatto dai test
  • Per eseguire i test
    • aprite una finestra "Anaconda Prompt" e posizionatevi nella directory ottenuta scompattando lo zip
    • eseguite il comando
      • pytest test_01.py -v -rA
    • oppure (test con una stampa dei tempi impiegati per eseguire ciascun test)
      • pytest test_01.py -v -rA --durations 0
    • oppure (test con stampa dei tempi spesi dal programma nelle 20 funzioni complessivamente più lente)
      • pytest test_01.py -v -rA --profile
    • Per far fermare i test al primo errore aggiungete l'opzione -x
    • Per chi usa Spyder:
      • è possibile eseguire i test direttamente da dentro Spyder installando il plugin spyder-unittest (ma senza timeout o parametri aggiuntivi)
      • è possibile ottenere i tempi spesi in ciascuna funzione direttamente da dentro Spyder installando il plugin spyder-profiler

NOTA: per aprire i file di testo in formato utf8 NON usate Notepad che non riconosce gli accapi Unix ('\n') ma usate Spyder o Notepad++

Scadenze

  • Questo homework scade 5 giorni prima della prova d'esame che volete sostenere (per darci il tempo di fare le verifiche di somiglianza e pubblicare gli ammessi).

Consegna

Per la consegna dovrete consegnare solo il file program01.py

La pagina di consegna è https://q2a.di.uniroma1.it/homeworks/delivery?homework=10

Consegnando potete controllare che voto potreste ottenere (compresi i test segreti) e come si posiziona il vostro programma nella graduatoria complessiva.

Potete consegnare più volte, vale l'ultima.

6 Answers

m
marcocastellani95 (870 points)
2 4 8
by (870 points)
Sera, Prof!

Sto scrivendo stampa_verbale() ed ho notato che se nel file scrivo nell'ordine (giusto, da richiesta) cognome-nome ogni cognome e nome di studenti e docenti, non passo nessun test, mentre se li inverto e faccio nome-cognome li passo tutti.

Ho controllato nel file generato eseguendo il prog, ed effettivamente quello che scrivo nel file corrisponde a quanto io stia pensando di fare col codice.

Poi ho dato un'occhiata ai test, ed effettivamente mi sembra che essi siano scritti con ogni nome nella forma nome-cognome
AL1990 (28120 points)
3 6 142
by (28.1k points)

Era già stato segnalato mi sembra, in questi casi fanno fede sempre i test.

  • NOTA: Se trovate dei disallineamenti tra testo e definizioni/test FANNO FEDE I TEST.
m
marcocastellani95 (870 points)
2 4 8
by (870 points)
Top, credo mi era sfuggito, allora
p
p.lofaro (1210 points)
4 12 20
by (1.2k points)
Ciao a tutti,

la parte che dice:

- media_docente(teach_code, dbsize), che riceve un identificatore
      di un docente e ritorna la media dei voti per gli esami
      sostenuti in tutti i corsi del docente.

l'ho implementata così: per ogni teach_code leggo il course_code e faccio la media. Alla fine faccio la media di tutti i corsi trovati. Giusto ?

Nei test ricevo questo errore:

FAILED test_01.py::Test::test_teacher_average_1___ta1_s_____003____small____24_64__0_5_ - AssertionError: 24.75 != 24.64 : The return value is incorrect
FAILED test_01.py::Test::test_teacher_average_2___ta1_m_____0023____medium____24_14__0_5_ - AssertionError: 24.21 != 24.14 : The return value is incorrect
FAILED test_01.py::Test::test_teacher_average_3___ta1_l_____00059____large____24_14__0_5_ - AssertionError: 24.12 != 24.14 : The return value is incorrect

non capisco dove sto sbagliando, anche perchè la funzione della media del corso me la da corretta.

Grazie

Saluti

Paolo Lofaro
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
La media delle medie non è la media di tutti i voti
p
p.lofaro (1210 points)
4 12 20
by (1.2k points)
Buongiorno,

Errore mio.

Tuttavia i numeri non mi tornano:

media_docente('000','small')

I corsi sono: ['EDLELTECCE0x47b75a', 'PPFLC0xde1fa7', 'MDPPLIL0x797bc3']
i voti di ogni esame sono: [25, 23, 26, 30, 29, 25, 29, 30, 18, 27, 31, 23, 18, 23, 25, 18, 31, 28, 28, 31, 29, 21, 23, 26, 31, 31, 18, 31, 22, 19, 27, 20, 18]
la somma dei voti è: 834
il totale degli esami è: 33
la media di tutti i voti è: 25.27

nel test viene 24,64 come è possibile?

Grazie

Paolo Lofaro
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
Perchè nei test il docente è lo '003' e non lo '000' ?
B
Bateo (240 points)
0 0 2
by (240 points)
Buonasera professore, stavo provando a testare il program01 però mi esce questo errore:
testlib.ForbiddenError: Opening file 'medium_esami.json' with mode='r' is forbidden!
In fase di lettura dei file, nello specifico col comando

with open(filename, encoding="utf8") as file:

L'errore quindi scatta all'interno della seguente funzione builtin:

args = ('medium_esami.json',), kargs = {'encoding': 'utf8'}, mode = 'r', filename = 'medium_esami.json', fn = '.txt'
m = 'w'

    def _check_open(*args, **kargs):

    ...........

    ..........

Come posso risolvere questo errore in lettura del file?
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
Attenzione al nome del file, che è in inglese. (medium_exams.json)
B
Bateo (240 points)
0 0 2
by (240 points)
Grazie mille professore ho risolto quasi tutto ormai, rimane solo una questione riguardo il test della funzione media_docente; aprendo il file di test vedo un parametro del codice corso che non compare nel file small_exams e quindi il test fallisce sempre, cosa devo fare?
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
perchè codice_corso? non dovrebbe essere un codice_docente?
m
matteo.piccinini (160 points)
0 0 1
by (160 points)
edited by

Buonasera prof, 

sto provando a caricare l'homework ma mi imbatto sempre negli stessi test falliti, nonostante io cambi delle cose, gliene allego qui un paio, si può trattare di un test fallito per timeout?

FAILED test_01.py==Test==test_print_exam_record_1___per1_s____447___small____test_per1_s_txt____18__0_5___test_per1_s_txt_____expfiles_per1_s_expit_txt____expfiles_per1_s_expen_txt___
FAILED test_01.py==Test==test_print_exam_record_2___per1_m____2824___medium____test_per1_m_txt____19__0_5___test_per1_m_txt_____expfiles_per1_m_expit_txt____expfiles_per1_m_expen_txt___
FAILED test_01.py==Test==test_print_exam_record_3___per1_l____4265___large____test_per1_l_txt____21__0_5___test_per1_l_txt_____expfiles_per1_l_expit_txt____expfiles_per1_l_expen_txt___


Aggiornamento: continuo a riprovare e in locale i risultati coincidono con i test, una volta caricati fallisco sempre gli stessi...
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)

L'errore è la riga che inizia con E

E   testlib.ForbiddenError= Opening file 'test_per1_s.txt' with mode='a' is forbidden!
Devi passare gli argomenti nell'ordine giusto e con modo w.
p
p.lofaro (1210 points)
4 12 20
by (1.2k points)

Buongiorno a tutti,

sto avendo problemi con la funzione "stampa_esami_sostenuti". Il testo richiedo che una riga abbia questo formato: "<course_name>\t<date>\t<grade>". Io ho impostato nel programma che alla fine di queste parole mette '\t' :

stampa_esami_sostenuti('1838026','small','esami.txt')
Esercitazioni Di Ingua E Linguistica Francese 3 - A [Ecriture Composee A-Z]\t 2017/04/12\t 26
Sistemi Neurali Lm\t 2019/04/12\t 24
Preparazione Prova Finale Lm 20 Cfu\t 2020/03/03\t 23
Chimica Organica\t 2020/12/02\t 22

 

però nei test ricevo l'errore:

FAILED test_01.py::Test::test_print_recorded_exams_1___pre1_s_____1838026____small____test_pre1_s_txt____4__0_5___test_pre1_s_txt_____expfiles_pre1_s_expit_txt____expfiles_pre1_s_expen_txt___ - AssertionError: Lists differ: ['Esa[131 chars]osee (A-Z)]\t2017/04/12\t26', 'Sistemi Neurali[269 chars]t22'] != ['Esa[131 chars]osee A-Z]\\t 2017/04/12\\t 26', 'Sistemi Neura[121 chars] 22']

come se mi aggiungesse un backslash. Qualcuno sà perchè ?

Grazie in anticipo

Paolo Lofaro

andrea.sterbini (208020 points)
756 1270 2377
by (208k points)

Veramente mi sembra che manchino dei caratteri (ad esempio le parentesi)

E   'Eser[27 chars]stica Francese 3 - A [Ecriture Composee (A-Z)]\t2017/04/12\t26'
E   'Eser[27 chars]stica Francese 3 - A [Ecriture Composee A-Z] 2017/04/12 26'
G
Giammo29 (510 points)
2 5 7
by (510 points)
Per le altre funzioni posso dire di non aver avuto problema, tranne top_students, nonostante io abbia controllato che il mio output sia uguale a quello dei test, l'ultimo non me lo passa.
p
p.lofaro (1210 points)
4 12 20
by (1.2k points)
Ciao,

di preciso cosa ti va in errore?

Paolo Lofaro
G
Giammo29 (510 points)
2 5 7
by (510 points)

Alla fine ho risolto: mi ero dimenticato di arrotondare la media blush