Obiettivi di apprendimento:
Contenuto teorico:
# Metodi di trasformazione
testo = " Ciao Mondo Python! "
print("=== METODI DI TRASFORMAZIONE ===")
print(f"Originale: '{testo}'")
print(f"Maiuscolo: '{testo.upper()}'")
print(f"Minuscolo: '{testo.lower()}'")
print(f"Capitalizzato: '{testo.capitalize()}'")
print(f"Title Case: '{testo.title()}'")
print(f"Swap Case: '{testo.swapcase()}'")
# Metodi di pulizia
print(f"\n=== METODI DI PULIZIA ===")
print(f"Strip (rimuove spazi): '{testo.strip()}'")
print(f"Strip sinistro: '{testo.lstrip()}'")
print(f"Strip destro: '{testo.rstrip()}'")
# Metodi di ricerca
print(f"\n=== METODI DI RICERCA ===")
print(f"Trova 'Python': {testo.find('Python')}")
print(f"Conta 'o': {testo.count('o')}")
print(f"Inizia con 'Ciao': {testo.strip().startswith('Ciao')}")
print(f"Finisce con '!': {testo.strip().endswith('!')}")
# Metodi di sostituzione
print(f"\n=== METODI DI SOSTITUZIONE ===")
print(f"Sostituisci 'Python' con 'Java': '{testo.replace('Python', 'Java')}'")
# Metodi di divisione e unione
frase = "mela,banana,arancia,uva"
print(f"\n=== DIVISIONE E UNIONE ===")
print(f"Originale: {frase}")
frutti = frase.split(',')
print(f"Diviso: {frutti}")
print(f"Riunito: {' - '.join(frutti)}")
# Metodi di validazione
print(f"\n=== METODI DI VALIDAZIONE ===")
test_strings = ["123", "abc", "123abc", "ABC", "abc123"]
for s in test_strings:
print(f"'{s}': digit={s.isdigit()}, alpha={s.isalpha()}, alnum={s.isalnum()}, upper={s.isupper()}, lower={s.islower()}")
Processore di testo avanzato:
def elabora_testo():
print("📝 ELABORATORE DI TESTO 📝")
testo = input("Inserisci un testo: ")
# Statistiche base
print(f"\n=== STATISTICHE ===")
print(f"Lunghezza: {len(testo)} caratteri")
print(f"Parole: {len(testo.split())} parole")
print(f"Linee: {len(testo.splitlines())} linee")
# Analisi caratteri
lettere = sum(1 for c in testo if c.isalpha())
numeri = sum(1 for c in testo if c.isdigit())
spazi = sum(1 for c in testo if c.isspace())
print(f"Lettere: {lettere}")
print(f"Numeri: {numeri}")
print(f"Spazi: {spazi}")
# Trasformazioni
print(f"\n=== TRASFORMAZIONI ===")
print(f"Maiuscolo: {testo.upper()}")
print(f"Minuscolo: {testo.lower()}")
print(f"Capitalizzato: {testo.capitalize()}")
print(f"Invertito: {testo[::-1]}")
# Pulizia
testo_pulito = testo.strip().replace(" ", " ")
print(f"Pulito: '{testo_pulito}'")
elabora_testo()
Validatore di input:
def valida_input():
print("✅ VALIDATORE DI INPUT ✅")
# Validazione nome
while True:
nome = input("Nome (solo lettere): ").strip()
if nome.isalpha():
print(f"✅ Nome valido: {nome.title()}")
break
else:
print("❌ Il nome deve contenere solo lettere!")
# Validazione età
while True:
eta_str = input("Età (solo numeri): ").strip()
if eta_str.isdigit():
eta = int(eta_str)
if 0 <= eta <= 120:
print(f"✅ Età valida: {eta} anni")
break
else:
print("❌ L'età deve essere tra 0 e 120!")
else:
print("❌ L'età deve essere un numero!")
# Validazione email semplice
while True:
email = input("Email: ").strip().lower()
if "@" in email and "." in email:
print(f"✅ Email valida: {email}")
break
else:
print("❌ Email non valida!")
valida_input()
Esercizi pratici:
Obiettivi di apprendimento:
Contenuto teorico:
# String indexing base
testo = "Python Programming"
print(f"Testo: '{testo}'")
print(f"Lunghezza: {len(testo)}")
print("\n=== INDEXING BASE ===")
print(f"Primo carattere [0]: '{testo[0]}'")
print(f"Secondo carattere [1]: '{testo[1]}'")
print(f"Ultimo carattere [-1]: '{testo[-1]}'")
print(f"Penultimo carattere [-2]: '{testo[-2]}'")
# Visualizzazione indici
print("\n=== MAPPA DEGLI INDICI ===")
print("Indici positivi:")
for i, char in enumerate(testo):
print(f"[{i:2}]: '{char}'")
print("\nIndici negativi:")
for i, char in enumerate(testo):
print(f"[{i-len(testo):2}]: '{char}'")
# Slicing
print("\n=== SLICING ===")
print(f"Primi 6 caratteri [0:6]: '{testo[0:6]}'")
print(f"Dal carattere 7 alla fine [7:]: '{testo[7:]}'")
print(f"Fino al carattere 5 [:6]: '{testo[:6]}'")
print(f"Ultimi 11 caratteri [-11:]: '{testo[-11:]}'")
print(f"Dal 2° al 5° carattere [2:6]: '{testo[2:6]}'")
# Slicing con step
print(f"\n=== SLICING CON STEP ===")
print(f"Ogni 2 caratteri [::2]: '{testo[::2]}'")
print(f"Ogni 3 caratteri [::3]: '{testo[::3]}'")
print(f"Stringa invertita [::-1]: '{testo[::-1]}'")
print(f"Primi 6 al contrario [5::-1]: '{testo[5::-1]}'")
Analizzatore di stringhe:
def analizza_stringa():
print("🔍 ANALIZZATORE DI STRINGHE 🔍")
testo = input("Inserisci una stringa: ")
if not testo:
print("Stringa vuota!")
return
print(f"\n=== ANALISI DI: '{testo}' ===")
print(f"Lunghezza: {len(testo)}")
# Caratteri speciali
print(f"Primo carattere: '{testo[0]}'")
print(f"Ultimo carattere: '{testo[-1]}'")
if len(testo) >= 2:
print(f"Primi due: '{testo[:2]}'")
print(f"Ultimi due: '{testo[-2:]}'")
if len(testo) >= 3:
print(f"Carattere centrale: '{testo[len(testo)//2]}'")
# Palindromo check
testo_pulito = testo.lower().replace(" ", "")
è_palindromo = testo_pulito == testo_pulito[::-1]
print(f"È palindromo: {è_palindromo}")
# Estrai vocali e consonanti
vocali = "aeiouAEIOU"
vocali_trovate = [c for c in testo if c in vocali]
consonanti_trovate = [c for c in testo if c.isalpha() and c not in vocali]
print(f"Vocali: {vocali_trovate}")
print(f"Consonanti: {consonanti_trovate}")
analizza_stringa()
Giochi con le stringhe:
def giochi_stringhe():
print("🎮 GIOCHI CON LE STRINGHE 🎮")
# 1. Acronimo generator
frase = input("Inserisci una frase per l'acronimo: ")
parole = frase.split()
acronimo = ''.join([parola[0].upper() for parola in parole if parola])
print(f"Acronimo: {acronimo}")
# 2. Alternating case
testo = input("Inserisci testo per alternating case: ")
alternato = ''.join([c.upper() if i % 2 == 0 else c.lower()
for i, c in enumerate(testo)])
print(f"Alternato: {alternato}")
# 3. Estrai numeri
stringa_mista = input("Inserisci stringa con numeri: ")
numeri = ''.join([c for c in stringa_mista if c.isdigit()])
print(f"Numeri estratti: {numeri}")
# 4. Cipher semplice (Caesar cipher)
testo_cipher = input("Inserisci testo da cifrare: ")
shift = 3
cifrato = ''
for char in testo_cipher:
if char.isalpha():
ascii_offset = 65 if char.isupper() else 97
cifrato += chr((ord(char) - ascii_offset + shift) % 26 + ascii_offset)
else:
cifrato += char
print(f"Testo cifrato: {cifrato}")
giochi_stringhe()
Esercizi pratici:
Obiettivi di apprendimento:
Contenuto teorico:
# F-strings (Python 3.6+) - Metodo moderno e preferito
nome = "Mario"
eta = 25
altezza = 1.75
stipendio = 2500.50
print("=== F-STRINGS ===")
print(f"Nome: {nome}")
print(f"Età: {eta} anni")
print(f"Altezza: {altezza} metri")
print(f"Stipendio: €{stipendio}")
# Formattazione numerica
pi = 3.14159265359
numero_grande = 1234567.89
print(f"\n=== FORMATTAZIONE NUMERICA ===")
print(f"Pi con 2 decimali: {pi:.2f}")
print(f"Pi con 4 decimali: {pi:.4f}")
print(f"Numero grande con separatori: {numero_grande:,.2f}")
print(f"Percentuale: {0.85:.1%}")
print(f"Notazione scientifica: {numero_grande:.2e}")
# Allineamento e padding
print(f"\n=== ALLINEAMENTO ===")
parole = ["Python", "Java", "C++", "JavaScript"]
for parola in parole:
print(f"Sinistra: '{parola:<15}' | Centro: '{parola:^15}' | Destra: '{parola:>15}'")
# Padding con caratteri personalizzati
print(f"Padding con zero: {42:05d}")
print(f"Padding con trattini: {nome:-^20}")
# Formattazione di date
from datetime import datetime
ora_attuale = datetime.now()
print(f"\n=== DATE E ORARI ===")
print(f"Data completa: {ora_attuale:%d/%m/%Y %H:%M:%S}")
print(f"Solo data: {ora_attuale:%d-%m-%Y}")
print(f"Solo ora: {ora_attuale:%H:%M}")
print(f"Giorno della settimana: {ora_attuale:%A}")
print(f"Mese: {ora_attuale:%B}")
Metodo .format() (alternativa):
# Metodo .format() - Compatibile con versioni precedenti
print("\n=== METODO .FORMAT() ===")
template = "Nome: {}, Età: {}, Stipendio: €{:.2f}"
print(template.format("Luigi", 30, 2800.75))
# Con indici
template_indici = "Il {0} costa €{1:.2f}. {0} è in offerta!"
print(template_indici.format("laptop", 899.99))
# Con nomi
template_nomi = "Ciao {nome}, hai {eta} anni e vivi a {citta}"
print(template_nomi.format(nome="Anna", eta=28, citta="Roma"))
Sistema di report avanzato:
def genera_report():
print("📊 GENERATORE DI REPORT 📊")
# Dati di esempio
vendite = [
{"prodotto": "Laptop", "quantita": 15, "prezzo": 899.99},
{"prodotto": "Mouse", "quantita": 50, "prezzo": 25.50},
{"prodotto": "Tastiera", "quantita": 30, "prezzo": 75.00},
{"prodotto": "Monitor", "quantita": 8, "prezzo": 299.99}
]
# Header del report
print("=" * 70)
print(f"{'REPORT VENDITE':^70}")
print("=" * 70)
print(f"{'Prodotto':<15} {'Quantità':>10} {'Prezzo':>12} {'Totale':>15} {'%':>8}")
print("-" * 70)
totale_generale = 0
for item in vendite:
totale_item = item['quantita'] * item['prezzo']
totale_generale += totale_item
# Righe del report
for item in vendite:
prodotto = item['prodotto']
quantita = item['quantita']
prezzo = item['prezzo']
totale_item = quantita * prezzo
percentuale = (totale_item / totale_generale) * 100
print(f"{prodotto:<15} {quantita:>10d} €{prezzo:>10.2f} €{totale_item:>12.2f} {percentuale:>6.1f}%")
print("-" * 70)
print(f"{'TOTALE GENERALE:':<40} €{totale_generale:>12.2f}")
print("=" * 70)
genera_report()
Formatter personalizzati:
def esempi_formatting_avanzato():
print("🎨 FORMATTING AVANZATO 🎨")
# Numeri binari, ottali, esadecimali
numero = 255
print(f"Decimale: {numero}")
print(f"Binario: {numero:b}")
print(f"Ottale: {numero:o}")
print(f"Esadecimale: {numero:x}")
print(f"Esadecimale maiuscolo: {numero:X}")
# Segni e spazi
positivo = 42
negativo = -42
print(f"\nCon segno sempre: {positivo:+d}, {negativo:+d}")
print(f"Spazio per positivi: {positivo: d}, {negativo: d}")
# Formattazione condizionale
voti = [95, 87, 76, 45, 92]
print(f"\n=== VOTI ===")
for voto in voti:
status = "PASS" if voto >= 60 else "FAIL"
colore = "🟢" if voto >= 60 else "🔴"
print(f"Voto: {voto:3d}/100 {colore} {status}")
# Template per email
template_email = """
Gentile {nome},
La sua prenotazione per {evento} è confermata.
Data: {data:%d/%m/%Y}
Ora: {data:%H:%M}
Prezzo: €{prezzo:.2f}
Codice prenotazione: {codice}
Cordiali saluti,
Staff Eventi
"""
from datetime import datetime
dati = {
'nome': 'Mario Rossi',
'evento': 'Concerto Rock',
'data': datetime(2024, 6, 15, 21, 0),
'prezzo': 45.50,
'codice': 'MR2024001'
}
print(template_email.format(**dati))
esempi_formatting_avanzato()
Esercizi pratici: