Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
AND TRACING
L’Hand-tracing è un metodo che aiuta a capire se un programma funziona correttamente. Consiste nel
tracciare a mano su un foglio l’evoluzione delle variabili. Crea una tabella delle variabili più importanti e
tiene traccia dei loro valori (con carta e penna). Utilizza il codice (o lo pseudocodice) per tracciare
l’esecuzione del programma e utilizza dati di input di esempio che generino un risultato prevedibile e noto
e testino tutti i rami del codice.
5 V O B
ARIABILI E PERATORI OOLEANI
Nel 1847 George Boole introdusse un nuovo tipo di formalismo logico, basato esclusivamente su enunciati
che potevano essere veri o falsi.
5.1 V ARIABILI BOOLEANE
Una variabile Booleana può solo essere Vera o Falsa (1 o 0). Una variabile booleana è spesso utilizzata
come flag (indicatore) proprio perché può essere solo vera o falsa. bool è un tipo di dato in Python (può
avere i valori True e False). La condizione di un’istruzione if è un valore Booleano.
5.2 O PERATORI BOOLEANI
Ci sono tre diversi operatori Booleani principali: and, or, not.
5.3 L EGGE DI DE MORGAN
La legge di De Morgan spiega come negare una combinazione di and e or:
è la stessa cosa di
not(A and B) not(A) or not(B)
è la stessa cosa di
not(A or B) not(A) and not(B)
Pagina [12]
CICLI
1 C
ICLO WHILE
I cicli sono utilizzati per ripetere diverse volte lo STESSO blocco di istruzioni a che una «condizione di ciclo»
rimane vera (True). In Python, un ciclo esegue istruzioni FINTANTO CHE LA CONDIZIONE È VERA. Per esempio:
balance = 10.0
TARGET = 100.0
year = 0
RATE = 5
while balance < TARGET:
year = year + 1
interest = balance * RATE/100
balance = balance + interest
1.1 C ICLI CONTROLLATI DA UN CONTATORE
Un ciclo while controllato da un contatore conta il numero di ripetizioni effettuate e si ferma quando sono
state completate un numero predefinito di iterazioni.
1.1.1 Off-by-One Errors
Il contatore può essere inizializzato a 0 o a 1, ma in informatica un contatore si inizializza solitamente a 0.
1.2 C ICLI CONTROLLATI DA UN EVENTO
Un ciclo while controllato da una condizione che, prima o poi, diventa falsa. Il numero di iterazioni non è
noto in anticipo.
1.3 I NTERRUZIONE ANTICIPATA DI UN CICLO
1.3.1 Break
Se all’interno di un ciclo si inserisce l’istruzione break il ciclo viene interrotto senza completare l’iterazione
corrente, anche se non sono state fatte tutte le iterazioni necessarie. L’esecuzione continua con le istruzioni
successive al ciclo.
1.3.2 Continue
Se all’interno di un ciclo si inserisce l’istruzione continue non viene completata l’iterazione corrente. Il ciclo
continua normalmente con l’iterazione successiva (senza terminare quella corrente).
2 V
ALORI SENTINELLA
Quando si legge una sequenza di input, spesso è necessario un metodo per indicare la fine della
sequenza. Quando non si sa quanti elementi ci sono un una lista, si può utilizzare un carattere o un valore
speciale per identificare l’ultimo della lista. Questo valore si chiama “sentinella”, che identifica la fine dei
data ma NON FA PARTE DEI DATI STESSI. Ad esempio: Per input di numeri interi positivi, si può ad esempio
usare 0 o -1. Pagina [13]
3 C
ICLO FOR
Il ciclo for…in serve a iterare su tutti i valori di un qualsiasi contenitore. Un contenitore è un oggetto (come
una stringa) che può memorizzare un insieme di elementi. Python ha diversi tipi di contenitori:
Una stringa è un contenitore di caratteri
Una lista è un contenitore di valori arbitrari (numerici, stringhe, liste, …)
Un file è un contenitore di linee di testo
3.1 C R
ONTENITORE ANGE
È un contenitore speciale di una sequenza di numeri consecutivi. Si genera con la funzione che
range(N)
crea una sequenza di interi da 0 a N-1. Quindi un for con un è equivalente a un ciclo while
range()
controllato da un contatore.
3.2 C ’
ICLARE SULL INDICE E VALORE
La funzione enumerate trasforma un contenitore un qualsiasi contenitore in una sequenza di coppie.
for (indice, valore) in enumerate(nome):
4 G
ENERAZIONE NUMERI CASUALI
Python mette a disposizione un generatore di numeri casuali che produce numeri che sembrano casuali. I
numeri sono in realtà pseudo-casuali. Sono infatti estratti da una sequenza di numeri non consecutivi che
non si ripetono (a meno di continuare nella sequenza per molto tempo). Il generatore di numeri casuali si
trova nel modulo random from random random
import
La funzione ritorna un numero compreso tra 0 e 1. Invece la funzione ritorna un
random() randint(a,b)
numero intero compreso tra a e b. Pagina [14]
FUNZIONI
Le funzioni sono come ‘scatole nere’: si passa alla funzione ciò che le serve per eseguire il suo compito e si
ottiene il risultato. Una funzione è una sequenza di istruzioni a cui viene dato un nome. Si invoca (o
chiama) una funzione per eseguire le sue istruzioni. Quando una funzione termina, il risultato ottenuto è
restituito dalla funzione e può essere usato in un’espressione.
1 A RGOMENTI
I valori che passiamo alle funzioni sono detti argomenti dell’invocazione di una funzione. Le funzioni
possono ricevere diversi argomenti ed è anche possibile avere funzioni senza argomenti.
1.1 P
ASSAGGIO DEI PARAMETRI
Le variabili parametro (parametri formali) ricevono gli argomenti (parametri effettivi o parametri attuali)
dell’invocazione della funzione. Gli argomenti possono essere il valore corrente di una variabile o
un’espressione (funzione o lambda). La variabile parametro è dichiarata nella funzione invocata.
1.2 P
ARAMETRI POSIZIONALI O NOMINALI
Nella chiamata a funzione, gli argomenti possono venire associati alle variabili parametro in due modi
POSITIONAL PARAMETERS: associo la posizione del dato all’argomento. Il primo argomento passato
andrà ad inizializzare la prima variabile parametro, il secondo la seconda, e così via
(comportamento di default).
NAMED PARAMETERS: uso il nome della variabile parametro per specificare a chi assegnare
l’argomento.
1.3 V ALORI DI DEFAULT
Le variabili parametro possono avere dei valori di default, che vengono usati se, durante la chiamata,
nessun argomento è assegnato a tale parametro. Ad esempio:
def complex(real = 0.0, imag = 0.0)
1.4 L ISTE DI ARGOMENTI VARIABILI
Viene utilizzata per permettere di passare un numero variabile di argomenti a una funzione (e non è
associata ad un nome). Una lista di parametri di questo genere è sempre posizionale. La sintassi è *args
nella definizione di funzione.
2 R ESTITUZIONE DEI VALORI
L’ “output” che la funzione calcola è detto valore restituito. La funzione restituisce un solo valore. Se volessi
restituire più valori, potrei aggirare la limitazione restituendo una lista o una tupla. Alcune funzioni non
hanno bisogno di restituire alcun valore. L’istruzione return termina immediatamente la funzione e passa il
valore di ritorno direttamente alla funzione che l’ha invocata. Tutte le diramazioni del flusso di esecuzione
di una funzione devono restituire un valore, portando la funzione a incontrare un enunciato return.
3 I MPORTARE MODULI
Alcune librerie sono disponibile per il download dal repository Python Package Index (PyPI).
pip install module
Pagina [15]
4 R EALIZZAZIONE DI UNA FUNZIONE
Per scrivere (‘definire’) una funzione bisogna:
Scegliere un nome per la funzione
Dichiarare una variabile per ogni argomento
Mettere assieme tutte queste informazioni con la parola riservata def per formare la prima riga
della definizione della funzione
L’istruzione def apre un nuovo blocco (compound statement), all’interno del quale scriveremo le istruzioni
che compongono il corpo della funzione.
5 L A FUNZIONE MAIN
Quando si definiscono e usano funzioni in Python, è bene che tutte le istruzioni del programma si trovino
all’interno di funzioni, indicandone una come punto di partenza dell’esecuzione. Qualsiasi nome può essere
per il punto di inizio, ma si sceglie per convenzione ‘main’ siccome è un nome usato in altri linguaggi molto
diffusi. Ovviamente, serve un’istruzione nel programma che invochi la funzione main. In generale,
l’invocazione della funzione main:
Dovrebbe essere eseguita se il programma è in esecuzione in modalità standalone
Non dovrebbe essere eseguita se il programma è importato, come modulo, in un programma più
ampio. Bisogna controllare la variabile speciale che contiene il nome del modulo (o la
__name__,
stringa ‘__main__’ se in modalità standalone)
if __name__ == '__main__':
# call the main function if we are running in
# standalone mode
# don’t call it if we are imported as a module
main()
Per evitare confusione, le variabili di sistema hanno nomi che iniziano e finiscono con doppio underscore.
Sono detti nomi “dunder” (che sta per double-underscore).
6 A MBITO DI VISIBILITÀ DELLE VARIABILI
Le variabili possono essere dichiarate:
Dentro una funzione: conosciute come ‘variabili locali’ e disponibili solo all’interno della
funzione
Fuori dalla funzione: talvolta detta ‘variabile globale’ e può essere usata e modificata in
qualsiasi funzione.
6.1 V ARIABILI GLOBALI
Sono variabili che sono definite all’esterno delle funzioni ed è visibile a tutte le funzioni. Qualsiasi funzione
che voglia aggiornare una variabile globale deve includere una dichiarazione global.
Pagina [16]
LISTE E TABELLE
1 L ISTE
Una lista è una struttura dati versatile e dinamica, che contiene un numero variabile di elementi, di
qualunque tipo, a cui si può avere accesso tramite la loro posizione (indice).
1.1 C REAZIONE DI UNA LISTA
Assegnare ad una variabile una nuova lista con l’operatore di indicizzazione [].
1.2 A CCESSO ALLE LISTE
Una lista è una sequenza di elementi, ognuno dei quali ha una posizione o indice che è un numero intero.
Per accedere ad un elemento della lista, specificare quale indice si vuole usare attraverso l’operatore di
indicizzazione (allo stesso modo in cui si accede ad un singolo carattere in una stringa). Gli indici partono
da 0.
1.2.1 Differenze con le stringhe
Sia le liste che le stringhe sono sequenze e l’operatore viene usato per accedere ad un elemento in
[]
qualsiasi sequenza. Esistono due differenze fra liste e stringhe:
Le liste possono contenere valori di ogni tipo, invece le stringhe sono sequenze