2.8 - Espressioni numeriche.

Ogni espressione è un’operazione tra numeri; in un programma essa deve essere calcolata (o valutata) durante l’esecuzione. Lo schema seguente raggruppa le operazioni standard:

Operazione o operatoreSimbolo algebricoSimbolo in Python Espressione algebrica Espressione in Python
Addizione + + a+b a+b
Sottrazione - - a-b a-b
Moltiplicazione × * a×b a*b
Divisione : / a:b a/b
Potenza xn** xnx**n
Modulo mod % a mod b a%b

L’operatore modulo può essere applicato soltanto su operandi interi perché restituisce il resto della divisione tra interi, mentre tutti gli altri operatori possono essere applicati sia a numeri interi che decimali.
Per esempio, 14/4 restituisce 3.5 come risultato, il loro quoziente, cioè 14:4.
14 % 4. invece, restituisce come risultato 2, il resto della divisione intera tra 14 e 4.
L'operatore % è molto utile per verificare se un numero è multiplo di un altro, perché in tal caso deve restituire resto 0.
Per esempio, per verificare che N è pari basta controllare N%2: se è zero allora è pari, altrimenti è dispari.

Poiché una qualsiasi espressione in Python deve essere scritta su di una sola linea, è necessario servirsi delle parentesi tonde (le uniche che si possono utilizzare nelle espressioni) per poter scrivere espressioni anche molto complesse. È, quindi, opportuno stabilire, in presenza di più operatori, quali operazioni vanno svolte per prima. In altre parole, dobbiamo assegnare agli operatori un ordine di valutazione; questa problematica va sotto il nome di priorità degli operatori.
Dal punto di vista algebrico sappiamo che prima vanno svolte le parentesi, dopo le operazioni di moltiplicazione e divisione, a cui va aggiunto il modulo, ed infine le addizioni e sottrazioni. Anche il linguaggio Python segue lo stesso schema, tenendo, però, presente che là dove compaiono più operatori allo stesso livello (cioè con la stessa precedenza), essi vengono applicati da sinistra a destra. In definitiva, la precedenza tra gli operatori aritmetici può essere schematizzata nel modo seguente:

1. per prima vengono calcolate le espressioni poste tra parentesi a partire da quelle più interne (parentesi nidificate); le parentesi allo stesso livello, vengono invece valutate da sinistra a destra nell’ordine in cui si presentano.

Esempio.
L’espressione 5 + 3 *(6 - (4 + 2 * 3)) viene svolta in quest’ordine
5 + 3 * (6 – (4 + 6)) = 5 + 3 * (6 – 10) = 5 + 3 * – 4 = 5 – 12 = -7;
il risultato finale dell’espressione è -7.

2. Subito dopo le parentesi vengono le operazioni di potenza, poi di moltiplicazione, divisione e modulo; se appaiono più operazioni dello stesso tipo esse vengono svolte da sinistra a destra.

Esempi.
Seguiamo passo-passo la risoluzione dell’espressione
10 – 4 + 2 * (3 – 2 * 8 /4 + 3*(4 + 2 * 8 % 5) – 10 ) =
=6 + 2 * ( 3 – 16 /4 + 3 *(4 + 16 % 3 ) – 10) = 6 + 2 * ( 3 – 4 + 3 *(4 + 1 ) – 10) =6 + 2 * ( – 1 + 3 * 5 – 10) = 6 + 2 * ( – 1 + 15 – 10) = 6 + 2 * 4 =6 + 8 = 14
Notiamo che l’operazione iniziale 10 – 4 può essere risolta subito, mentre la successiva addizione non può essere svolta perché seguita da una moltiplicazione.
In quest'altro caso eseguiamo prima la potenza:
3* 2**4 - 3**2 *2 = 3*16 - 9*2 = 48 - 18 = 30

3. Le ultime ad essere eseguite sono le operazioni di addizione e sottrazione; anche in questo caso, se appaiono più operazioni dello stesso tipo vengono valutate da sinistra a destra.

Esempio.
Risolviamo anche questa espressione
4 + 5 * (2 + 12 /3) – 20 / (8 – 2 * 3) + 10 % 3 - 4 =
=4 + 5 * (2 + 4) – 20 / (8 – 6) + 1 - 4 = 4 + 5 * 6 – 20 / 2 - 3 =
=4 + 30 – 10 - 3 = 34 – 10 + – 3 = 24 – 3 = 21

Poiché il linguaggio Python può essere utilizzato anche come interprete, cioè ogni comando viene eseguito subito dopo aver premuto il tasto Invio, risulta utile provare subito alcune semplici espressioni. Carichiamo l’IDLE e nella Shell scriviamo una alla volta le seguenti espressioni: dopo la scrittura di ogni espressione premiamo il tasto Invio

10-2*3 ; 3*(10-2) ; 8 –(10-2) ; 5+8%2 ; 10+8*3/2

funzioni

Come ultimo esempio riscriviamo nella Shell l’ultima espressione risolta:
4+5*(2+12/3)–20/(8–2*3)+10%3–4

funzioni

Osservazione: avrai notato che ogni volta che appare il simbolo di divisione il risultato viene scritto in formato decimale: ciò è dovuto al fatto che, poiché nella divisione si può avere anche un quoziente con decimali, il linguaggio Python assume in automatico che il risultato finale venga espresso come numero decimale.


TEST