Obiettivi di apprendimento:
Contenuto teorico:
import math
def calcolatrice_base():
print("🧮 CALCOLATRICE BASE 🧮")
while True:
print("\n" + "="*40)
print("OPERAZIONI DISPONIBILI:")
print("1. Addizione (+)")
print("2. Sottrazione (-)")
print("3. Moltiplicazione (*)")
print("4. Divisione (/)")
print("5. Potenza (**)")
print("6. Radice quadrata (√)")
print("7. Percentuale (%)")
print("0. Esci")
print("="*40)
scelta = input("Seleziona operazione: ").strip()
if scelta == '0':
print("👋 Grazie per aver usato la calcolatrice!")
break
if scelta in ['1', '2', '3', '4', '5', '7']:
try:
num1 = float(input("Primo numero: "))
num2 = float(input("Secondo numero: "))
if scelta == '1':
risultato = num1 + num2
print(f"📊 {num1} + {num2} = {risultato}")
elif scelta == '2':
risultato = num1 - num2
print(f"📊 {num1} - {num2} = {risultato}")
elif scelta == '3':
risultato = num1 * num2
print(f"📊 {num1} × {num2} = {risultato}")
elif scelta == '4':
if num2 != 0:
risultato = num1 / num2
print(f"📊 {num1} ÷ {num2} = {risultato}")
else:
print("❌ Errore: Divisione per zero!")
elif scelta == '5':
risultato = num1 ** num2
print(f"📊 {num1}^{num2} = {risultato}")
elif scelta == '7':
risultato = (num1 / num2) * 100
print(f"📊 {num1} è il {risultato:.2f}% di {num2}")
except ValueError:
print("❌ Errore: Inserisci numeri validi!")
elif scelta == '6':
try:
num = float(input("Numero: "))
if num >= 0:
risultato = math.sqrt(num)
print(f"📊 √{num} = {risultato}")
else:
print("❌ Errore: Non si può calcolare la radice di un numero negativo!")
except ValueError:
print("❌ Errore: Inserisci un numero valido!")
else:
print("❌ Scelta non valida!")
calcolatrice_base()
Calcolatrice scientifica avanzata:
import math
def calcolatrice_scientifica():
print("🔬 CALCOLATRICE SCIENTIFICA 🔬")
# Cronologia calcoli
cronologia = []
while True:
print("\n" + "="*50)
print("CALCOLATRICE SCIENTIFICA")
print("="*50)
print("OPERAZIONI BASE:")
print("1. Addizione 2. Sottrazione 3. Moltiplicazione")
print("4. Divisione 5. Potenza 6. Radice quadrata")
print("\nOPERAZIONI AVANZATE:")
print("7. Sin 8. Cos 9. Tan")
print("10. Log 11. Ln 12. Fattoriale")
print("\nUTILITÀ:")
print("13. Cronologia 14. Cancella cronologia 0. Esci")
print("="*50)
scelta = input("Seleziona operazione: ").strip()
if scelta == '0':
print("👋 Arrivederci!")
break
elif scelta == '13':
if cronologia:
print("\n📋 CRONOLOGIA CALCOLI:")
for i, calcolo in enumerate(cronologia, 1):
print(f"{i}. {calcolo}")
else:
print("📋 Cronologia vuota")
continue
elif scelta == '14':
cronologia.clear()
print("🗑️ Cronologia cancellata!")
continue
# Operazioni con due numeri
if scelta in ['1', '2', '3', '4', '5']:
try:
num1 = float(input("Primo numero: "))
num2 = float(input("Secondo numero: "))
if scelta == '1':
risultato = num1 + num2
operazione = f"{num1} + {num2} = {risultato}"
elif scelta == '2':
risultato = num1 - num2
operazione = f"{num1} - {num2} = {risultato}"
elif scelta == '3':
risultato = num1 * num2
operazione = f"{num1} × {num2} = {risultato}"
elif scelta == '4':
if num2 != 0:
risultato = num1 / num2
operazione = f"{num1} ÷ {num2} = {risultato}"
else:
print("❌ Divisione per zero!")
continue
elif scelta == '5':
risultato = num1 ** num2
operazione = f"{num1}^{num2} = {risultato}"
print(f"📊 {operazione}")
cronologia.append(operazione)
except ValueError:
print("❌ Inserisci numeri validi!")
# Operazioni con un numero
elif scelta in ['6', '7', '8', '9', '10', '11', '12']:
try:
num = float(input("Numero: "))
if scelta == '6':
if num >= 0:
risultato = math.sqrt(num)
operazione = f"√{num} = {risultato}"
else:
print("❌ Numero negativo!")
continue
elif scelta == '7':
risultato = math.sin(math.radians(num))
operazione = f"sin({num}°) = {risultato:.6f}"
elif scelta == '8':
risultato = math.cos(math.radians(num))
operazione = f"cos({num}°) = {risultato:.6f}"
elif scelta == '9':
risultato = math.tan(math.radians(num))
operazione = f"tan({num}°) = {risultato:.6f}"
elif scelta == '10':
if num > 0:
risultato = math.log10(num)
operazione = f"log({num}) = {risultato:.6f}"
else:
print("❌ Logaritmo di numero non positivo!")
continue
elif scelta == '11':
if num > 0:
risultato = math.log(num)
operazione = f"ln({num}) = {risultato:.6f}"
else:
print("❌ Logaritmo di numero non positivo!")
continue
elif scelta == '12':
if num >= 0 and num == int(num):
risultato = math.factorial(int(num))
operazione = f"{int(num)}! = {risultato}"
else:
print("❌ Fattoriale solo per numeri interi non negativi!")
continue
print(f"📊 {operazione}")
cronologia.append(operazione)
except ValueError:
print("❌ Inserisci un numero valido!")
except OverflowError:
print("❌ Numero troppo grande!")
else:
print("❌ Scelta non valida!")
calcolatrice_scientifica()
Calcolatrice con espressioni:
def calcolatrice_espressioni():
print("⚡ CALCOLATRICE ESPRESSIONI ⚡")
print("Inserisci espressioni matematiche (es: 2+3*4, sqrt(16), sin(90))")
import math
import re
# Funzioni matematiche disponibili
funzioni_math = {
'sqrt': math.sqrt,
'sin': lambda x: math.sin(math.radians(x)),
'cos': lambda x: math.cos(math.radians(x)),
'tan': lambda x: math.tan(math.radians(x)),
'log': math.log10,
'ln': math.log,
'abs': abs,
'round': round,
'pi': math.pi,
'e': math.e
}
cronologia = []
while True:
print(f"\n{'='*50}")
print("CALCOLATRICE ESPRESSIONI")
print("Comandi: 'help', 'cronologia', 'clear', 'esci'")
print("="*50)
espressione = input(">>> ").strip()
if espressione.lower() == 'esci':
break
elif espressione.lower() == 'help':
print("""
📚 GUIDA RAPIDA:
• Operatori: +, -, *, /, **, ()
• Funzioni: sqrt(x), sin(x), cos(x), tan(x), log(x), ln(x)
• Costanti: pi, e
• Esempi:
- 2+3*4
- sqrt(16) + 5
- sin(45) * cos(45)
- (2+3)*4**2
""")
continue
elif espressione.lower() == 'cronologia':
if cronologia:
print("\n📋 CRONOLOGIA:")
for i, calc in enumerate(cronologia, 1):
print(f"{i}. {calc}")
else:
print("📋 Cronologia vuota")
continue
elif espressione.lower() == 'clear':
cronologia.clear()
print("🗑️ Cronologia cancellata!")
continue
if not espressione:
continue
try:
# Sostituisci le funzioni matematiche
espressione_modificata = espressione
for nome, funzione in funzioni_math.items():
if callable(funzione):
pattern = f'{nome}\\(([^)]+)\\)'
matches = re.findall(pattern, espressione_modificata)
for match in matches:
try:
valore = eval(match)
risultato_funzione = funzione(valore)
espressione_modificata = espressione_modificata.replace(
f'{nome}({match})', str(risultato_funzione)
)
except:
pass
else:
# Costanti
espressione_modificata = espressione_modificata.replace(nome, str(funzione))
# Valuta l'espressione
risultato = eval(espressione_modificata)
output = f"{espressione} = {risultato}"
print(f"📊 {output}")
cronologia.append(output)
except ZeroDivisionError:
print("❌ Errore: Divisione per zero!")
except ValueError as e:
print(f"❌ Errore matematico: {e}")
except SyntaxError:
print("❌ Errore di sintassi nell'espressione!")
except Exception as e:
print(f"❌ Errore: {e}")
calcolatrice_espressioni()
Esercizi pratici: