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

Do you need help?

[AVVISI] Software da installare

andrea.sterbini (207920 points)
750 1267 2373
in Avvisi by (208k points)
edited by

Distribuzione di Python usata nel corso: Anaconda

Scaricabile da www.anaconda.com/download e che contiene:

  • Python 3.8 o 3.9 (ma non usate l'operatore := del 3.9 perchè i test vengono eseguiti su 3.8)
  • un sacco di librerie standard e/o utili
  • l'ambiente di sviluppo Spyder che usiamo a lezione e negli esami (ma a casa potete usare PyCharm o altri a piacimento)

Per maggiori informazioni su come installarlo vedete https://docs.anaconda.com/anaconda/install

NOTA: installando Anaconda per Windows scegliete l'opzione "Only for me"

Librerie necessarie/utili per il corso

Una volta installato Anaconda potete/dovete installare queste librerie aggiuntive

(notice that spyder-line-profiler and spyder-unittest are not yet compatible with Spyder 5. Perhaps it's better to stick to version 4)

Libreria A che serve Istallazione in Anaconda Prompt Come si usa
ddt Eseguire test con dati presi da file conda install -c conda-forge ddt Viene importata dai test
pytest-timeout Applicare un timeout a ciascun test conda install pytest-timeout aggiunge il parametro --timeout=<secondi> al comando pytest
stopit applicare il timeout solo all'esecuzione conda install -c conda-forge stopit viene importata dai test
pytest-profiling Esaminare i tempi di esecuzione delle diverse parti del programma conda install -c conda-forge pytest-profiling aggiunge il parametro --profile al comando pytest
Spyder Ambiente di sviluppo (editor+debugger) conda install spyder
spyder-unittest Lanciare i test da dentro Spyder conda install -c conda-forge spyder-unittest aggiunge un tab in Spyder per lanciare i test (scegliete pytest e la directory)
spyder-line-profiler Esaminare i tempi di esecuzione direttamente dentro Spyder conda install -c conda-forge spyder-line-profiler aggiunge in Spyder una voce di menu per lanciare il programma e profilarne i tempi di esecuzione (vedi https://q2a.di.uniroma1.it/16914)
radon Calcolare l'intricatezza del codice
(complessità ciclomatica massima)
conda install -c conda-forge radon radon cc -a -s --show-closures program.py
Notepad è da buttare, non lo usate non mostra i '\n' NON LO USATE
Notepad++ Editor di testo https://notepad-plus-plus.org
Wordpad OK
Beyond Compare Utilissimo per confrontare file di testo ed immagini https://www.scootersoftware.com/download.php

Per aggiornare tutte le librerie installate usate il comando (da lanciare dentro la finestra che si apre con "Anaconda Prompt")

  • conda update --all

Comandi vari

I test sono i metodi contenuti nel file test.py che hanno il nome che inizia con 'test' e vengono automaticamente eseguiti da pytest.

Per eseguire i test senza timeout dovete editare il file test.py e settare la variabile DEBUG=True

  • pytest test.py

Per eseguire uno specifico test invece che tutti

  • pytest -v text.py -k <parte del nome del test>

Esempio: pytest test.py -k 2_valori -v

Per eseguire i test elencando gli N test più lenti

  • pytest -v test.py --durations N

Per calcolare l'intricatezza (complessità ciclomatica massima) del codice

  • radon cc -a -s --show-closures program.py

Per calcolare il tempo di esecuzione complessivo del programma facendo la media su 3 run da 5 test

  • python -u -m timeit -v -v -v -v -n 5  -r 3  -s 'from test import Test' 'Test.main()'

Per esaminare nel dettaglio i tempi di esecuzione del vostro programma per vedere quale parte è più lenta (se avete installato pytest-profiling)

  • pytest -rA -v --profile test.py

NOTA: nei log dei test che produco per Q2A ho modificato leggermente l'output del plugin pytest-profiling in modo da elencare le 20 funzioni in cui i test hanno speso più tempo.
Per ottenere lo stesso output potete modificare il file .../Anaconda/lib/python3.8/site-packages/pytest_profiling.py in modo che la riga 64 sia

pstats.Stats(self.combined, stream=terminalreporter).strip_dirs().sort_stats('tottime').print_stats(20)

invece che

pstats.Stats(self.combined, stream=terminalreporter).strip_dirs().sort_stats('cumulative').print_stats(20)

Snakeviz

Per esaminare in modo interattivo il tempo speso nelle diverse funzioni potete usare il profiler e snakeviz:

  • installate snakeviz (visualizzatore di file .prof): conda install snakeviz
  • eseguite il programma col profiler: pytest --profile test_01.py
  • visualizzate i tempi di esecuzione con snakeviz: snakeviz prof/combined.prof
  • vi si apre il browser con una visualizzazione che vi permette di capire quanto tempo è speso nelle diverse parti
  • cercate la funzione da voi implementata (in genere si chiama es1) e cliccate sulla sua riga, la visualizzazione si focalizzerà sulla vostra soluzione

Usare il modulo turtle in windows: vedete https://q2a.di.uniroma1.it/16861

Python per Android

Scegliete la versione 3 di Python (la versione 2 è ormai obsoleta)

5.3k views

1 Answer

p
pompei.1906902 (1020 points)
6 11 17
by (1.0k points)
radon cc -a -s --show-closures program01.py non lo esegue, ho tutto aggiornato, come posso procedere? (ovviamente mi dirigo sulla cartella corretta)
l
lucapalma (7140 points)
2 2 21
by (7.1k points)
Naviga con il cmd nella cartella dove è presente lo script radon, ad esempio nel mio caso si trova in  ...AppData\Roaming\Python\Python39\Scripts, se esegui il comando dovrebbe funzionare. Chiaramente invece di program01.py devi inserire tutto il percorso.
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Strano, se usi l'Anaconda prompt lo script dovrebbe essere nel path