[AVVISO] Homework 1 (opzionale)

andrea.sterbini (167380 points)
487 897 1724
asked Oct 17, 2019 in Avvisi by andrea.sterbini (167,380 points)
edited Nov 2, 2019 by andrea.sterbini

ATTENZIONE

  • eventuali correzioni verranno inserite qui
  • NOTA: il programma test_01.py DISATTIVA la funzione print, quindi non vedrete stampe. per riattivare le stampe cambiate le righe

    def do_test(self, S, m, expected):
        '''Implementazione del test
            - fimm: il file in cui reperire le stringhe
            - expected: la risposta attesa
            TIMEOUT: 1 secondi per ciascun test
        '''
        with    self.ignored_function('builtins.print'), \
                self.ignored_function('pprint.pprint'), \
                self.forbidden_function('builtins.input'), \
                self.timer(1):
            result   = program.es1(S,m)
        self.assertEqual(type(result),  int,     "il risultato prodotto deve essere un intero")
        self.assertEqual(result,        expected, "il valore restituito non e' corretto")
        return 1

in

    def do_test(self, S, m, expected):
        '''Implementazione del test
            - fimm: il file in cui reperire le stringhe
            - expected: la risposta attesa
            TIMEOUT: 1 secondi per ciascun test
        '''
        result   = program.es1(S,m)  # QUESTA RIGA DEV'ESSERE ALLINEATA ALLA SEGUENTE
        self.assertEqual(type(result),  int,     "il risultato prodotto deve essere un intero")
        self.assertEqual(result,        expected, "il valore restituito non e' corretto")
        return 1

Istruzioni

Per svolgere l'homework:

  • Installate le librerie necessarie
  • Scaricate il file HW1opz.zip e scompattatelo in una directory
    • Lo zip contiene
      • l'esercizio da svolgere, descritto all'inizio del file program01.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 HW1opz creata unzippando l'archivio ed editate 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
  • Per eseguire i test
    • aprite una finestra "Anaconda Prompt" e posizionatevi nella directory HW1opz ottenuta scompattando lo zip
    • eseguite il comando (test senza timeout)
      • pytest test_01.py -v -rA
    • oppure (test con timeout di 1 secondo per ciascun test e con una stampa dei tempi impiegati per eseguire ciascun test)
      • pytest test_01.py -v -rA --timeout 1 --durations 0
    • oppure (test con timeout di 1 secondo per ciascun test e stampa dei tempi spesi dal programma nelle 20 funzioni complessivamente più lente)
      • pytest test_01.py -v -rA --timeout 1 --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-line-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++

Consegna

Per la consegna dovrete consegnare solo il file program0X.py

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

Consegnando potete controllare come si posiziona il vostro programma nella graduatoria complessiva.

Scadenze

  • Questo homework non ha scadenza, non richiede il peer-assessment e non dà bonus.
5,671 views

8 Answers

Christian (15220 points)
2 4 77
answered Oct 17, 2019 by Christian (15,220 points)
reshown Oct 17, 2019 by Christian
Buonasera,

mi scuso se la domanda fosse banale... lo stato del programma nel tab results si aggiorna immediatamente una volta effettuato l'upload?

Grazie mille
fc-dev (16450 points)
12 20 34
commented Oct 17, 2019 by fc-dev (16,450 points)
No, ci vuole del tempo: devi aspettare che il tuo programma venga eseguito sulla macchina virtuale del professore
Christian (15220 points)
2 4 77
commented Oct 17, 2019 by Christian (15,220 points)

Perfetto, come sospettavo! Non capivo se avessi qualche errore nell'upload 

Grazie!

LorenzoChicca (1140 points)
4 6 18
commented Oct 23, 2019 by LorenzoChicca (1,140 points)
Sasera è molto lento...
andrea.sterbini (167380 points)
487 897 1724
commented Oct 24, 2019 by andrea.sterbini (167,380 points)
Ho restartato la VM
Pako (550 points)
0 0 4
answered Oct 17, 2019 by Pako (550 points)
Domanda stupida.
Per caso i commenti influiscono sull'intricatezza del codice?
DGreat (1210 points)
5 11 23
commented Oct 17, 2019 by DGreat (1,210 points)
No, poiché Python non interpreta quelle linee.

Paradossalmente potresti scrivere anche una funzione che stampa "Hello World" e come commento tutta la divina commedia, ma questo non comporterebbe codice più o meno intricato.
Tommaso Sgroi (12990 points)
6 11 91
commented Oct 22, 2019 by Tommaso Sgroi (12,990 points)
Il programma che calcola l'intricatezza (radon) guarda ogni blocco e fa un calcolo in base a quanti cicli e costrutti utilizzati.

I commenti non influiscono perché sono ignorati, come sono ignorati dall'interprete.

