Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Appunti di Informatica (PoliTo) - Programmazione in Python, Appunti di Fondamenti di informatica

Appunti sintetici sulla programmazione in Python: descrizione, modi d'uso ed esempi riguardanti le strutture principali del linguaggio (stringhe, liste, tabelle, insiemi, dizionari...). Gli appunti sono un riassunto delle slide fornite dai professori (uguali per tutti i corsi).

Tipologia: Appunti

2022/2023

In vendita dal 11/02/2024

bennycasetti
bennycasetti 🇮🇹

4.8

(5)

6 documenti

1 / 36

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
1
INFORMATICA = scienza che si occupa dello studio della rappresentazione e della manipolazione
dell’informazione
Ø rappresentazione: il computer non è in grado di vedere un’immagine e fare qualcosa su di essa
se non la si converte in un modo in cui possa capire > ragiona in termini di 0 e 1, è in grado di
capire 2 simboli (0,1) => info devono essere convertite perché siano comprese
Ø manipolazione: una volta che si ha un dato già codificato si deve dire al computer, anche
chiamato elaboratore elettronico (macchina “ottusa” > fa ciò che le si dice si fare ma fa anche
calcoli in maniera veloce, se c’è errore o problema è un errore del programmatore) come
elaborarlo
INPUT = dati
OUTPUT = risultati (si ottengono attraverso il calcolo/elaborazione)
1 fase: codificare dati in input che passano all’elaboratore (codifica come sequenza di 0 e 1)
2 fase: come si codificano gli ordini sotto forma di sequenza di operazioni
3 fase: come decodificare i risultati in un formato comprensibile all’utente umano => decodificare e rinvertire
in un formato comprensibile all’essere umano
Passaggio al digitale: tutte le info convertite in sequenze di 0 e 1 (= info digitale) => tutto viene convertito in
bit (può memorizzare al suo interno un solo valore, o 0 o 1)
Byte: aggregazione di 8 bit (es. 01101100)
Con opportuna sequenza di bit si possono memorizzare e rappresentare tutte le info del mondo attuale
> per memorizzare una lettera, un suono basta 1 bite
> per memorizzare musica migliorando la qualità, 2 bite
In base allo spazio: info di qualità più o meno elevata
Oltre ad aspetti di efficienza ci sono aspetti di permanenza del dato
Gli elaboratori o calcolatori elettronici sono dotati di due componenti (l’una ha bisogno dell’altra):
- hardware = componente fisica > dispositivi elettronici e meccanici collegati tra loro per far funzionare
il computer
- software = parte intangibile > programmi, istruzioni che si danno al computer per fare calcoli e dati
HARDWARE
Comprende gli elementi fisici di un sistema di elaborazione:
CPU = central processing unit > dove risiede il cervello del computer: controlla l’esecuzione
programma e l’elaborazione di dati, si appoggia alla memoria
Dispositivi di memoria: comprendono la memoria interna (RAM) e la memoria secondaria >
consente alla CPU di ricevere i dati che le servono (sia dati da elaborare ma anche qual è prossima
istruzione da eseguire)
o Hard disk
o Dischi flash
o CD/DVD
Dispositivi di ingresso e uscita (input/output): permettono all’utente di interagire con il computer
(mouse, tastiera, stampante, schermo…)
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24

Anteprima parziale del testo

Scarica Appunti di Informatica (PoliTo) - Programmazione in Python e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

INFORMATICA = scienza che si occupa dello studio della rappresentazione e della manipolazione

