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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

[HW] Homework 2 di recupero (scade 5 gg prima dell'esame)

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

ATTENZIONE

  • eventuali correzioni verranno inserite qui, tenete d'occhio questa pagina
  • 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 HW2rec.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=9

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.

1 Answer

g
giulia_dnt (450 points)
2 4 7
by (450 points)
Sto completando l'implementazione del programma, replicando i test uno per volta, ma sto notando che qualcosa non va con il risultato del saldo finale del secondo account. Per entrambi i primi due test, riesco a ottenere i valori expected per i saldi di acn1 e acn3 e degli account degli intermediari, anche i debiti sono corretti, ma il saldo finale di secondo acn2 mi risulta più alto dell'expected.

Ad esempio nel primo test in test01.py:

il saldo iniziale di acn2 è 1000,

nella seconda transazione acn2 riceve 800 - saldo 1800

nella terza transazione paga 400 + commissione (8%) - saldo 1368

nella quarta transazione riceve 1800 - saldo 3168

il valore finale expected è però 568

Cosa non sto considerando?
f
ftaiuti (520 points)
0 0 1
by (520 points)
Buongiorno, non so se hai già risolto.

Dal tuo esempio, stai tenendo conto se il mittente ha fondi sufficienti per completare la transazione?
C
Carda (360 points)
0 1 6
by (360 points)
Controlla bene l'aggiornamento dei balances. Per darti un aiuto, prendi carta e penna, svolgi  il tuo codice su carta, con gli esempi presenti nella descrizione.
g
giulia_dnt (450 points)
2 4 7
by (450 points)
Grazie, avevo avuto risposta analoga dal professore ed ero riuscita a risolvere, il problema era proprio il mancato aggiornamento del balance sull'account creditore; ora devo trovare cosa fa fallire i test con 100+ transazioni.