Se devi abbassare la complessità puoi o utilizzare meno cicli oppure spezzare la funzione con delle funzioni di appoggio.
AndreaGasparini (18730 points)
6 11 118
answered Oct 17, 2019 by AndreaGasparini (18,730 points)
È possibile utilizzare funzioni non ancora viste a lezione?
cristofer.valiante (1650 points)
3 8 20
commented Oct 18, 2019 by cristofer.valiante (1,650 points)
Credo di sì basta non violare le regole date con l'HW..
J
Jan Rogala (7260 points)
3 4 37
commented Oct 18, 2019 by Jan Rogala (7,260 points)
Volendo si ma di solito gli esercizi non richiedono, necessariamente, argomenti che magari non sono stati ancora trattati a lezione. Si può prendere il massimo anche utilizzando gli argomenti già trattati
Antares (7770 points)
5 6 41
commented Oct 20, 2019 by Antares (7,770 points)
Per questo homework non sono tecnicamente necessarie funzioni non ancora viste a lezione. Inoltre, lavorare con meno funzioni già create, ti aiuta a sviluppare il problem solving.
J
Jan Rogala (7260 points)
3 4 37
answered Oct 18, 2019 by Jan Rogala (7,260 points)
Ho una domanda. Nella pagina dei risultati generali dell'homework, nella sezione bonus ho visto che alcuni hanno o 2cc, o 2 time. Cosa vanno a significare questi bonus? Come si ottengono? Dato che è un homework opzionale, hanno un valore effettivo questi bonus?
AndreaGasparini (18730 points)
6 11 118
commented Oct 18, 2019 by AndreaGasparini (18,730 points)
In questo caso non hanno valore, ma come scritto nelle regole del corso vengono assegnati ai "migliori in classifica" per quanto riguarda complessità ciclomatica (cc) ed efficienza (time). Negli homework obbligatori saranno punti aggiuntivi da aggiungere al voto.
andrea.sterbini (167380 points)
487 897 1724
commented Oct 18, 2019 by andrea.sterbini (167,380 points)
Appunto. In questo HW inoltre non ho ancora controllato se viene assegnato al gruppo giusto, visto che per evitare stalli della VM ho cambiato gli script per eseguire il timing solo x chi passa tutti i test. In poche parole NON VI AFFEZIONATE AI BONUS CHE VEDETE PERCHÈ CI STO LAVORANDO.
andrea.sterbini (167380 points)
487 897 1724
commented Oct 18, 2019 by andrea.sterbini (167,380 points)
Inoltre mi sono accorto che su Travis-ci è disponibile la versione 3.7 di Python, che è la stessa che uso a lezione... Nel finesettimana l'attivo e rifaccio tutti i test. I tempi misurati potrebbero cambiare.
andrea.sterbini (167380 points)
487 897 1724
commented Oct 19, 2019 by andrea.sterbini (167,380 points)
Ho aggiornato la VM
M
Michele007 (340 points)
0 0 2
answered Oct 18, 2019 by Michele007 (340 points)

Il programma passa tutti i test con OK ma per efficienza ho questo messaggio:  Not timed because some test did not PASS due to some Error

andrea.sterbini (167380 points)
487 897 1724
commented Oct 19, 2019 by andrea.sterbini (167,380 points)
==Test==test_tanti_1 FAILED
a
a.digirolamo2 (380 points)
0 0 2
answered Oct 19, 2019 by a.digirolamo2 (380 points)

Buongiorno scusate la domanda (sicuramente banale), ma è la prima volta che effettuo un homework.

Ho effettuato il caricamento e nella sezione Course ho il seguente risultato:

Complessità ciclomatica 4
Test superati 0
Tempo di esecuzione 0 msec
Voto (provvisorio) 0

questo cosa vuole dire? il programma non ha funzionato? "Complessità ciclomatica"4 è buono o male?

Il test superati ha restituito 0 .. E' possibile visto che ho effettuato diversi test anche con stringhe più complesse?

grazie in anticipo

andrea.sterbini (167380 points)
487 897 1724
commented Oct 19, 2019 by andrea.sterbini (167,380 points)
edited Oct 19, 2019 by andrea.sterbini
non passi nessun test, il programma non risolve il problema (forse hai consegnato un vecchio file?)
Lorenzo Cristini (10830 points)
0 0 27
commented Oct 19, 2019 by Lorenzo Cristini (10,830 points)

Ciao,
Se il tuo programma funzionava su Spyder e ti da test 0 nella VM significa che:
- O sta svolgendo i test nella VM e per vederlo ci dovrebbe essere la scritta "Consegnato"

- O magari non ritorni il risultato nel codice ma bensì lo stampi con una print

Se non è uno di queste due cose non so come aiutarti, aspetta il prof

edit: come non detto