dell’informazione Ø rappresentazione: il computer non è in grado di vedere un’immagine e fare qualcosa su di essa se non la si converte in un modo in cui possa capire > ragiona in termini di 0 e 1, è in grado di capire 2 simboli (0,1) => info devono essere convertite perché siano comprese Ø manipolazione: una volta che si ha un dato già codificato si deve dire al computer, anche chiamato elaboratore elettronico (macchina “ottusa” > fa ciò che le si dice si fare ma fa anche calcoli in maniera veloce, se c’è errore o problema è un errore del programmatore) come elaborarlo INPUT = dati OUTPUT = risultati (si ottengono attraverso il calcolo/elaborazione) 1 fase: codificare dati in input che passano all’elaboratore (codifica come sequenza di 0 e 1) 2 fase: come si codificano gli ordini sotto forma di sequenza di operazioni 3 fase: come decodificare i risultati in un formato comprensibile all’utente umano => decodificare e rinvertire in un formato comprensibile all’essere umano Passaggio al digitale: tutte le info convertite in sequenze di 0 e 1 (= info digitale) => tutto viene convertito in bit (può memorizzare al suo interno un solo valore, o 0 o 1) Byte: aggregazione di 8 bit (es. 01101100) Con opportuna sequenza di bit si possono memorizzare e rappresentare tutte le info del mondo attuale

per memorizzare una lettera, un suono basta 1 bite per memorizzare musica migliorando la qualità, 2 bite In base allo spazio: info di qualità più o meno elevata Oltre ad aspetti di efficienza ci sono aspetti di permanenza del dato Gli elaboratori o calcolatori elettronici sono dotati di due componenti (l’una ha bisogno dell’altra):

  • hardware = componente fisica > dispositivi elettronici e meccanici collegati tra loro per far funzionare il computer
  • software = parte intangibile > programmi, istruzioni che si danno al computer per fare calcoli e dati HARDWARE Comprende gli elementi fisici di un sistema di elaborazione:
  • CPU = central processing unit > dove risiede il cervello del computer: controlla l’esecuzione programma e l’elaborazione di dati, si appoggia alla memoria
  • Dispositivi di memoria: comprendono la memoria interna (RAM) e la memoria secondaria > consente alla CPU di ricevere i dati che le servono (sia dati da elaborare ma anche qual è prossima istruzione da eseguire) o Hard disk o Dischi flash o CD/DVD
  • Dispositivi di ingresso e uscita (input/output): permettono all’utente di interagire con il computer (mouse, tastiera, stampante, schermo…)

o input: dispostivi che acquisiscono un segnale di ingresso da parte dell’utente e collegati a porte del sistema (mouse, tastiera, stampante, microfono) o output: permettono di comunicare all’utente il risultato di un’elaborazione Tutte le componenti sono collegate tra loro da fili che trasportano le informazioni. SOFTWARE

  • sviluppato sotto forma di “programma applicativo” (applicazione)
  • è una serie di passi, sequenza deterministica di istruzioni e decisioni implementata in qualche linguaggio e tradotta in una forma che possa essere eseguita nel computer
  • gestisce i dati utilizzati dalle varie istruzioni
  • esempi: Microsoft Word, giochi elettronici, sistemi operativi, driver dei dispositivi PROGRAMMAZIONE: atto e arte di progettare, implementare e verificare (testare) i programmi I programmi indicano al computer la sequenza di passi necessaria a completare un determinato compito => contengono una grande sequenza di istruzioni primitive I computer possono eseguire molti compiti perché possono eseguire diversi programmi (eseguono molti passi semplici velocemente) Eseguire un programma:
  • le istruzioni di un programma e i relativi dati sono memorizzati in formato digitale
  • il programma deve essere portato in memoria, dove la CPU lo può leggere
  • la CPU esegue il programma un’istruzione per volta (il programma può anche reagire agli input provenienti dall’utente)
  • le istruzioni e gli input dell’utente determinano l’esecuzione del programma: la CPU legge i dati (compreso l’input utente), li modifica e li riscrive nuovamente in memoria, sullo schermo o sulla memoria di massa La programmazione consiste nello scrivere un “documento” (file sorgente) che descrive la soluzione al problema considerato (in realtà “la” soluzione a un dato problema non esiste, ci sono più soluzioni, alcune più efficienti di altre) => la programmazione consiste nel trovare la soluzione più efficiente ed efficace per il problema, secondo opportune metriche Programmare è una attività creativa ma anche un’operazione complessa: generalmente è impraticabile un approccio diretto (passare dal problema direttamente al codice sorgente) => si struttura il problema in passi più semplici, diverse fasi, raffinamenti successivi Sviluppo di un programma:
  • Problema
  • Soluzione informale: c’è l’info ma si deve strutturare
  • Soluzione formale: pseudocodice o diagrammi di flusso
  • Programma ALGORITMO = descrizione passo passo di come risolvere un problema (non sempre scritto in linguaggio di programmazione)

