🚀 Guida Completa alle Funzioni in Python
Scopri come organizzare il tuo codice in blocchi riutilizzabili e modulari con le funzioni
🎯 Cosa Sono le Funzioni e Perché Usarle
Le funzioni sono blocchi di codice riutilizzabili che eseguono operazioni specifiche. Usarle aiuta a:
Codice modulare e organizzato
Principio DRY – Don’t Repeat Yourself
Modifiche rapide e localizzate
Blocchi autonomi e testabili
🎯 Parametri e Argomenti in una Funzione
Parametri sono le variabili definite tra parentesi nella dichiarazione della funzione.
Argomenti sono i valori passati quando la funzione viene chiamata.
def somma(a, b): # a e b sono parametri
return a + b
print(somma(5, 3)) # 5 e 3 sono argomenti
# Output: 8
💡 Spiegazione:
- La funzione
sommaaccetta due parametri,aeb, che rappresentano i valori che passiamo alla funzione - Quando chiamiamo la funzione con
somma(5, 3), i numeri5e3sono gli argomenti - I parametri sono come variabili segnaposto che ricevono valori dagli argomenti
🔧 Tipologie di Parametri
Python supporta diversi tipi di parametri per flessibilità nella definizione delle funzioni:
1. Posizionali
Ricevono i valori in base all’ordine
2. Di default
Hanno un valore predefinito
3. Keyword
Specificati con nome parametro
4. Arbitrari
*args, **kwargs
def saluta(nome="Ospite"):
return f"Ciao, {nome}!"
print(saluta()) # Output: "Ciao, Ospite!"
print(saluta("Anna")) # Output: "Ciao, Anna!"
💡 Spiegazione:
- La funzione
salutaha un parametro con valore predefinito"Ospite" - Quando chiamiamo
saluta()senza argomenti, usa il valore di default - Quando chiamiamo
saluta("Anna"), il parametro riceve il valore “Anna”
🛠️ Esercitazione Guidata: Convertitore di Valuta
Obiettivo: Creare una funzione che converta un importo da euro a dollari o viceversa.
📝 Passaggi suggeriti:
- Definire la funzione
converti_valuta(importo, valuta) - Se valuta è “EUR”, convertire in dollari moltiplicando per 1.1
- Se valuta è “USD”, convertire in euro dividendo per 1.1
- Restituire l’importo convertito con due decimali
def converti_valuta(importo, valuta):
if valuta == "EUR":
return round(importo * 1.1, 2) # Converte in USD
elif valuta == "USD":
return round(importo / 1.1, 2) # Converte in EUR
💡 Spiegazione:
- La funzione
round(x, 2)arrotonda il numeroxa due decimali - Esempio:
round(3.14159, 2)restituisce3.14 - Usiamo
roundper formattare l’importo in modo leggibile
🎯 10 Tracce di Esercitazioni con Soluzioni
1️⃣ Calcolatore di Sconto
def calcola_sconto(prezzo, percentuale_sconto):
return round(prezzo - (prezzo * percentuale_sconto / 100), 2)
💡 Spiegazione: La funzione round arrotonda il risultato a due decimali.
Se il calcolo produce 8.9999, round(8.9999, 2) restituisce 9.00.
2️⃣ Conta le Vocali in una Frase
def conta_vocali(testo):
vocali = "aeiouAEIOU"
return sum(1 for lettera in testo if lettera in vocali)
💡 Spiegazione: Usiamo un comprehension per contare le vocali.
Ogni volta che una lettera è una vocale, aggiungiamo 1 alla somma.
sum è una funzione che somma i valori.
3️⃣ Simulatore di Punteggio Scolastico
def calcola_media(voti):
return round(sum(voti) / len(voti), 2) if voti else 0
💡 Spiegazione: sum(voti) somma tutti i voti, len(voti) conta quanti sono,
la divisione calcola la media, e round la arrotonda a due decimali.
4️⃣ Convertitore di Secondi
def converti_secondi(secondi):
ore = secondi // 3600
minuti = (secondi % 3600) // 60
secondi = secondi % 60
return f"{ore:02}:{minuti:02}:{secondi:02}"
💡 Spiegazione: f"{ore:02}:{minuti:02}:{secondi:02}" è una f-string che formatta i numeri con due cifre,
aggiungendo uno zero davanti se necessario (es. 02 invece di 2).
5️⃣ Generatore di Password Casuali
import random
import string
def genera_password(lunghezza):
caratteri = string.ascii_letters + string.digits + string.punctuation
return ''.join(random.choice(caratteri) for _ in range(lunghezza))
💡 Spiegazione: string.ascii_letters contiene lettere, string.digits numeri,
string.punctuation simboli. random.choice seleziona caratteri casuali,
''.join(...) li unisce in una stringa.
6️⃣ Calcolo dell’Area di un Cerchio
import math
def calcola_area_cerchio(raggio):
return round(math.pi * raggio ** 2, 2)
💡 Spiegazione: math.pi fornisce il valore di pi greco (π).
raggio ** 2 eleva il raggio al quadrato.
La funzione round viene usata per arrotondare il risultato a due decimali.
7️⃣ Contare le Occorrenze di una Parola in una Frase
def conta_occorrenze(parola, frase):
return frase.lower().split().count(parola.lower())
💡 Spiegazione: frase.lower() converte tutta la frase in minuscolo, per ignorare le differenze tra maiuscole e minuscole.
.split() suddivide la frase in una lista di parole.
.count(parola.lower()) conta quante volte la parola appare nella lista.
8️⃣ Ordina una Lista di Numeri in Ordine Crescente
def ordina_lista(lista):
return sorted(lista)
💡 Spiegazione: sorted(lista) restituisce una nuova lista con gli stessi elementi di lista,
ma ordinati in ordine crescente. È una funzione built-in di Python che gestisce automaticamente l’ordinamento.
9️⃣ Calcolare il Fattoriale di un Numero
def calcola_fattoriale(n):
if n == 0 or n == 1:
return 1
else:
return n * calcola_fattoriale(n - 1)
💡 Spiegazione: Il fattoriale di un numero n è il prodotto di tutti i numeri interi positivi minori o uguali a n.
La funzione è ricorsiva: significa che la funzione si richiama con valori decrescenti di n
fino a che n non diventa 0 o 1, dove il fattoriale è definito come 1.
🔟 Verifica se un Numero è Primo
def verifica_primo(n):
if n <= 1:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
💡 Spiegazione: Un numero primo è un numero maggiore di 1 che non ha divisori tranne 1 e se stesso.
Il ciclo for i in range(2, int(n ** 0.5) + 1) verifica se n è divisibile per numeri da 2 fino alla radice quadrata di n.
Se n è divisibile per uno di questi numeri, non è primo.
🏢 Esercizio Complesso: Gestione Rete Aziendale
Un'azienda possiede una rete composta da switch, router e server.
Gestisci dinamicamente i dispositivi di rete con le loro configurazioni.
🎯 Funzionalità Richieste:
- Aggiungere un nuovo dispositivo (IP, Tipo, Nome, Stato)
- Visualizzare tutti i dispositivi
- Modificare lo stato di un dispositivo
- Eliminare un dispositivo tramite IP
- Ricercare dispositivo per IP
- Contare dispositivi per tipologia
- Visualizzare tutti gli IP assegnati
# Lista per memorizzare i dispositivi di rete (ogni dispositivo è una tupla)
dispositivi = [] # (IP, Tipo, Nome, Stato)
def aggiungi_dispositivo(ip, tipo, nome, stato="Attivo"):
"""Aggiunge un nuovo dispositivo alla rete, se l'IP non è già assegnato."""
for dispositivo in dispositivi:
if dispositivo[0] == ip:
print("Errore: Indirizzo IP già esistente!")
return False
dispositivi.append( ______ ) # COMPLETARE: aggiungere la tupla corretta
print(f"Dispositivo {nome} ({tipo}) aggiunto con IP {ip}.")
return True
def visualizza_dispositivi():
"""Mostra tutti i dispositivi registrati nella rete."""
if not dispositivi:
print("Nessun dispositivo registrato.")
return
print("Elenco dispositivi:")
for dispositivo in dispositivi:
print(f"IP: {dispositivo[0]}, Tipo: {dispositivo[1]}, Nome: {dispositivo[2]}, Stato: {dispositivo[3]}")
def modifica_stato(ip, nuovo_stato):
"""Modifica lo stato di un dispositivo dato il suo indirizzo IP."""
for i in range(len(dispositivi)):
if dispositivi[i][0] == ip:
dispositivi[i] = ______ # COMPLETARE: modificare solo lo stato della tupla
print(f"Stato del dispositivo con IP {ip} aggiornato a {nuovo_stato}.")
return
print("Errore: Dispositivo non trovato.")
def elimina_dispositivo(ip):
"""Rimuove un dispositivo dalla rete tramite l'IP."""
global dispositivi
dispositivi = [ ______ for dispositivo in dispositivi if dispositivo[0] != ip] # COMPLETARE: filtrare la lista
print(f"Dispositivo con IP {ip} eliminato.")
def cerca_dispositivo(ip):
"""Cerca un dispositivo nella rete tramite l'IP e ne restituisce i dettagli."""
for dispositivo in dispositivi:
if dispositivo[0] == ip:
print(f"Dispositivo trovato: {dispositivo}")
return dispositivo
print("Nessun dispositivo trovato con questo IP.")
return None
def stampa_ip():
"""Mostra tutti gli indirizzi IP registrati."""
ips = [ ______ for dispositivo in dispositivi] # COMPLETARE: estrarre gli IP dalla lista di tuple
print("Indirizzi IP registrati:", ", ".join(ips))
# TEST: Prova ad aggiungere alcuni dispositivi e testare le funzioni!
📋 Compiti da Completare:
- Completare i punti mancanti nel codice per renderlo funzionante
- Creare il main() per testare il codice con chiamate alle funzioni
💡 Suggerimenti per il Miglioramento del Codice
Nomi Chiari
Usa nomi significativi per variabili e funzioni
Commenti
Spiega cosa fa ogni parte del codice
Casi Particolari
Gestisci valori non validi e casi limite