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.

Utilizzo della libreria time

Gabriele97 (2010 points)
12 29 38
in Programmare in Python by (2.0k points)
Buongiorno a tutti;
ho davanti due programmi che hanno esattamente la stessa finalità, tuttavia uno è palesemente più "complesso" in termini di esecuzione, ho dichiarato più variabili, inserito più cicli di quelli che effettivamente servivano; il mio scopo è quello di verificare i tempi di esecuzione di entrambi i programmi, mi sono documentato, ma non riesco a capire come usare la libreria time per fare quanto scritto, so che il processo va ripetuto un certo numero di volte per ottenere un risultato quanto più fedele possibile. Quello che vorrei sapere è  proprio la "sintassi/struttura di un programma" da utilizzare per calcolare i tenpi di esecuzione di un processo!
Qualcuno può aiutarmi?
1.4k views
closed

3 Answers

Best answer
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
selected by
Ciao!
Come tu ben sai non è possibile postare chunk di codice per spiegarlo, tuttavia ti darò alcuni consigli per capirlo tu da solo.
Comincimo! Per poter controllare quanto tempo effettivamente impiega il tuo script devi ricorrere alla libreria time dove puoi trovare moltissimi strumenti relativi a diverse esigenze.  Tra questi ti segnalo .time() e .timeit() che funzionano in maniera un po' diversa. La prima infatti ti restituisce un numero float che ti indica in secondi il tempo trascorso dalla cosiddetta epoca , ovvero dal 1 Gennaio 1970 . Per cronometrare il tempo impiegato dal tuo programma dovrai utilizzare un trucchetto che consiste nel inizializzare una variabile a con tale funzione, inizializzarne poi alla fine un'altra che ti farà da sottraendo alla variabile b.
Tuttavia la più comoda e precisa è sicuramente time.timeit(), al cui interno dovrai inserire il blocco di codice da "cronometrare".
Ti chiedo scusa per gli innumerevoli giri di parole per descriverti i comportamenti dei due.
Ti linko la relativa documentazione per maggiori dettagli:

https://docs.python.org/2/library/time.html

https://docs.python.org/2/library/timeit.html

Sperando di esserti stato d'aiuto
Ti auguro una buona giornata

Leonardo Emili
Gabriele97 (2010 points)
12 29 38
by (2.0k points)
Grazie mille per la spiegazione, oggi pomeriggio a casa ci riproverò,  in caso di ulteriori dubbi richiedo qui!!
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
Certo ;)
Felice di esserti stato d'aiuto :)
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Ciao Gabriele97!

La libreria time è davvero immensa!
Non serve solo a calcolare il trascorrere del tempo da una data, ma può essere benissimo usato anche per calcolare il tempo in base ai fusi orari, per poter formattare il tempo in modo che assuma un formato leggibile dall'uomo e che ti dica il numero di secondi, minuti, ore, giorni, mesi ed anni.

Quindi tale libreria, oltre a poter restituire il tempo in secondi dalla data cardine, ovvero 1 gennaio 1970, ti permette anche di lavorare con questi secondi per migliorarne la visualizzazione.

Ora entro nel dettaglio.
La libreria Time presenta una serie di funzioni che saranno utili per manipolare data e tempo e, tra tutte le funzioni che contiene tale libreria, ti riporto le principali:
- Una delle più importanti ed usate funzioni è time(), essa restituisce il numero di secondi trascorsi dal 1 gennaio 1970 sotto forma di valore a virgola mobile e quindi avrai un numero come: 0.85885158. Ovviamente tale formato non è molto leggibile, allora ti consiglio la prossima funzione;
- La funzione ctime() è molto utile per questioni di leggibilità, infatti essa restituisce il tempo trascorso dal 1 gennaio 1970 in sottoforma di giorno della settimana, mese, giorno, ore, minuti e secondi e anno. Ecco un esempio della sua formattazione: Mon Jul 13 10:20:12 2017;
- La funzione clock(), molto utile nel caso in cui tu voglia controllare le prestazioni e l'uso dell'hardware da parte del tuo programma! Infatti i valori ritornati da clock() sono spesso usati per controllare prestazioni, per fasi di benchmarcking ecc;
- Tutte queste funzioni per determinare il tempo corrente ovviamente dipendono dal fuso orario impostato (di default). Quindi ti potrà essere utile modificarlo nel caso in cui tu voglia creare programmi legati a diversi paesi! Ricorda che la modifica non comporta il cambiamento del tempo, ma solo la diversa rappresentazione di esso.
La funzione in questione è tzset(), che ti permette di specificare dettagliatamente il fuso orario.

Infine ricorda che per calcolare il tempo trascorso devi avere una variabile che contiene il tempo d'inizio ed una alla fine che conterrà il tempo finale, cosicché tempo finale - tempo d'inizio ti darà il tempo trascorso dall'esecuzione del tuo programma o pezzo di codice.

Spero di averti aiutato!
Visto che ho familiarità con tale libreria, ho preferito entrare nel dettaglio delle principali funzioni adoperate. Quindi spero che queste informazioni, molto più dettagliate rispetto alle altre risposte, ti possano aiutare!

Buona giornata.
- Francesco Pio Scognamiglio
split (8700 points)
21 59 79
by (8.7k points)
quoto la risposta migliore e aggiungo però che il professore mercoledì (non sterbini, un altro di cui non ricordo il nome) in laboratorio ci ha detto che funzioni come time e simili sono influenzate da un certo "rumore" (non meglio specificato da lui) quindi si è raccomandato di fare questo tipo di test più volte e di mediare poi i valori per cercare di ottenere stime più attendibili.
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Intendi il professor Monti? (professore di Fondamenti di Programmazione del secondo canale)
split (8700 points)
21 59 79
by (8.7k points)
no alla fine ho controllato, credo fosse spognardi