Elementi principali dei flow chart:

  • rettangoli (operazioni semplici / decisioni)
  • parallelogrammi (input oppure output generico dell’utente)
  • rombi (gestione delle scelte + specifica le condizioni di uscita, i cicli => servono per specificare le operazioni che verranno effettuate) Sono necessari un blocco di inizio (start) e un blocco di fine (stop). I blocchi sono collegati tra loro tramite frecce, che indicano i passi da eseguire per arrivare alla fine del programma > sono utili per formalismo grafico + aiutano a visualizzare il flusso dell’algoritmo e si può capire se si sono valutati tutti i casi possibili Sui rami si possono mettere etichette (es. vero/falso) per esprimere il caso in cui ci troviamo. N.B: attenzione a mantenere ordine, no frecce che si intrecciano o che vanno verso altre frecce !!! Flow chart condizionali:
  • due alternative - più di due alternative

PYTHON

All’inizio degli anni ’90 Guido van Rossum progettò il linguaggio di programmazione Python. Van Rossum non era soddisfatto dei linguaggi esistenti, ottimizzati per scrivere grandi programmi, eseguibili in modo efficiente ma voleva un linguaggio che permettesse di creare rapidamente i programmi e anche modificarli in modo semplice. Progettato per avere una sintassi più semplice e pulita degli altri linguaggi come Java, C and C++ (più facile da apprendere), l’ambiente Python aveva un approccio “batterie comprese”, offrendo subito la disponibilità di molte funzioni utili in modo standard => Python è un linguaggio interpretato, che rende più facile lo sviluppo ed il test di brevi programmi I programmi Python sono eseguiti dall’interprete Python, che legge il programma e lo esegue. Sistema integrato di sviluppo per creare un programma: IDE PyCharm Componenti di un IDE:

  • editor del codice sorgente > aiuta il programmatore: visualizzazione dei numeri di linea del codice, evidenziazione e colorazione della sintassi (commenti, testi, ...), indentazione automatica del codice, evidenziazione degli errori di sintassi, completamento automatico dei nomi
  • finestra di output > output (testuale) generato dal programma
  • debugger > strumenti di ausilio alla ricerca degli errori logici nel programma ERRORI: § errori a tempo di compilazione o errori di sintassi (scrittura, maiuscole, punteggiatura; ordine delle istruzioni, corrispondenza delle parentesi, virgolette, indentazione) > il compilatore non crea alcun programma eseguibile (solitamente evidenziati dall’IDE) § errori a tempo di esecuzione o errori logici > il programma viene eseguito ma non produce il risultato corretto => può andare in ‘crash’

VARIABILE = zona di memoria dotata di un nome che fa riferimento ad un valore specifico

Per definire una variabile è necessario dire all’interprete:

  • nome (con il quale in seguito ci si riferirà alla variabile) > deve iniziare con una lettera o con il carattere underscore-sottolineato ( _ ), i caratteri seguenti possono essere lette (maiuscole o minuscole), numeri o underscore MA non altri simboli o spazi
  • valore > per assegnare un valore a una variabile si usa un’istruzione di assegnazione (=) MA il suo valore non è fisso (≠ costante), può cambiare => la variabile si aggiorna: il nuovo valore rimpiazza il contenuto precedente della variabile Prima di utilizzare una variabile, essa deve prima essere definita (e inizializzata) Una variabile può essere assegnata a diversi valori di diverso tipo: può essere un numero, una stringa, un valore booleano (True / False)