Tommaso Sgroi (12990 points)
6 11 91
commented Oct 19, 2019 by Tommaso Sgroi (12,990 points)
Hai controllato di aver scritto il tuo programma in program01.py?
a
a.digirolamo2 (380 points)
0 0 2
commented Oct 21, 2019 by a.digirolamo2 (380 points)
no no il file era quello corretto, ma in realtà ho capito che non riuscivo a passare dei test nel mio ambiente di sviluppo .. rileggendo bene le istruzioni ho capito che non avevo installato tutto.

Sto lavorando sulla soluzione appena pronta la invio
andrea.sterbini (167380 points)
487 897 1724
commented Oct 22, 2019 by andrea.sterbini (167,380 points)
Con i test sulla VM il tuo programma evoca uno strano INTERNALERROR che non sono riuscito a rimediare per cui non supera nessun test.
Spero che la tua nuova versione vada meglio. Questo errore è raro e dipende dal plugin pytest-timeout ma ancora non è stato corretto.
Vedo se mi invento qualcosa per superare l'errore sulla VM.
andrea.sterbini (167380 points)
487 897 1724
commented Oct 23, 2019 by andrea.sterbini (167,380 points)

Tana, hai un RecursionError ovvero hai fatto una funzione che chiaama se stessa tante volte finchè raggiunge il limite prefissato di Python.

E          RecursionError= maximum recursion depth exceeded while calling a Python object
Simone.A (3750 points)
13 16 26
answered Oct 21, 2019 by Simone.A (3,750 points)
Ciao a tutti,

Premetto che questo è il mio primo homework. Andando ad avviare il file "test_01" mi dice che sono stati passati 16 test e 0 falliti ma con 14 errori. Qualcuno può aiutarmi? Grazie in anticipo :D
E
Edward (25950 points)
2 4 172
commented Oct 21, 2019 by Edward (25,950 points)
Quindi teoricamente passi tutti i test, quali sono i messaggi di errore?
andrea.sterbini (167380 points)
487 897 1724
commented Oct 21, 2019 by andrea.sterbini (167,380 points)

Dovrebbe essere il primo homework per quasi tutti voi wink

Se consegni posso capire il problema

Tommaso Sgroi (12990 points)
6 11 91
commented Oct 21, 2019 by Tommaso Sgroi (12,990 points)
Devi vedere che dice il messaggio di errore, perché il test da fallito quando si esce fuori dal tempo prestabilito, che è deve essere inferiore a un secondo per ogni test
Auron (15880 points)
32 126 194
commented Oct 21, 2019 by Auron (15,880 points)
Forse un problema di Timeout?
DI solito se vicino ai test trovi la scritta "FAIL" è un problema di risultato errato (o non tornato correttamente), se invece trovi "ERROR" spesso significa che magari il risultato è anche giusto, ma ci mette più del dovuto.
Simone.A (3750 points)
13 16 26
commented Oct 21, 2019 by Simone.A (3,750 points)
Inizialmente, eran tutti errori FAIL, poi modificando il codice, sono risultati tutti ERROR. Il problema è che il programma impega 7 secondi ad effettuare tutto ;(
Simone.A (3750 points)
13 16 26
commented Oct 21, 2019 by Simone.A (3,750 points)
Professore le ho inviato il codice.

Su Spyder mi dice che supero 16 test ( e 0 fail) ma con 14 errori. Non capisco come procedere. Inoltre appena ricevo la sua risposta, modifico il codice poichè impega più di 1 secondo.
andrea.sterbini (167380 points)
487 897 1724
commented Oct 22, 2019 by andrea.sterbini (167,380 points)
Vedo che ci sono sia un IndexError che dei ValueError. Il primo perchè sbordi dalla lista, i secondi quando converti stringhe in interi.
plm (18850 points)
6 15 118
answered Oct 22, 2019 by plm (18,850 points)
Possiamo anche implementare soluzioni che utilizzano metodi risolutivi ancora non svolti a lezione, che faremo più avanti? Questa domanda vale più per gli homework "veri" e non per gli opzionali che sono semplicemente di allenamento da quanto ho capito.
Tommaso Sgroi (12990 points)
6 11 91
commented Oct 23, 2019 by Tommaso Sgroi (12,990 points)
Tu puoi utilizzare qualsiasi mezzo purchè si rientri nelle regole prestabilite, da quanto ho capito. Ad esempio se non devi usare determinate librerie nulla ti vieta di definire le stesse funzioni con i comportamenti analoghi ma implementate da te, come nulla ti vieta di usare metodi e argomenti ancora non fatti a lezione.
andrea.sterbini (167380 points)
487 897 1724
commented Oct 23, 2019 by andrea.sterbini (167,380 points)
Non vi azzardate a copiare le librerie di sistema.

In tal caso vi verrà annullato l'HW.