Python Lezione 11 Giugno 2008

Da GolemWiki.
Versione del 26 set 2012 alle 16:08 di Giulio (discussione | contributi) (Aggiunta alla categoria "Howto")

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