COSTANTE = variabile il cui valore non andrebbe modificato (Python permette di farlo) dopo che le è stato

assegnato un valore iniziale > si nomina con lettere MAIUSCOLE

COMMENTI : introdotti da # , servono per chiarire i dettagli del codice e aggiungere spiegazioni

(il compilatore li ignora)

STRINGHE = sequenze di caratteri racchiuse tra virgolette (“…”) o tra apici singoli (‘…’) Le stringhe sono immutabili in Python: non possono essere modificate dopo la loro creazione (ma si può aggiornare una stessa variabile e riferirla a un’altra stringa): si genera l’errore TypeError Lunghezza della stringa = numero di caratteri della stringa > si può calcolare con la funzione len() Una stringa di lunghezza 0 è detta stringa vuota: non contiene caratteri (“” o ‘’), nemmeno uno spazio CONCATENAZIONE DI STRINGHE (+) > si può aggiungere una stringa alla fine di un’altra (ad es. si può aggiungere uno spazio tra due stringhe) N.B: “+” (usato per concatenare le stringhe) è un esempio di operator overloading = svolge diverse funzioni, a seconda dell’utilizzo e del tipo di valori coinvolti:

intero + intero: addizione intera float (virgola mobile) + float oppure float + intero: addizione float stringa + stringa: concatenazione di stringhe lista + lista: concatenazione di liste MA stringa + numero intero: errore RIPETIZIONE DI STRINGHE () > si può creare una stringa composta da un’altra stringa ripetuta n volte Anche “” è un tipo di operator overloading CONVERSIONE DA NUMERO A STRINGA: str() CONVERSIONE DA STRINGA A NUMERO (importante quando le stringhe sono fornite in input dall’utente)

  • intero: int()
  • con virgola mobile: float() N.B: nel convertire una stringa in numero, è necessario che la stringa contenga una rappresentazione corretta del numero stesso; in caso contrario, il programma genera un errore: Value Error ESTRAZIONE DI UN CARATTERE DA UNA STRINGA Ad ogni carattere in una stringa corrisponde un indice numerico: l’operatore [ ] ritorna il carattere corrispondente ad un dato indice es. nome = “Harry” primo = nome[0] → restituisce il primo carattere (ha indice 0 e non 1 !!!) ultimo = nome[4] → restituisce l’ultimo carattere ( ≠ len(nome) che è 5) Gli indici validi vanno da 0 a len(stringa) – 1 Gli indici non validi generano errore (IndexError: string index out of range) PORZIONI DI UNA STRINGA ( slicing ) [n : m] operatore di slice: serve ad estrarre una parte della stringa (restituisce elementi di indice compreso (con m > n) tra n e m, m escluso) Entrambi gli indici usati con l’operatore di slice sono opzionali: o se il primo indice (n) viene omesso, è sottinteso il primo carattere della stringa (indice 0) o se il secondo indice (m) viene omesso, saranno inclusi tutti gli elementi fino alla fine della stringa o se entrambi gli indici (n, m) vengono omessi, sono inclusi tutti gli elementi dal primo all’ultimo (copia della stringa)

