come posso migliorare il mio codice?

Light (5130 points)
23 167 229
asked Oct 15, 2020 in HW1 opzionale by Light (5,130 points)
closed Oct 15, 2020 by Light
salve, ho scritto una funzione che mi fa superare 15 test su 16 e quando ho consegnato sul sito il messaggio di errore è :wallclock_time = 1.005 def __exit__(self, *args)= wallclock_time = round(time.time() - self.start, 3) if wallclock_time > self.timeout= > raise TimeoutError(f'Timeout! ({wallclock_time} > {self.timeout})') E testlib.TimeoutError= Timeout! (1.005 > 1) testlib.py=21= TimeoutError "; sicuro questo è un errore di timeout ma per 0,005 è possibile? come posso fare per migliorare il mio codice anche di pochissimo (se avete consigli anche senza dire come ho implementato il codice ma generali per migliorare ne sarei grato)

EDIT: grazie a tutti per i consigli! proverò cosi
412 views
closed with note: ho ricevuto consigli utili

5 Answers

dolcetto_gommoso (2790 points)
3 6 18
answered Oct 15, 2020 by dolcetto_gommoso (2,790 points)
cercare di scrivere un codice semplice e evita di fare calcoli inutili, ad esempio se fai tanti calcoli simili crea una variabile con quest'ultimo all'interno... evita di usare troppi loop, quelli di solito rendono il programma più lento.... puoi inoltre cercare delle funzioni già esistenti che ti possano migliorare il codice, senza importare altre librerie ovvio :)

spero ti sia stato utile
Rametto (4910 points)
3 4 25
answered Oct 15, 2020 by Rametto (4,910 points)
prova a mettere nelle variabili i compiti che usi più spesso, come magari la lunghezza della lista, e prova anche a convertire in int senza usare il for
giordano_sannino (13650 points)
7 16 81
answered Oct 15, 2020 by giordano_sannino (13,650 points)

Io per ridurre i tempi di esecuzione di un minino consiglio(quello che ho fatto io alla fine) di evitare i cicli for dove puoi, e se devi calcolarti un qualcosa che poi devi richiamare più volte(penso tutti abbiamo questa esigenza nel problema, non penso posso dire di più sull' HW), meglio calcolarlo una volta, metterlo in una variabile e riusarlo richiamando la variabile(a me ha risparmiato circa un decimo).

Attenzione però: Se sul tuo pc superi di poco il test non è detto che lo superi sulla macchina del prof! (soprattutto se il tuo pc è molto potente). 

Marco Freddi (1420 points)
1 2 16
answered Oct 15, 2020 by Marco Freddi (1,420 points)
1,005 non è il tempo di esecuzione totale, 0,005 è il tempo che ci mette a sospendere il test, dato che è stato superato 1 secondo (massimo tempo previsto per ogni test).
Prova la funzione time.time() (da importare) per calcolare il tempo di esecuzione del tuo programma (il time.time() della fine - il time.time() dell'inizio).
Per migliorare comunque prova a non ripetere casting o ricalcolo di informazioni che potresti immagazzinare precedentemente in una variabile.
andrea.sterbini (168150 points)
488 897 1728
commented Oct 16, 2020 by andrea.sterbini (168,150 points)
Non avrei saputo dirlo meglio :-)
Loriv3 (7960 points)
8 20 84
answered Oct 15, 2020 by Loriv3 (7,960 points)
Come hanno già detto quei millisecondi in più sono dovuti al tempo di sospensione del test, però devi soprattutto cercare di migliorare il tempo generale di un bel po'perchè così puoi stare tranquillo sul fatto che giri bene anche sulla VM, ti consiglierei di fare un controllo sui cicli for dato che questi occupano parecchio del tempo a disposizione se riuscissi a toglierne qualcuno ridurresti di parecchio il tempo. Se hai usato il minimo di cicli disponibili puoi fare un controllo più accurato su singole variabili e casting in modo da ottimizzare meglio il tuo codice