next up previous contents
Next: Funzioni, subroutines Up: Introduzione Previous: Eseguire PYTHON   Indice

Costanti, variabili, flusso di un algoritmo

Prendiamo come esempio iniziale il calcolo dell'area di un triangolo la cui base è 4 e l'altezza è 3. È a tutti noto che in questo caso la formula cercata e` 4*3/2. Un semplice programma Python (usato da calcolatrice è quindi

>>> print 4*3/2 # stampa il risultato
6
il cui ovvio risultato è 6. Possiamo notare che quando utilizziamo il simbolo # tutto ciò che segue fino al termine della riga viene ignorato da Python. Questo permette di introdurre commenti che possono aumentare la leggibilità del nostro codice, e che è ottima norma usare con profusione! Possiamo utilizzare l'ambiente come calcolatrice, utilizzando addizione +, sottrazione -, moltiplicazione * e divisione /, anche se bisogna che facciamo attenzione al tipo di dati che stiamo utilizzando. Nell'esempio precedente abbiamo usato numeri interi, per cui se la base e l'altezza sono entrambe 1 abbiamo
>>> print 1*1/2
0
che non è ciò che probabilmente ci aspettavamo. Essendo l'area un numero reale, dovremmo utilizzare numeri reali, oppure convertirli utilizzando espicitamente il termine float (floating point = numeri con la virgola). Da cui sono equivalenti le seguenti forme
>>> print float(1)*1/2
0.5
>>> print 1*1/float(2)
0.5
>>> print 1*1/2.0
0.5
>>> print 1.0*1/2
0.5
ma non
>>> print float(1*1/2)
0.0
in quanto la conversione a numero float è stata fatta dopo il calcolo.

Adesso che abbiamo fatto un po' di confusione, cerchiamo di riordinare le idee. In python ci sono quattro tipi numerici distinti definiti:

  1. interi semplici,
  2. interi long,
  3. numeri in virgola mobile (detti anche float o reali),
  4. numeri complessi.
In aggiunta, i Booleani sono un sottotipo di interi semplici. Infatti in Python come in altri linguaggi 1 è vero e 0 è falso. Gli interi semplici (chiamati anche solo interi) sono implementati usando 32 bit di precisione (i long del C). Gli interi long hanno una precisione illimitata e hanno il suffisso "L". I numeri in virgola mobile sono dipendenti dal tipo di macchina su cui si lavora.

In Python esistono già definiti i numeri complessi, che come noto possiedono una parte reale ed una parte immaginaria, ciascuna simile ad un numero in virgola mobile. Per estrarre queste parti da un numero complesso z, si usa z.real e z.imag.

Python supporta pienamente gli aritmetici misti: quando un operatore binario aritmetico ha operandi di differente tipo numerico, l'operando con il tipo ``narrower'' (con meno possibilità) è convertito a quello dell'altro, e l'ordine è il seguente intero semplice $\rightarrow$ intero long $\rightarrow$ virgola mobile $\rightarrow$ complesso. Le funzioni (costruttori) int(), long(), float() e complex() possono essere utilizzate per produrre numeri di un tipo specifico, o trasformarli in un tipospecifico.

Di particolare importanza è anche la priorità degli operatori, ossia l'ordine nel quale vengono eseguite le operazioni scritte in Python. Tutti i tipi numerici (eccetto i complessi) supportano le seguenti operazioni ordinate per priorità ascendente

  1. x + y somma di x e y, x - y sottrazione di y a x
  2. x * y moltiplicazione di x per y, x / y quoziente di x per y
  3. x % y resto di x / y
  4. -x x negazione , +x x immutato
  5. abs(x) valore assoluto della magnitudo di x
  6. int(x) x conversione in intero
  7. long(x) x conversione in intero long
  8. float(x) x conversione in virgola mobile
  9. pow(x, y) x alla potenza di y
  10. x ** y x alla potenza di y

In generale, non ci basterà un linguaggio che può soltanto gestire costanti (altrimenti sarebbe sufficiente la calcolatrice vinta nell'uovo di Pasqua), ma vorremo avere la possibilità di gestire delle variabili. Tornando al caso precedente, ossia se siamo ancora interesati a calcolare l'area di un qualsiasi triangolo probabilmente ci converrà utilizzare dei nomi che contengono valori (le variabili appunto) al posto di numeri precisi. In altri termini servono per associare il contenuto (che può variare), ad una etichetta (nome) che serve per ricordare che cosa contiene. Per esempio se vogliamo utilizzare sequenze di DNA, un modo possibile è quello di utilizzare la variabile dna

>>> dna='gatatttgtaaa'
>>> print dna
gatatttgtaaa 
>>> dna='aaaatttgggggggggg'
>>> print dna
aaaatttgggggggggg
Se quindi vogliamo calcolare l'area di un triangolo generico, possiamo scrivere in file triangle.py, che contiene
''' file triangle.py ''' # comment
base=input('base= ') # input
altezza=input('altezza= ') # input
area=base*altezza/2.0 # computation
print "area = ",area # output
ed eseguirlo da linea di comando con python triangle.py, oppure dall'interprete con »> execfile('triangle.py'). Il semplice programma precedente, mette in evidenza come adesso possiamo calcolare l'area di un qualsiasi triangolo, senza ogni volta digitare la formula, inoltre ovviamente non avrebbe senso invertire il calcolo dell'area con quello dell'inizializzazione delle variabili. L'ordine delle operazioni identifica quindi quello che indichiamo come flusso dell'algoritmo o del programma.


next up previous contents
Next: Funzioni, subroutines Up: Introduzione Previous: Eseguire PYTHON   Indice
2004-11-02