Porzioni con ‘passo’ diverso da 1 Nelle porzioni è possibile indicare un terzo argomento: stringa[ start : stop : step ] stringa[ n : m : p ] Se step = p => vengono restituiti i valori compresi tra n e m con passo p Se step negativo => invece di spostarmi in avanti ad ogni passo, mi sposto indietro => prendo gli elementi in ordine inverso => occorre avere n > m es. stringa[: : - 1] → restituisce tutta la stringa in ordine inverso CARATTERI I caratteri sono memorizzati come valori interi (es. la lettera ‘H’ ha il valore ASCII 72) Python usa i caratteri Unicode: Unicode definisce oltre 100,000 caratteri ed è capace di codificare il testo in tutte le lingue scritte o CODICI ASCII o CODICI Unicode Per convertire i singoli caratteri dal formato stringa al valore numerico ASCII/Unicode: ord() → ha come argomento un carattere Unicode (stringa) e restituisce un intero che rappresenta il valore Unicode di quel carattere (è l’inverso di chr() ) es. ord(‘a’) restituisce l’intero 97 ord(‘€’) restituisce 8364 Per convertire un valore ASCII/Unicode dal valore numerico al carattere corrispondente in formato stringa: chr() → ha come argomento un numero intero e restituisce la stringa rappresentante il carattere a cui quel numero intero è associato nel codice Unicode (è l’inverso di ord() ) N.B: il range valido per l’argomento va da 0 a 1.114.111 (0x10FFFF in base 16) > se l’intero (argomento) è fuori dal range: ValueError es. chr(97) restituisce la stringa ‘a’ chr(8364) restituisce la stringa ‘€’ METODI PER STRINGHE Python è un linguaggio orientato agli oggetti (object-oriented), ossia entità software rappresentanti valori aventi un determinato comportamento => tutti i valori sono oggetti Ogni oggetto può avere metodi , ossia funzioni (sequenze di istruzioni) che possono essere chiamate su quegli oggetti specifici, usando la sintassi object.method() s.lower() → restituisce la versione minuscola della stringa s s.upper() → restituisce la versione maiuscola della stringa s s.replace( old , new ) → restituisce una nuova versione della stringa s in cui ogni occorrenza della sottostringa old è stata sostituita dalla stringa new Metodi Funzioni Diversi metodi sono specifici per diversi tipi di oggetti Le funzioni sono generali e possono accettare argomenti di diverso tipo I metodi sono chiamati con la notazione del punto (dot-syntax) Le funzioni sono chiamate direttamente, con un elenco di parametri I metodi restituiscono un risultato che può essere salvato in una variabile Le funzioni restituiscono un risultato che può essere salvato in una variabile

OUTPUT FORMATTATO

Per ottenere output più chiaro e ordinato da visualizzare: § concatenazione di stringhe § operatore di formattazione % → indicatore di formato:

  • %s – stringa
  • %d – numero intero
  • %f – numero in floating point es. print( "Stringa: %s, intero: %d, float: %f" %(stringa, intero, float))

§ f-String = stringhe formattate, precedute dal carattere f/F

possono contenere campi sostituibili, nella forma di espressioni racchiuse tra { } => sono espressioni valutate al momento dell’esecuzione es. f "il risultato è {risultato}" → il risultato è 5 (variabili definite nelle linee di codice precedenti) f "la somma è {a+b}" → la somma è 15 (espressioni aritmetiche che coinvolgono una o più variabili o valori precedentemente definiti) f "il risultato è {risultato=}" → il risultato è risultato=5 (aggiungendo il simbolo =, viene inserito anche il nome della variabile) Si può modificare il formato in cui vengono stampati i valori, utilizzando degli specificatori di formato,

che vengono inclusi tra le graffe e separati dal simbolo :

Per stampare un numero reale con un determinato numero di cifre decimali si usa il formato: N.B: round() ≠ f “{ :f}” round() per arrotondare in formule matematiche, f “{ :f}” per stampare in modo più ordinato e flessibile Parametri opzionali (“named parameters”) della funzione PRINT : o sep= → definisce il separatore da usare se si stampano diversi valori default: spazio ‘ ’ print(hour, min, sec, sep= ':' ) o end= → definisce cosa stampare alla fine della riga (ad es. se si vogliono stampare diversi elementi sulla stessa riga evitando l’ “a capo”) default: a capo ‘\n’ print( 'Hello' , end= '' )→ stampa stringa vuota dopo gli argomenti, al posto di un “a capo”

