Numeri e aritmetica
In Python 3, 7 / 2 dà 3.5, 7 // 2 dà 3 e 7 % 2 dà il resto 1.
Quattro divisioni da prevedere prima di continuare a leggere
Copri l'output qui sotto e scrivi che cosa ti aspetti che stampi ogni riga. La maggior parte delle persone indovina la prima e sbaglia almeno una delle altre, ed è da quell'errore che parte questa unità.
print(7 / 2)
print(8 / 2)
print(7 // 2)
print(7 % 2)3.5
4.0
3
1La seconda riga sorprende. 8 / 2 è esattamente 4, eppure Python stampa 4.0. Il motivo è che / dà sempre un float, un numero con il punto decimale, anche quando la divisione è esatta. Se vuoi la divisione tra interi, Python ha un operatore separato, //, detto divisione intera. Divide e poi arrotonda per difetto al numero intero sotto. L'operatore compagno % dà il resto che avanza. Insieme rispondono alla domanda delle elementari «7 diviso 2 fa 3, con il resto di 1».
% compare in più posti di quanto ti aspetti. Un numero è pari quando n % 2 è 0. L'ultima cifra di un numero è n % 10. Trasformare 135 minuti in ore e minuti è 135 // 60 ore e 135 % 60 minuti.
minutes = 135
print(minutes // 60, "h", minutes % 60, "min")
print(2026 % 2, 2027 % 2)
print(4589 % 10)2 h 15 min
0 1
9Gli altri operatori, e l'ordine che usa Python
| Operatore | Significato | Esempio | Risultato |
|---|---|---|---|
| + | somma | 7 + 2 | 9 |
| - | sottrazione | 7 - 2 | 5 |
| * | moltiplicazione | 7 * 2 | 14 |
| / | divisione (float) | 7 / 2 | 3.5 |
| // | divisione intera | 7 // 2 | 3 |
| % | resto | 7 % 2 | 1 |
| ** | potenza | 7 ** 2 | 49 |
Python segue lo stesso ordine della lezione di matematica: prima **, poi *, /, // e %, poi + e -, da sinistra a destra dentro ogni gruppo. Le parentesi vengono prima di tutto, quindi nel dubbio aggiungile. Non costano niente e rendono chiara l'intenzione a chi leggerà dopo.
print(2 + 3 * 4)
print((2 + 3) * 4)
print(2 ** 10)
print(10_000 * 3)14
20
1024
30000L'ultima riga mostra un piccolo aiuto: Python ti lascia scrivere trattini bassi dentro i numeri lunghi, quindi 10_000 si legge meglio di 10000. Vengono ignorati quando il numero è calcolato e non compaiono nell'output. Le virgole non si possono usare così, perché una virgola significa già «valore successivo».
I decimali sono memorizzati in binario, quindi alcune risposte escono leggermente sfalsate
Prova 0.1 + 0.2. Il tutorial di Python dedica un intero capitolo al perché la risposta è 0.30000000000000004 invece di 0.3. I float sono memorizzati in binario, e 0.1 non ha una forma binaria esatta, proprio come 1/3 non ha una forma decimale esatta. L'errore è minuscolo, e round() lo nasconde quando stampi. Tieni presente che round() arrotonda un valore che sta esattamente a metà al vicino pari: la pagina delle funzioni incorporate dà round(0.5) come 0 e round(1.5) come 2. Per il denaro in won interi o centesimi interi, conserva gli importi come int ed eviterai del tutto il problema.
print(0.1 + 0.2)
print(round(0.1 + 0.2, 2))
print(round(0.5), round(1.5), round(2.5))
print(int(3.99), float(7))0.30000000000000004
0.3
0 2 2
3 7.0input() ti dà sempre una stringa
input() mostra un messaggio, aspetta che l'utente scriva qualcosa e prema Invio, e restituisce ciò che ha scritto come stringa. Anche se scrive 15, ottieni "15", testo. Per fare aritmetica con esso, convertilo con int() o float(). int() su un float taglia la parte decimale invece di arrotondare, quindi int(3.99) è 3.
age = input("How old are you? ")
next_year = int(age) + 1
print("Next year you will be", next_year)How old are you? 14
Next year you will be 15| / | Divisione che dà sempre un float: 8 / 2 è 4.0 |
| // | Divisione intera: 7 // 2 è 3 |
| % | Resto: 7 % 2 è 1 |
| ** | Potenza: 2 ** 3 è 8 |
| int() | Trasforma "15" o 3.9 in un numero intero (15, 3) |
| input() | Legge una riga scritta dall'utente, come stringa |
| round(x, n) | Arrotonda a n cifre decimali; i valori esattamente a metà vanno al vicino pari |
- Cosa stampa questo codice?
print(9 / 3) - Cosa stampa questo codice?
print(17 // 5, 17 % 5) - Cosa stampa questo codice?
print(2 + 3 * 4 ** 2) - Cosa stampa questo codice?
print(2 ** 3) - Cosa stampa questo codice?
print(2 ^ 3)861An error
- Cosa stampa questo codice?
print(int("20") + 5) - Cosa stampa questo codice?
print("20" + "5") - Cosa stampa questo codice?
print(int(7.9)) - Cosa stampa questo codice?
print(round(2.5)) - Un panino costa 3500 won e hai 10 000 won. Che cosa stampa questo codice?
won = 10000 price = 3500 print(won // price, won % price) - Quale espressione ti dice se n è pari?
- n / 2 == 0
- n // 2 == 0
- n % 2 == 0
- n ** 2 == 0
- «2 ^ 3 vale 8.» In Python, ^ è un operatore bit a bit e 2 ^ 3 vale 1. Le potenze usano **, quindi 2 ** 3 vale 8. Il programma funziona senza errori, il che rende difficile notare questo sbaglio.
- «input() mi dà un numero se scrivo un numero.» Dà sempre una stringa. "14" + 1 si ferma con TypeError: can only concatenate str (not "int") to str. Converti prima con int(input(...)).
- «0.1 + 0.2 == 0.3 è True.» È False, perché 0.1 + 0.2 vale 0.30000000000000004. Confronta valori arrotondati, come round(0.1 + 0.2, 2) == 0.3, oppure conta in unità intere (won, centesimi) con int.
- / dà sempre un float; // dà il quoziente intero; % dà il resto.
- ** è la potenza; ^ no.
- Ordine: parentesi, **, poi * / // %, poi + -.
- 0.1 + 0.2 vale 0.30000000000000004; tieni il denaro come int.
- input() restituisce una stringa; converti con int() o float().
Fonti di questo corso (6)
- Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
- Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
- Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
- General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
- Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
- Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)
Consultato il: 2026-10-19