Differenze tra le versioni di "Python Lezione 11 Giugno 2008"
(→while) |
m (info prontuario python3) |
||
(8 versioni intermedie di 4 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
+ | {{Note | ||
+ | |type=info | ||
+ | |text=La lezione fa riferimento a Python2! Dai un'occhiata anche al [[Pillole_Python | prontuario]] Python3 | ||
+ | |||
+ | La versione 2 sarà dichiarata deprecata a gennaio 2020. | ||
+ | }} | ||
+ | |||
QUESTI APPUNTI SONO UNA BOZZA IN ATTESA DI CORREZIONE E, PER QUESTO, NON ATTENDIBILI. | QUESTI APPUNTI SONO UNA BOZZA IN ATTESA DI CORREZIONE E, PER QUESTO, NON ATTENDIBILI. | ||
Riga 12: | Riga 19: | ||
while a < 10: | while a < 10: | ||
print a | print a | ||
− | a = a + 1 | + | a = a + 1 #oppure si può scrivere a += 1 (mi sembra ma verifico pu tardi su "IMPARARE PYTHON" ;-) ) |
che è del tutto equivalente a | che è del tutto equivalente a | ||
Riga 25: | Riga 32: | ||
che ha come effetto quello del programma ''yes'' dei sistemi *nix, ovvero stampa 'y' finchè non viene interrotto | che ha come effetto quello del programma ''yes'' dei sistemi *nix, ovvero stampa 'y' finchè non viene interrotto | ||
− | == | + | == Le funzioni == |
quando noi abbiamo fatto il [[http://golem.linux.it/index.php/Lezione_4_Giugno#ESEMPIO_DELLA_SERATA: programma per calcolare le potenze]], abbiamo scritto diverse righe di codice. | quando noi abbiamo fatto il [[http://golem.linux.it/index.php/Lezione_4_Giugno#ESEMPIO_DELLA_SERATA: programma per calcolare le potenze]], abbiamo scritto diverse righe di codice. | ||
− | per | + | Alcune di queste erano per recuperare e controllare l'input dell'utente, altre proprio per calcolare la potenza del numero. |
− | La funzione di definisce ''def''. | + | Se nel corso del nostro programma ci servisse ripetere il calcolo della potenza base**esponente (facendo finta che non ci sia l'operatore ** che fa esattamente quello che vogliamo) potremmo |
+ | semplicemente fare copia-incolla di quelle righe ogni volta che ci servono. Poi ci accorgiamo che c'è un errore, che abbiamo quindi ripetuto n volte. E dobbiamo correggere n volte. | ||
+ | Se avessimo creato una funzione, invece, ci sarebbe una sola definizione e n chiamate: una volta trovato l'errore basta correggerlo una volta sola. | ||
+ | |||
+ | La funzione di definisce usando ''def''. | ||
Per crere una funzione dobbiamo scrivere: def -il nome della funzione- (-variabile1-,-variabile2-) : | Per crere una funzione dobbiamo scrivere: def -il nome della funzione- (-variabile1-,-variabile2-) : | ||
es. | es. | ||
+ | |||
def potenza (base,esponente): | def potenza (base,esponente): | ||
− | result | + | result = 1 |
− | for | + | for i in xrange(esponente): |
result=result*base | result=result*base | ||
return result | return result | ||
− | + | return "ritorna" al chiamante il contenuto della variabile result. | |
− | potenza ( | + | |
− | + | quindi il nostro programma diviene | |
+ | |||
+ | def potenza(base, esponente): | ||
+ | result=1 | ||
+ | for i in xrange(esponente): | ||
+ | result = result * base | ||
+ | return result | ||
+ | |||
+ | base= raw_input (“inserisce la base:”) | ||
+ | esponente=raw_input ('inserisci l\' esponente') | ||
− | + | base=int(base) | |
− | + | result=int(result) | |
− | + | print potenza(base, esponente) | |
− | def potenza ( | + | |
− | + | Vediamo come, se si omette anche uno o entrambi i parametri, viene generata una eccezione di tipo TypeError: | |
− | + | ||
− | + | >>> potenza() | |
− | + | Traceback (most recent call last): | |
+ | File "<stdin>", line 1, in <module> | ||
+ | TypeError: potenza() takes exactly 2 arguments (0 given) | ||
+ | |||
+ | >>> potenza(2) | ||
+ | Traceback (most recent call last): | ||
+ | File "<stdin>", line 1, in <module> | ||
+ | TypeError: potenza() takes exactly 2 arguments (1 given) | ||
+ | |||
+ | >>> potenza (2,8) | ||
+ | 256 | ||
+ | >>> | ||
+ | |||
+ | Se si desiderasse avere il comportamento del tipo "se manca uno dei due parametri allora si intende che la base è 2 e il parametro presente è l'esponente", | ||
+ | potrei usare i paramatri di default: | ||
+ | |||
+ | def potenza(esponente, base=2): | ||
+ | result=1 | ||
+ | for i in xrange(esponente): | ||
+ | result = result * base | ||
+ | return result | ||
+ | |||
+ | quindi a questo punto | ||
+ | >>> potenza(8) | ||
+ | 256 | ||
+ | >>> | ||
+ | |||
+ | Da notare come i parametri di default devono necessariamente stare '''dopo''' i parametri che non hanno il valore di default. | ||
+ | |||
+ | Potrei anche mettere entrambi i paramentri di default | ||
+ | |||
+ | def potenza(base=2, esponente=1): | ||
+ | result=1 | ||
+ | for i in xrange(esponente): | ||
+ | result = result * base | ||
+ | return result | ||
− | + | In questo caso la chiamata | |
− | + | >>> potenza() | |
− | + | 2 | |
− | + | non genera l'eccezione perchè, avendo specificato per entrambi un valore di default l'interprete esegue 2**1 = 2 | |
− | + | Quando effettuo chiamate di funzione posso usare la keyword per rendere più chiaro il mio programma: | |
− | |||
− | |||
− | |||
− | + | >>> potenza(base=2, esponente=8) | |
− | potenza(8 | + | 256 |
− | |||
− | + | In questo modo non mi devo ricordare l'ordine in cui sono stati definiti i parametri, e, rileggendo dopo mesi o anni il pezzo di codice, questo sarà sicuramente più chiaro. | |
+ | Certe volte, per certi moduli, l'utilizzo delle keyword è indispensabile. | ||
− | == | + | == Moduli e import == |
ammetto che qui mi sono persa. | ammetto che qui mi sono persa. | ||
Riga 80: | Riga 133: | ||
Abbiamo fatto un esempio con un file chiamato python.tmp.py, | Abbiamo fatto un esempio con un file chiamato python.tmp.py, | ||
abbiamo detto come fare ad importarlo e abbiamo fatto un esempio pratico che ci faceva capire che, poichè il file era importato, non esguiva il main.Purtroppo mi sono persa l'esempio. | abbiamo detto come fare ad importarlo e abbiamo fatto un esempio pratico che ci faceva capire che, poichè il file era importato, non esguiva il main.Purtroppo mi sono persa l'esempio. | ||
− | |||
== MODULI GANZI == | == MODULI GANZI == | ||
Riga 103: | Riga 155: | ||
for elem in reversed(a): | for elem in reversed(a): | ||
print elem | print elem | ||
+ | |||
+ | [[Category:Corsi]] |
Versione attuale delle 11:46, 9 mag 2019
La lezione fa riferimento a Python2! Dai un'occhiata anche al prontuario Python3
La versione 2 sarà dichiarata deprecata a gennaio 2020.
QUESTI APPUNTI SONO UNA BOZZA IN ATTESA DI CORREZIONE E, PER QUESTO, NON ATTENDIBILI.
while
Simile al for, si usa per effettuare un ciclo di cui non sappiamo la lunghezza esatta, ovvero si cicla finché la condizione specificata non risulta vera. Torna utile quando vogliamo fare cicli infiniti, che con il for non possiamo fare in maniera "pulita" Può essere usato (a discapito della chiarezza) come un ciclo for: ad esempio, se volessimo ciclare 10 volte possiamo scrivere
a = 0 while a < 10: print a a = a + 1 #oppure si può scrivere a += 1 (mi sembra ma verifico pu tardi su "IMPARARE PYTHON" ;-) )
che è del tutto equivalente a
for a in xrange(10): print a
Altrimenti, per ciclare all'infinito
while True: print "y"
che ha come effetto quello del programma yes dei sistemi *nix, ovvero stampa 'y' finchè non viene interrotto
Le funzioni
quando noi abbiamo fatto il [programma per calcolare le potenze], abbiamo scritto diverse righe di codice. Alcune di queste erano per recuperare e controllare l'input dell'utente, altre proprio per calcolare la potenza del numero. Se nel corso del nostro programma ci servisse ripetere il calcolo della potenza base**esponente (facendo finta che non ci sia l'operatore ** che fa esattamente quello che vogliamo) potremmo semplicemente fare copia-incolla di quelle righe ogni volta che ci servono. Poi ci accorgiamo che c'è un errore, che abbiamo quindi ripetuto n volte. E dobbiamo correggere n volte. Se avessimo creato una funzione, invece, ci sarebbe una sola definizione e n chiamate: una volta trovato l'errore basta correggerlo una volta sola.
La funzione di definisce usando def. Per crere una funzione dobbiamo scrivere: def -il nome della funzione- (-variabile1-,-variabile2-) : es.
def potenza (base,esponente): result = 1 for i in xrange(esponente): result=result*base return result
return "ritorna" al chiamante il contenuto della variabile result.
quindi il nostro programma diviene
def potenza(base, esponente): result=1 for i in xrange(esponente): result = result * base return result
base= raw_input (“inserisce la base:”) esponente=raw_input ('inserisci l\' esponente')
base=int(base) result=int(result)
print potenza(base, esponente)
Vediamo come, se si omette anche uno o entrambi i parametri, viene generata una eccezione di tipo TypeError:
>>> potenza() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: potenza() takes exactly 2 arguments (0 given)
>>> potenza(2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: potenza() takes exactly 2 arguments (1 given)
>>> potenza (2,8) 256 >>>
Se si desiderasse avere il comportamento del tipo "se manca uno dei due parametri allora si intende che la base è 2 e il parametro presente è l'esponente", potrei usare i paramatri di default:
def potenza(esponente, base=2): result=1 for i in xrange(esponente): result = result * base return result
quindi a questo punto
>>> potenza(8) 256 >>>
Da notare come i parametri di default devono necessariamente stare dopo i parametri che non hanno il valore di default.
Potrei anche mettere entrambi i paramentri di default
def potenza(base=2, esponente=1): result=1 for i in xrange(esponente): result = result * base return result
In questo caso la chiamata
>>> potenza() 2
non genera l'eccezione perchè, avendo specificato per entrambi un valore di default l'interprete esegue 2**1 = 2
Quando effettuo chiamate di funzione posso usare la keyword per rendere più chiaro il mio programma:
>>> potenza(base=2, esponente=8) 256
In questo modo non mi devo ricordare l'ordine in cui sono stati definiti i parametri, e, rileggendo dopo mesi o anni il pezzo di codice, questo sarà sicuramente più chiaro. Certe volte, per certi moduli, l'utilizzo delle keyword è indispensabile.
Moduli e import
ammetto che qui mi sono persa.
tutto è nato dalla domanda di raffaele:Quando creiamo il file, ecc....le variabili che validità hanno?
abbiamo parlato del main, che non viene esguito se il file viene importato. Abbiamo fatto degli esempi che io non ho avuto il tempo di copiare.
Abbiamo anche parlato di dove il sistema va a cercare un file, del path, ecc... Abbiamo fatto un esempio con un file chiamato python.tmp.py, abbiamo detto come fare ad importarlo e abbiamo fatto un esempio pratico che ci faceva capire che, poichè il file era importato, non esguiva il main.Purtroppo mi sono persa l'esempio.
MODULI GANZI
abbiamo parlato di alcuni moduli con cui fare cose carine, mi sono persa la maggior parte degli esempi, ma metterò l'elenco dei moduli: os walk mkdir
SOTTODIRECTORY
qui ero in stato comatoso.Mi sono veramente eclissata.
ESERCIZIO DELLA SERATA
Funzione che rivolta le stringhe. abbiamo fatto vari tentativi ma poi ci siamo accorti che esiste la funzione reversed
- mi sono persa la parte prima*
reversed(a) for elem in reversed(a): print elem