ISTRUZIONE IF In un programma è spesso necessario prendere delle decisioni in base al valore di ingresso o di variabili interne. Le due keyword che permettono di realizzare un costrutto condizionale sono: o if o else SINTASSI if condizione: if condizione: enunciati 1 enunciati else : enunciati 2

  • il carattere “due punti” identifica un enunciato composto
  • la condizione spesso contiene operazioni relazionali (== != < <= > >=)
  • se la condizione è vera, gli enunciati presenti nel primo ramo (ramo if ) vengono eseguiti in sequenza, mentre quelli presenti nel secondo ramo (ramo else ) vengono ignorati
  • se la condizione è falsa, gli enunciati presenti nel primo ramo (ramo if ) vengono ignorati, mentre quelli presenti nel secondo ramo (ramo else ) vengono eseguiti in sequenza
  • se il ramo else non contiene azioni, la clausola va omessa
  • le clausole if ed else devono essere incolonnate correttamente (l’indentazione è importante !!!)
  • bisogna evitare di duplicare il codice nelle diramazioni: se lo stesso codice è eseguito in entrambe le diramazioni, allora si può muovere fuori dall’ if COMPOUND STATEMENTS Alcuni costrutti Python sono compound statement = istruzioni composte (ad es. l’istruzione if è un esempio di compound statement)
  • si sviluppano su più di una riga di codice e consistono di un header (intestazione) e di un blocco di istruzioni = insieme di una o più istruzioni, tutte con la stessa indentazione, che inizia sulla riga successiva all’header e si conclude appena trova un’istruzione con un livello di indentazione inferiore
  • richiedono un “:” alla fine dell’header L’istruzione if permette a un programma di fare cose diverse in base al valore dei dati che sta elaborando N.B: i blocchi di istruzioni possono essere annidati all’interno di altri blocchi di istruzioni

N.B: istruzione pass : istruzione ‘speciale’ che non fa nulla ma permette di costruire lo scheletro (corretto) della logica di funzionamento > poi successivamente le istruzioni vengono riempite VARIABILI E OPERATORI BOOLEANI VARIABILI BOOLEANE: - possono essere solo Vere oppure False (bool è un tipo di dato in Python: può avere i valori True e False)

  • sono spesso utilizzate come flag (indicatori) proprio perché solo vere oppure false
  • possono essere usate per “ricordarsi” una certa condizione e testarla più avanti
  • la condizione di un’istruzione if è un valore Booleano OPERATORI BOOLEANI: utilizzati per combinare diverse condizioni Booleane § and : entrambe le condizioni devono essere vere affinché il risultato sia vero N.B: Python permette l’uso di operatori di confronto concatenati: 0 <= x and x <= 100 si può anche scrivere come 0 <= x <= 100 § or : basta che una sola delle condizioni sia vera affinché il risultato sia vero § not : si usa quando è necessario invertire una variabile booleana o il risultato di un confronto Proprietà:
  • commutativa → A and B = B and A A or B = B or A
  • associativa → A and B and C = (A and B) and C = A and (B and C) A or B or C = (A or B) or C = A or (B or C)
  • distributiva → A and (B or C) = A and B or A and C A or (B and C) = (A or B) and (A or C) Legge di De Morgan: spiega come negare una combinazione di and e or o not(A and B) = not(A) or not(B) o not(A or B) = not(A) and not(B)

CICLI I cicli sono utilizzati per ripetere diverse volte lo stesso blocco di istruzioni, con valori diversi delle variabili e fino a quando una “condizione di ciclo” rimane vera (True)

Ø CICLO WHILE

