edubun
Italiano

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)
Output
3.5
4.0
3
1

La 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».

Tre salti da 2 stanno in 7, con 1 che avanza: 7 // 2 è il numero di salti, 7 % 2 è ciò che resta.

% 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)
Output
2 h 15 min
0 1
9

Gli altri operatori, e l'ordine che usa Python

OperatoreSignificatoEsempioRisultato
+somma7 + 29
-sottrazione7 - 25
*moltiplicazione7 * 214
/divisione (float)7 / 23.5
//divisione intera7 // 23
%resto7 % 21
**potenza7 ** 249

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)
Output
14
20
1024
30000

L'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))
Output
0.30000000000000004
0.3
0 2 2
3 7.0

input() 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)
Output
How old are you? 14
Next year you will be 15
Nell'esempio qui sopra, 14 è ciò che ha scritto l'utente. Il programma stesso non contiene il numero 14.
/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
  1. Cosa stampa questo codice?
    print(9 / 3)
  2. Cosa stampa questo codice?
    print(17 // 5, 17 % 5)
  3. Cosa stampa questo codice?
    print(2 + 3 * 4 ** 2)
  4. Cosa stampa questo codice?
    print(2 ** 3)
  5. Cosa stampa questo codice?
    print(2 ^ 3)
    • 8
    • 6
    • 1
    • An error
  6. Cosa stampa questo codice?
    print(int("20") + 5)
  7. Cosa stampa questo codice?
    print("20" + "5")
  8. Cosa stampa questo codice?
    print(int(7.9))
  9. Cosa stampa questo codice?
    print(round(2.5))
  10. Un panino costa 3500 won e hai 10 000 won. Che cosa stampa questo codice?
    won = 10000
    price = 3500
    print(won // price, won % price)
  11. Quale espressione ti dice se n è pari?
    • n / 2 == 0
    • n // 2 == 0
    • n % 2 == 0
    • n ** 2 == 0
Errori comuni
  • «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.
Nota per l'insegnanteParti dall'esercizio di previsione e lascia che la sorpresa del 4.0 faccia il suo lavoro. Chi conosce dalle elementari la divisione con resto impara in fretta // e % una volta che si chiamano così. L'errore di arrotondamento dei float vale la pena di mostrarlo una volta senza soffermarsi; l'abitudine importante è tenere il denaro in numeri interi. round(2.5) che dà 2 contraddice l'arrotondamento insegnato a matematica, quindi aspettati una domanda, e rimanda alla documentazione delle funzioni incorporate invece di discutere. L'errore di conversione di input() è quello in cui chi impara si imbatte di più nei primi progetti.
Punti chiave
  • / 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