






































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Una panoramica completa della programmazione in python, spaziando dai concetti fondamentali come variabili e tipi di dati, fino a strutture dati avanzate come liste, matrici, insiemi e dizionari. Approfondisce l'uso delle funzioni, sia ricorsive che non, e introduce i moduli personalizzati. Particolare attenzione è dedicata alla programmazione orientata agli oggetti, con esempi pratici di classi, ereditarietà e metodi speciali. Vengono inoltre presentati algoritmi di ordinamento e tecniche di analisi della complessità, rendendo il documento una risorsa utile per chiunque voglia imparare o approfondire la programmazione in python. Il documento include anche esercizi pratici e esempi di codice per facilitare l'apprendimento.
Tipologia: Appunti
1 / 78
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!







































































Loading [MathJax]/jax/output/CommonHTML/jax.js
Open source e multipiattaforma (supporta Windows, Linux, MacOS, etc.). Include una vasta libreria standard per compiti comuni, come gestione file, operazioni matematiche, elaborazione dati e altro. Supporta un ambiente interattivo per test e sviluppo veloce.
Guida passo passo per usare Google Colab:
print("Ciao mondo!")
Loading [MathJax]/jax/output/CommonHTML/jax.js
/ Divisione 5 / 3 → 1.666...
// Divisione intera 5 // 3 → 1
** Potenza 5 ** 3 → 125
% Modulo (resto della divisione) 5 % 3 → 2
a = 10 b = 3
print("Addizione:", a + b) # 13 print("Divisione intera:", a // b) # 3 print("Potenza:", a ** b) # 1000
Esercizi introduttivi
print("Ciao, mondo!")
base = 5 altezza = 3 perimetro = 2 * (base + altezza) area = base * altezza print("Perimetro:", perimetro) print("Area:", area)
a = 10 b = 20
temp = a a = b b = temp
print("Dopo lo scambio: a =", a, ", b =", b)
eta = int(input("Inserisci la tua età: ")) print("La tua età è:", eta)
Operazioni di base sulle liste
Creazione di una lista: Una lista può essere creata racchiudendo gli elementi tra parentesi quadre ( [] ). Aggiungere elementi: Usa il metodo append() per aggiungere un elemento alla fine della lista. Rimuovere elementi: Usa il metodo remove() per eliminare il primo elemento che corrisponde a un valore specifico.
print(lista[1:3]) # Output: [20, 30]
print(lista[:3]) # Output: [10, 20, 30]
print(lista[2:]) # Output: [30, 40, 50]
print(lista[::-1]) # Output: [50, 40, 30, 20, 10]
Liste nidificate
matrice = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
print("Elemento nella prima riga, seconda colonna:", matrice[0][1]) # Output: 2
Cicli in Python
Ciclo for : Itera attraverso ogni elemento di una sequenza. Ciclo while : Ripete un blocco di codice finché una condizione è vera.
Esempio: Ciclo for
numeri = [1, 2, 3, 4, 5] for numero in numeri: print("Numero:", numero)
Esempio: Ciclo while
contatore = 5 while contatore > 0: print("Contatore:", contatore) contatore -= 1
Matrici in Python
Creazione di una matrice
matrice = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
print("Elemento in [0][0]:", matrice[0][0]) # Output: 1 print("Elemento in [2][1]:", matrice[2][1]) # Output: 8
Operazioni sulle matrici
Calcolo del numero di righe: len(matrice). Calcolo del numero di colonne: len(matrice[0]). Iterazione attraverso tutti gli elementi della matrice con cicli annidati.
for riga in matrice: for elemento in riga: print(elemento, end=" ")
def nome_funzione(parametro1, parametro2):
risultato = parametro1 + parametro return risultato
somma = nome_funzione(5, 10) print("La somma è:", somma)
Nome: Identifica la funzione. Parametri: Valori di input che la funzione può utilizzare. Corpo: Contiene il codice che esegue l'operazione. Return: Restituisce il risultato della funzione (opzionale).
Esempio completo
def saluta(nome): """Restituisce un messaggio di saluto.""" return f"Ciao, {nome}!"
messaggio = saluta("Marco") print(messaggio)
Tipi di funzioni
Funzioni predefinite: Fornite dalla libreria standard (es. print() , len() ). Funzioni definite dall'utente: Create dal programmatore. Funzioni anonime (lambda): Funzioni usa e getta definite in una sola riga.
Esempio di funzione lambda
quadrato = lambda x: x** print(quadrato(5)) # Output: 25
Ambito delle variabili
Variabili locali: Definite all'interno di una funzione e visibili solo all'interno di essa. Variabili globali: Definite al di fuori di tutte le funzioni e accessibili ovunque nel programma.
x = 10 # Variabile globale
def esempio(): x = 5 # Variabile locale print("Variabile locale:", x)
esempio() print("Variabile globale:", x)
Esercizi sulle funzioni
def area_rettangolo(base, altezza): return base * altezza
def somma_n(n): if n == 0: # Caso base return 0 else: return n + somma_n(n - 1) # Chiamata ricorsiva
print(somma_n(10)) # Output: 55
def fibonacci(n): if n == 0: # Caso base return 0 elif n == 1: return 1 else: return fibonacci(n - 1) + fibonacci(n - 2) # Chiamata ricorsiva
print(fibonacci(7)) # Output: 13
Vantaggi della ricorsione
Riduce la complessità del codice per problemi ripetitivi o basati su alberi. Permette di scrivere soluzioni concise per problemi come il percorso in un labirinto, algoritmi su grafi e altro.
Concetti chiave
Caso base: Condizione che termina la ricorsione. Riduzione del problema: Ogni chiamata ricorsiva deve avvicinarsi al caso base.
Stack delle chiamate: Ogni chiamata ricorsiva viene memorizzata nello stack finché non si raggiunge il caso base.
Esempi di ricorsione
Calcolo del massimo comune divisore (MCD)
def mcd(a, b): if b == 0: # Caso base return a else: return mcd(b, a % b) # Chiamata ricorsiva
print(mcd(48, 18)) # Output: 6
Verifica di una parola palindroma
def is_palindroma(parola): if len(parola) <= 1: # Caso base return True elif parola[0] != parola[-1]: # Se i caratteri iniziali e finali non corrispondono return False else: return is_palindroma(parola[1:-1]) # Chiamata ricorsiva
print(is_palindroma("anna")) # Output: True print(is_palindroma("python")) # Output: False
Quando evitare la ricorsione
Esempio: Fattoriale iterativo
def ricerca_binaria(lista, elemento, inizio, fine): if inizio > fine: # Caso base: elemento non trovato return - else: medio = (inizio + fine) // 2 if lista[medio] == elemento: # Caso base: elemento trovato return medio elif lista[medio] > elemento: return ricerca_binaria(lista, elemento, inizio, medio - 1)
else: return ricerca_binaria(lista, elemento, medio + 1, fine)
numeri = [1, 3, 5, 7, 9, 11] posizione = ricerca_binaria(numeri, 7, 0, len(numeri) - 1) if posizione != -1: print(f"Elemento trovato all'indice {posizione}") else: print("Elemento non trovato")
Ricorsione e gestione di alberi
class Nodo: def init(self, valore): self.valore = valore self.sinistra = None self.destra = None
def altezza_albero(nodo): if nodo is None: # Caso base: albero vuoto return 0 else: altezza_sinistra = altezza_albero(nodo.sinistra) altezza_destra = altezza_albero(nodo.destra) return 1 + max(altezza_sinistra, altezza_destra)
radice = Nodo(1) radice.sinistra = Nodo(2) radice.destra = Nodo(3) radice.sinistra.sinistra = Nodo(4) radice.sinistra.destra = Nodo(5)
print("Altezza dell'albero:", altezza_albero(radice)) # Output: 3
Calcolo del massimo in una lista
def massimo(lista): max_val = lista[0] for numero in lista: if numero > max_val: max_val = numero return max_val
numeri = [4, 7, 2, 9, 5] print("Il massimo è:", massimo(numeri)) # Output: 9
Contare elementi duplicati consecutivi
def conta_duplicati_consecutivi(lista): conta = 0 for i in range(1, len(lista)): if lista[i] == lista[i - 1]: conta += 1 return conta
numeri = [1, 1, 2, 2, 2, 3, 4, 4]
Calcolare la somma dei divisori
def somma_divisori(n): somma = 0 for i in range(1, n + 1): if n % i == 0: somma += i return somma
print(somma_divisori(12)) # Output: 28 (1 + 2 + 3 + 4 + 6 + 12)
Esercizi avanzati
Generazione di una matrice identità
def matrice_identita(n): matrice = [] for i in range(n): riga = [0] * n riga[i] = 1 matrice.append(riga) return matrice
identita = matrice_identita(4) for riga in identita: print(riga)
Concetti chiave della ricorsione
Caso base: La condizione che termina la ricorsione per evitare loop infiniti. Chiamata ricorsiva: La funzione richiama sé stessa per risolvere una parte più piccola del problema.
Esempio: Calcolo del fattoriale
def fattoriale(n): if n == 0: # Caso base return 1 return n * fattoriale(n - 1) # Chiamata ricorsiva
print(fattoriale(5)) # Output: 120
Conteggio degli elementi in una lista
def conta_occ(lista, x): if not lista: # Caso base: lista vuota return 0 if lista[0] == x: return 1 + conta_occ(lista[1:], x) else: return conta_occ(lista[1:], x)