Il ciclo esegue istruzioni finché la condizione (riportata dopo ‘while’) è vera !!! balance = 10. TARGET = 100. year = 0 RATE = 5. while balance < TARGET : year = year + 1 interest = balance * RATE/ 100 balance = balance + interest Ciclo controllato da: o contatore → conta il numero di ripetizioni effettuate e si ferma quando sono state completate un numero predefinito di iterazioni (può essere inizializzato a 0 o a 1) o evento = condizione → prima o poi la condizione diventa falsa => il ciclo termina N.B: esistono anche cicli misti, controllati non solo da un contatore e/o da un evento ⚠ Errori comuni:

  • condizione di test errata
  • ciclo infinito → non si aggiorna la variabile all’interno del ciclo
  • off-by-one errors → una variabile ‘contatore’ viene usata nella condizione VALORI SENTINELLA = valori che indicano la fine di un insieme di dati, ossia indicano la fine della sequenza di valori che viene letta in input (ma non fanno parte dei dati) Esempio: Esempio di esecuzione: Inizializzazione delle variabili (all’esterno del ciclo) Inizializzazione del contatore Condizione (ricordarsi i “due punti”) Aggiornamento del contatore Aggiornamento delle variabili (all’interno del ciclo) Corpo costituito da enunciati (tutti incolonnati l’uno sotto l’altro) che vengono eseguiti finché la condizione è vera → se la condizione non diventa mai falsa: ciclo infinito Inizializzazione della variabile (all’esterno del ciclo) Ciclo di input che termina alla lettura del valore sentinella (cioè un valore inferiore a 0) Enunciato if per controllare se è stato introdotto il valore sentinella Aggiornamento delle variabili (all’interno del ciclo)

CICLARE SU INDICE E VALORE

WHILE: ciclo sull’indice FOR: ciclo sul valore Funzione ENUMERATE : indice e valore insieme → ad ogni iterazione restituisce una coppia di valori (indice, valore) for (i, lettera) in enumerate(nome): print(i, lettera) Il ciclo for può “estrarre” entrambi i valori, che si potranno utilizzare nel corpo dell’iterazione. CICLI ANNIDATI Per problemi più complessi: annido un ciclo all’interno di un altro => il ciclo annidato sarà indentato all’interno del blocco di codice dell’altro ciclo (es. analisi delle celle di una tabella: il ciclo più esterno itera sulle righe della tabella, il ciclo più interno processa le colonne nella riga corrente)

FUNZIONI

Una funzione è una sequenza di istruzioni a cui viene dato un nome. Per eseguire le istruzioni di una funzione è necessario invocarla. Quando una funzione termina, il risultato ottenuto è restituito dalla funzione e può essere usato in un’espressione.

  • Input di una funzione = argomenti dell’invocazione di una funzione, valori per i quali si vuole che la funzione calcoli il proprio risultato
  • Output di una funzione = valore restituito Le funzioni sono come scatole nere: si passa alla funzione ciò che le serve (argomenti) per eseguire il suo compito e poi si ottiene il risultato MA non è necessario sapere come funziona davvero! REALIZZAZIONE E COLLAUDO DI FUNZIONI
  1. DEFINIRE la funzione:
  • scegliere un nome per la funzione
  • dichiarare una variabile per ogni argomento
  • mettere assieme tutte queste informazioni con la parola def per formare la prima riga della definizione della funzione = intestazione (header) della funzione:
  1. IMPLEMENTARE la funzione: l’istruzione def apre un nuovo blocco all’interno del quale si scrivono le istruzioni che compongono il corpo della funzione > all’interno del corpo si possono utilizzare le variabili parametro come se fossero normali variabili def cube_volume(side_length): volume = side_length ** 3 return volume
  2. INVOCARE / COLLAUDARE la funzione: per collaudare la funzione, è necessario che il programma contenga la definizione della funzione (corpo) e le istruzioni che chiamano la funzione e visualizzano il risultato result1 = cube_volume( 2 ) result2 = cube_volume( 10 ) print( f"Un cubo con lato di lunghezza 2 ha volume { result1 }" ) print( f"Un cubo con lato di lunghezza 10 ha volume { result2 }" ) PASSAGGIO DI PARAMETRI Le variabili parametro (parametri formali) ricevono gli argomenti (parametri effettivi o parametri attuali) dell’invocazione della funzione, che possono essere: o il valore corrente di una variabile o espressione o un valore ‘letterale’: 2, 3.14, 'hello’ def cube_volume(side_length):

def

