Estratto del documento

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.

Variabili e operatori booleani

Nel 1847 George Boole introdusse un nuovo tipo di formalismo logico, basato esclusivamente su enunciati che potevano essere veri o falsi.

Variabili 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.

Operatori booleani

Ci sono tre diversi operatori Booleani principali: and, or, not.

Legge di De Morgan

La legge di De Morgan spiega come negare una combinazione di and e or:

  • not(A and B) è la stessa cosa di not(A) or not(B)
  • not(A or B) è la stessa cosa di not(A) and not(B)

Cicli

Ciclo 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

Cicli 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.

Cicli 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.

Interruzione anticipata di un ciclo

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.

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).

Valori 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 in 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 dati ma non fa parte dei dati stessi. Ad esempio: Per input di numeri interi positivi, si può ad esempio usare 0 o -1.

Ciclo 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

Contenitore range

È un contenitore speciale di una sequenza di numeri consecutivi. Si genera con la funzione range(N) che crea una sequenza di interi da 0 a N-1. Quindi un for con un range() è equivalente a un ciclo while controllato da un contatore.

Ciclare sull'indice e valore

La funzione enumerate trasforma un contenitore in una sequenza di coppie. Esempio:

for (indice, valore) in enumerate(nome):

Generazione 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 import random
La funzione random() ritorna un numero compreso tra 0 e 1. Invece la funzione randint(a,b) ritorna un numero intero compreso tra a e b.

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.

Argomenti

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.

Passaggio 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.

Parametri 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.

Valori 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)

Liste 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.

Restituzione 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.

Importare moduli

Alcune librerie sono disponibili per il download dal repository Python Package Index (PyPI).

pip install module

Realizzazione 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.

La 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 __name__, che contiene il nome del modulo (o la 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).

Ambito 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.

Variabili 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.

Liste e tabelle

Liste

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).

Creazione di una lista

Assegnare ad una variabile una nuova lista con l'operatore di indicizzazione [].

Accesso 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.

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, mentre le stringhe sono sequenze di caratteri.
Anteprima
Vedrai una selezione di 7 pagine su 26
Appunti completi di Informatica Pag. 1 Appunti completi di Informatica Pag. 2
Anteprima di 7 pagg. su 26.
Scarica il documento per vederlo tutto.
Appunti completi di Informatica Pag. 6
Anteprima di 7 pagg. su 26.
Scarica il documento per vederlo tutto.
Appunti completi di Informatica Pag. 11
Anteprima di 7 pagg. su 26.
Scarica il documento per vederlo tutto.
Appunti completi di Informatica Pag. 16
Anteprima di 7 pagg. su 26.
Scarica il documento per vederlo tutto.
Appunti completi di Informatica Pag. 21
Anteprima di 7 pagg. su 26.
Scarica il documento per vederlo tutto.
Appunti completi di Informatica Pag. 26
1 su 26
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher maurizio.costa.03 di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Torino o del prof Benso Alfredo.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community