Percorso: ilMac.net > Scuola di Mac > Corsi > Programmare con Python


Programmare con Python

6 - Il mistero svelato


Si tratta chiaramente di un budget. Ci sono un mucchio di numeri
George W. Bush

Ancora sulle operazioni

Abbiamo spiegato come Python riconosca le comuni operazioni aritmetiche. Adesso scriviamo questo:

print 7 * 5 + 9 - 2 / 2 + 6

Il risultato sarà 49. Ora però, usiamo un po' di parentesi:

print ((7 * 5) + (9 - 2)) / (2 + 6)

Questa volta il risultato sarà ben differente: cioé 5. Questi sono degli esempi che mostrano le "regole di precedenza" in Python. Il nostro rettile arboricolo infatti decide cosa eseguire per primo in base a delle semplici regole. Eccole:

Parentesi: sono gli elementi con il più alto grado di precedenza. Infatti ciò che vi è contenuto viene trattato subito, come in questo caso:

print 12 * (7 + 1)

darà come risultato 96, poiché prima viene effettuata la somma tra la parentesi, quindi la moltiplicazione. Occorre ricordare che le parentesi possono essere usate per costringere Python a effettuare il calcolo nel modo da noi desiderato.

Moltiplicazione e divisione: hanno la medesima priorità, però superiore alla somma e alla sottrazione. Ecco un esempio:

print 5 * 3 + 2

il risultato sarà 17. Prima si svolge la moltiplicazione quindi si somma. Tuttavia, basterà applicare le parentesi per ottenere qualcosa di diverso:

print 5 * (3 + 2)

Otterremo 25. A riprova che non mentivo quando dicevo che le parentesi cambiano le carte in tavola...

Addizione e sottrazione: possiedono la stessa priorità.

Elevamento a potenza: dopo la moltiplicazione e la divisione, è l'elemento che ha la precedenza. Ecco l'esempio:

print 5 ** 2 * 3

Dà come risultato 75, cioé 5 elevato a potenza (25), moltiplicato per il numero 3.
Adesso diamo ancora un'occhiata a questo esempio:

print 5 * 2 / 2

Questa volta abbiamo a che fare con elementi che hanno la medesima priorità (cioé la moltiplicazione e la divisione). Python valuta gli elementi da sinistra verso destra: prima la moltiplicazione (10), in seguito effettua la divisione e ci consegna il risultato finale (5).

Il mistero della divisione

La divisione in Python sembra comportarsi in modo alquanto bislacco; infatti se facciamo qualcosa del genere:

print 25 / 5

nulla di strano: avremo 5. Ma se al contrario diamo in pasto a Python questo:

print 50 / 12

avremo 4. Ma qualunque scalcagnata calcolatrice ci consegnerebbe un bel altro risultato: 4,1666666. Quando Python è chiamato ad effettuare una divisione tra numeri interi, darà come risultato un numero intero arrotondato all'intero inferiore. E questo anche qualora il risultato sia vicino all'intero superiore. In una delle prossime versioni di Python la divisione sarà modificata in modo da essere una divisione 'vera', con tanto di resti qualora questo sia necessario. Per vedere come funzionerà digitate questo:

from __future__ import division
print 5/2

A questo punto il risultato sarà 2.5.
Ovviamente non è tutto qui. Python possiede due segni (o operatori), per la divisione: cioé / (quella classica), e // (chiamata floor). Quest'ultima è stata aggiunta in una delle ultime versioni di Python e permette di troncare il risultato all'intero più basso. La sua introduzione è stata effettuata proprio perché il risultato che si ottiene dalla divisione classica (/), dipende dal tipo di operando. Vediamo un paio di esempi:

print 15 / 2.0

Il risultato sarà 7.5. Digitiamo ora:

print 15 // 2.0

Ora avremo 7.0. Nelle prossime versioni di Python (non si sa quando però), la divisione classica verrà modificata in modo tale da essere una divisione 'vera', quindi con tanto di resto.
Per questa volta ci fermiamo qui. La prossima puntata ci prenderemo un breve sosta, e parleremo degli errori. Nessuna novità dal lato della programmazione, ma credo che comunque si tratti di un argomento che valga la pena di affrontare.

Lezione successiva

Data di pubblicazione: 15-09-2005

L'intero contenuto di questo sito è © dal 1998 del Team di ilMac.net, è vietata ogni riproduzione senza il consenso scritto da parte degli autori.