cube_volume(sid

corpo e_length):

return: termina la funzione e restituisce il risultato

Alternativa ai return multipli: memorizzare il risultato in una variabile (anche in più punti della funzione) e restituire il valore della variabile nell’ultima istruzione della funzione Funzioni che non restituiscono un valore Le funzioni non sono obbligate a restituire un valore: possono generare un output e terminare senza trasmettere un valore => non è richiesta alcun’istruzione return Se l’enunciato return non viene incontrato durante l’esecuzione della funzione, è equivalente ad avere un return vuoto dopo l’ultima istruzione della funzione. Se si vuole far terminare una funzione che non restituisce un valore prima che sia giunta alla fine della sua sequenza di istruzioni, si può usare un enunciato return senza fornire un valore FUNZIONE MAIN Quando si definiscono e usano funzioni in Python, è bene che tutte le istruzioni del programma si trovino all’interno di funzioni => si usa la funzione main come punto di partenza dell’esecuzione Serve un’istruzione nel programma che la invochi: main() → al di fuori di tutte le definizioni AMBITO DI VISIBILITÀ DELLE VARIABILI = porzione del programma dove esse sono visibili Le variabili possono essere dichiarate: o dentro una funzione = variabili locali

  • disponibili solo all’interno della funzione => non visibili da altre funzioni
  • gli argomenti sono come variabili locali o fuori dalle funzioni = variabili globali
  • possono essere usate (e modificate) in qualsiasi funzione => visibili a tutte le funzioni sum, square & i sono variabili locali in main

LISTE Una lista è una struttura dati versatile e dinamica, che contiene un numero variabile di elementi a cui si può accedere tramite la loro posizione (indice) SINTASSI Per creare una lista: [ valore1 , valore2 , ...] Per accedere a un elemento: lista [ indice ] es. list1 = [ ] → lista vuota list2 = [32, 54, 67, 29, 35, 86] → lista con valori iniziali secondo_elemento = list2[ 1 ] → accedo all’elemento della lista in posizione 1 list2[ 1 ] = 58 → se voglio cambiare un elemento della lista N.B: liste ≠ stringhe: le liste possono contenere valori di ogni tipo e sono mutabili (il valore di ogni elemento può essere aggiornato, si possono aggiungere/eliminare elementi); le stringhe sono sequenze esclusivamente di caratteri e sono immutabili (non è possibile cambiare caratteri nella sequenza) Errori “Out-of-Range”: si verificano quando si accede ad una lista fuori dall’intervallo consentito (ad es. accesso ad un elemento che non esiste) → ricordarsi che gli indici partono da 0 !!! Stampare una lista: una lista può essere passata come argomento alla funzione print()

values = [ 1, 2, 3 ] print(values) [1, 2, 3] print(values[0]) 1 Determinare la lunghezza di una lista: la funzione len() permette di ottenere la lunghezza della lista (= numero dei suoi elementi) num_elements = len(values) Uso delle parentesi quadre:

  • operatore di indicizzazione → quando seguono immediatamente il nome di una variabile (identificazione di un elemento della lista) values[4]
  • nuova lista → quando seguono un “=” values = [4] Cicli sui valori degli indici: for i in range(len(values)): print(i, values[i] }" ) Cicli sui valori degli elementi: for element in values: print(element) Cicli su indici e valori insieme: funzione enumerate per estrarre da una lista tutte le coppie (indice, valore) ed iterare su di esse for (i, element) in enumerate(values): print(i, element) Riferimenti alla lista: variabile (riferimento alla lista) ≠ contenuto della lista Variabile: contiene un riferimento al contenuto della lista => indica il luogo in cui si trova il contenuto della lista (in memoria) Contenuto della lista: memoria dove i dati sono contenuti i: variabile che indica gli indici degli elementi della lista values ad ogni ciclo, element prende il valore di ogni elemento della lista values ad ogni ciclo, i prende il valore dell’indice di un elemento ed element prende il valore di ogni elemento della lista