Premessa :
Linguaggi di Programmazione
• Per l’automazione del processo di risoluzione di un
problema il primo passo è determinare l’algoritmo
giusto
• Stabilito l'algoritmo, questo deve essere tradotto in un
linguaggio “comprensibile” al computer (Linguaggio
macchina).
• Per poter dare alla macchina una serie di comandi
“vicini” al linguaggio naturale sono nati i linguaggi di
programmazione. Questi sono linguaggi formali
costituiti da una grammatica con relative regole
(sintassi del linguaggio).
• Un programma è la traduzione di un algoritmo in un
linguaggio di programmazione e deve essere corretto in
termini di “significato” (semantica).
Premessa :
Linguaggi Compilati
• Il compilatore riceve in input l’intero programma
“sorgente” e restituisce in output il codice eseguibile
(in linguaggio macchina)
• in esecuzione, il sorgente (e il compilatore) non
servono più (es: traduzione di un libro)
• La compilazione si compone di 3 fasi
Premessa :
Linguaggi Interpretati
• L’interprete traduce e manda in esecuzione il
programma man mano che processa il
sorgente;
• L’interprete rimane in memoria durante
l’esecuzione (es: traduzione simultanea)
Introduzione al linguaggio
Perché Python
• Adatto ai “principianti”
• Facile da imparare (e da insegnare)
• Non è usato solo dagli studenti ma anche dai
programmatori professionisti
• E’ open-source e può essere utilizzato
liberamente.
Download
Scaricare ed installare il programma dal sito:
http://www.python.org/download/
scegliendo la versione adatta al sistema
operativo installato sul proprio pc (Windows,
Linux, Mac OS X).
Alcuni Manuali
• Documentazione standard di Python:
http://python.org/doc/
• Manuale di ausilio per l'insegnamento della
programmazione. Autori: Aurora Martina,
Angelo Raffaele Meo, Clotilde Moro e Mario
Scovazzi:
http://linuxdidattica.org/polito/manualepython-V2.pdf
Python Shell
Avvia IDLE(Python GUI)
Python Shell
• Possiamo usare la Shell come una calcolatrice.
• Un’istruzione è un’operazione che l’interprete
di Python è in grado di eseguire.
• Prova a digitare nella linea indicata con “>>>”
alcune operazioni
• Esempio:
Tipi numerici
• Attenzione: Per Python la divisione tra due
numeri interi è sempre un numero intero
approssimato per difetto:
• Bisogna usare la divisione in virgola mobile
(scrivere il numero seguito dal punto):
Espressioni
• In Python per le espressioni numeriche si usano solo le parentesi
tonde, non si possono usare le parentesi quadre e quelle graffe.
• Python segue le stesse regole della matematica per quanto riguarda
l’ordine di esecuzione delle operazioni: prima le parentesi (partendo
da quelle più interne), poi l’elevamento a potenza, poi
moltiplicazione e divisione e infine somma e addizione. Quando
due operatori hanno la stessa priorità si procede da sinistra verso
destra.
• L’operazione di calcolo del resto di una divisione usa il simbolo %
(operazione di modulo):
• Esempi:
Le variabili
• Una variabile è una coppia:
nome = valore
• Il segno di uguale ('=') è usato per assegnare un
valore alla variabile
• I valori possono essere numeri, caratteri, parole o
frasi.
• In Python le variabili assumono il tipo del valore
che viene loro assegnato: numero, carattere o
serie di caratteri, e lo mantengono fino a quando
non viene loro assegnato un valore di tipo
diverso.
Le variabili
• I nomi delle variabili possono essere lunghi
quanto si desidera, possono contenere sia lettere
che numeri, ma devono sempre iniziare con una
lettera oppure con il carattere "_".
• È legale usare sia lettere maiuscole che
minuscole.
• Python è case sensitive : interpreta in modo
diverso i caratteri minuscoli dai caratteri
maiuscoli.
VAriabile ≠ variabile
Le variabili
Alcuni nomi non possono essere usati perché sono parole
riservate al linguaggio:
Nomi di variabile illegali come:
76strumenti, milione$, lambda
Produrranno un errore di sintassi
SyntaxError: invalid syntax
Stampa Variabili
• Per mostrare in output a video il contenuto di
una variabile di nome nome_variabile si usi
l’istruzione di stampa print:
>>> print nome_variabile1
E’ possibile stampare valori di più variabili con
una unica istruzione di print separando i nomi
delle variabili con una virgola
I dati
• I dati (valori) sono di tanti tipi diversi e dal tipo del dato
dipendono le operazioni che possiamo fare con essi.
• Esistono tipi di dati:
– semplici che includono lettere, numeri e serie di lettere
– complessi che non sono altro che una combinazione dei primi
• I dati semplici sono :
• I numeri : sappiamo che possono essere di tipo intero, reale
o “floating point” (virgola mobile o, più semplicemente,
numeri decimali con virgola).
• I caratteri: un carattere è un simbolo come, ad esempio, la
lettera “a” minuscola, la lettera “Q” maiuscola, la cifra ”7”, il
simbolo “+” e qualunque altro simbolo che compaia sulla
tastiera.
I dati
• Le stringhe sono tipi di dati complessi,
letteralmente per stringa si intende un qualunque
messaggio, quindi una serie di caratteri, cifre,
lettere (o altri simboli che si trovano sulla
tastiera), racchiusi tra virgolette, che il calcolatore
può stampare tali e quali sul video. In Python le
stringhe si possono rappresentare in diversi modi:
– tra virgolette semplici: 'ciao'
– tra virgolette doppie: “ciao”
– tra virgolette doppie ripetute tre volte “””ciao”””
Operazioni su stringhe
Le stringhe possono essere concatenate
(incollate assieme) tramite l'operatore +, e
ripetute tramite *:
>>> word = 'Help' + 'A'
>>> print word
HelpA
>>> '<' + word*5 + '>’
'<HelpAHelpAHelpAHelpAHelpA>'
Porzioni di Stringhe
• Le stringhe sono composte di unità più piccole: i
caratteri.
• Si accede ai singoli caratteri di una stringa utilizzando
l’operatore ‘*‘ …’+’
• L'espressione tra parentesi quadrate è un intero
chiamato indice (il primo carattere ha indice 0, poi c’è
l’1, il 2,…)
Esempio:
>>> nome=“Eva”
>>> cognome=“Sciacca”
>>> print “le mie iniziali sono:”,nome*0+,” “,cognome*0+
Porzioni di Stringhe
• Una intera porzione di stringa si ottiene usando l'espressione
var_stringa[i:j]
• Che ottiene la porzione della stringa dal carattere i-esimo al (j-1)esimo (partendo da 0), cioè il primo indice è incluso mentre il
secondo indice è escluso.
Esempio:
>>> nome=“Mariagrazia”
>>> n1=nome[0:5]
>>> n2=nome[5:11]
• Se non è specificato il primo indice (i) la porzione parte dall'inizio
della stringa. Senza il secondo indice (j) la porzione finisce con il
termine della stringa.
• var_stringa[:] è la stringa intera.
Programmi Python
• Dalla Shell, scegliete File, quindi New Window. Digitate:
print "Hello World"
• siamo nella finestra di editing. Qui possiamo salvare, modificare,
fare il debug di ciò che andremo a scrivere: in tutta libertà.
• Salvate dove volete il file (andando su File > Save), dandogli il nome
che preferite. Ma alla fine deve esserci l'estensione .py.
• Andate su Run >Run Module, apparirà la finestra di output con la
scritta:
Hello world!
Input
Per inserire un valore in una variabile in maniera
interattiva si possono utilizzare le istruzioni
input e raw_input:
nome_variabile= input(prompt)
prompt è un messaggio per l'utente per
chiedere che cosa deve inserire.
Esempio:
Anni = input("Quanti anni hai? ")
print "Tu hai ", Anni, " anni"
raw_input
• input funziona soltanto con i numeri e quindi con
le variabili numeriche (cioè le variabili di tipo
numero). Questo vuol dire che l'interprete
raccoglie il dato inserito e cerca di interpretarlo
come un numero.
• raw_input accetta qualunque carattere immesso
dall'utilizzatore.
Esempio:
nome = raw_input("Come ti chiami? ")
print "Ciao ", nome, “ !"
Esercizi
1. Scrivi il programma per calcolare l’area di
qualunque rettangolo chiedendo all’utilizzatore
la base e l’altezza.
2. Scrivi un programma che chiede tre numeri, ne
calcola la somma, la somma dei quadrati e il
quadrato della somma. Infine, visualizza i
risultati.
3. Scrivi un programma che chiede un numero n ed
una stringa s e stampi concatenate n volte la
stringa s
Istruzioni condizionali
L'istruzione che ci permette di scegliere cosa fare se si
verifica una determinata condizione si chiama if
if <condizione> :
<istruzione_1>
<istruzione_2>
…
<istruzione_n>
Le istruzioni da eseguire nel caso di verifica della
condizione devono essere indentate rispetto all’ if
Operatori Condizionali
•
•
•
•
•
•
•
= = uguale
< minore di
<= minore o uguale a
> maggiore di
>= maggiore o uguale a
!= diverso da (primo modo)
< > diverso da (secondo modo)
Operatori Logici
Per condizioni più complesse possono essere
usati gli operatori booleani:
• or
• and
• not
Esempio:
if maggiorenne == "si" and prigione == "no" :
print "puoi votare"
If … else
• L'istruzione if può essere anche più complicata, in quanto ci
consente di dire cosa fare sia quando la condizione è
soddisfatta sia quando non è soddisfatta.
Esempio: Dati due numeri, stabiliamo se il primo è maggiore o
minore del secondo.
num1= input("Introduci il primo numero ")
num2 = input("Introduci il secondo numero ")
if num1 > num2:
print num1, " è maggiore di ", num2
else:
print num1, " è minore o uguale a ", num2
if...elif...else
Molte volte ci sono più di due possibilità di scelta.
nome = raw_input("qual è il tuo nome? ")
if nome == "Carlo":
print "il tuo onomastico è il 4 novembre"
elif nome == "Francesca":
print "il tuo onomastico è il 9 marzo"
elif nome == "Anna":
print "il tuo onomastico è il 26 luglio"
elif nome == "Andrea":
print "il tuo onomastico è il 30 novembre"
elif nome == "Stefano"
print "il tuo onomastico è il 26 dicembre"
else:
print "non so quando è il tuo onomastico ma spero che ogni giorno sia la tua festa!"
elif è l'abbreviazione di "else if", che in inglese significa "altrimenti se". In
modo formale questa istruzione viene definita: condizioni in serie.
Esercizi
1. Controllare se un numero inserito in input è
pari o dispari
2. Scrivere un programma per chiedere
all’utente di indovinare un dato numero
aiutandolo se è più alto o più basso del
numero prescelto
I Cicli
Per eseguire azioni ripetitive si usano i “cicli” o
in inglese “loop”
Ci sono due tipi di “cicli” e tra i due c'è una
differenza molto importante.
• Il ciclo while, viene usato quando non si sa
prima quante volte deve ripetere l'azione.
• Il ciclo for, è usato quando si sa in anticipo
quante volte si dovrà ripetere l'azione.
While
while <condizione> :
<istruzione 1>
<istruzione 2>
…
<istruzione n>
L’istruzione while significa: "fai tutto quello che segue
fintantoché la relazione è soddisfatta".
Tutte le istruzioni che seguono la while <relazione> :
devono essere indentate se fanno parte delle cose da
fare quando <relazione> è soddisfatta.
Esempio
a=1
while a< 4 :
a=a+1
print a
Cicli annidati
• Un ciclo può contenere al suo interno istruzioni di controllo (if) o
altri cicli interni (annidati)
Esempio : stampa tutte le tabelline da 1 a 10
i=1
while i<=10:
print "Tabellina",i
j=1
while j<=10:
print i*j
Ciclo
interno
j=j+1
i=i+1
Ciclo
esterno
Esercizi
1. Trovare i divisori di un numero
2. Scrivi un programma che chiede una sequenza di
numeri da aggiungere ad una somma. Per terminare
inserisci 0.
3. Scrivi un programma che stampi:
5
4
3
2
1
5. Scrivi un programma che stampi la “serie di
Fibonacci”. Cioè, la somma di due elementi definisce
l'elemento successivo (1,1,2,3,5,8,13…..)
Esercizi
1. Cosa stampa questo programma?
i=2
j=1
while i <= 10 :
c=i
while c <= 5*j:
print c,
c=c+j
print '\n'
i=i+2
j=j+1
2. Scrivi un programma che stampi (usando due cicli annidati):
bravo
bravo
peperone
bravo
bravo
peperone peperone
bravo
bravo
peperone peperone peperone
Le Funzioni
Informalmente una funzione è un pezzo di programma cui
viene dato un nome.
E’ quindi un meccanismo semplice per specificare una
sola volta delle operazioni ricorrenti e per richiamare
quelle operazioni ogni volta che ci servono.
def nome_funz(var_1, var_2, ..., var_n)
La funzione sarà il programma che lavorerà sulle variabili
indicate.
Esempio:
def saluta(nome)
print “Ciao”, nome
Chiamata di funzione
• In generale, la chiamata di una funzione viene
effettuata scrivendo il nome della funzione,
seguita dai nomi delle variabili su cui lavorare
separati da virgole e racchiuse da parentesi.
Esempio:
mioNome=“Eva”
saluta(mioNome)
Return
• Qualche volta la funzione chiamata esegue dei
calcoli il cui risultato serve al programma
chiamante.
Esempio:
def doppio(numero):
n2 = numero * 2
return n2
prova=doppio(3)+doppio(5)
Ricorsione (un accenno)
Nel corpo di una funzione si può anche scrivere una o più istruzioni che
chiamino altre funzioni. Al limite, una funzione può anche chiamare se
stessa.
Supponiamo di voler calcolare il fattoriale del numero 7. Occorre scrivere:
fatt = 7*6*5*4*3*2
La funzione che calcola il fattoriale di un numero n dovrà essere scritta come
n moltiplicato per il fattoriale di (n-1); ad esempio:
fatt(7) = 7 * fatt(6)
E la funzione sarà:
def fatt(n):
if n == 1:
return 1
else:
return n * fatt(n-1)
Funzioni predefinite
Python fornisce alcune funzioni predefinite, ad
esempio:
• La funzione len (variabile stringa) restituisce la
lunghezza della stringa, cioè restituisce il numero
di caratteri della stringa.
• repr(variabile intero) converte un intero in una
stringa
• int(var) converte una stringa o un numero
decimale in un intero
• float(var) converte una stringa o un numero
intero in un decimale
Librerie
• Alcune funzioni predefinite sono raccolte in librerie. Ad esempio
funzioni già pronte che permettono di eseguire le più comuni
operazioni matematiche si trovano nella libreria: math
• Prima di poter usare le funzioni fornite da math, devi dire
all'interprete di caricare le funzioni in memoria. Questa operazione,
che si chiama "importazione", si scrive:
import math
Per utilizzare le funzioni si usa l’istruzione:
nome_modulo.nome_funzione (variabile)
Esempio:
val=4
res=math.sqrt(4)
print “La radice quadrata di”,val,”e’”,res
Esercizi
1) Scrivi un programma utilizzando la funzione che
chiede 2 numeri e visualizzi la somma, il valore
medio e visualizzi il minimo tra i due.
2) Scrivi un programma utilizzando la funzione che
chiede il lato di un quadrato, calcoli l’area del
quadrato e restituisca “grande” se maggiore di
100, “piccolo” altrimenti
3) Scrivi un programma utilizzando una funzione
che conta il numero di volte in cui la lettera 'a'
compare in una stringa, usando un contatore.
Le Liste
Una lista è un insieme ordinato di valori di qualunque tipo,
Esempio:
• [3,6,9,12,15] lista di tutti numeri interi
• ["Luigi","Mario","Nicola","Giuseppina"] lista di tutte stringhe
• ["pane","latte","zucchero",1,15,230,"bicchieri",1.5,2.5] lista mista:
3 stringhe, 3 numeri interi, 1 stringa, 2 numeri decimali
I valori della lista sono chiamati “elementi” .
Le parentesi quadrate * + iniziano e finiscono la lista e la virgola (“,”)
separa un elemento della lista dall'altro.
Non è obbligatorio che gli elementi di una lista siano tutti dello stesso
tipo, tutti numeri o tutte stringhe, ossia una lista può essere non
omogenea.
Esiste poi una lista speciale chiamata “lista vuota” e si indica con [ ]
Le Liste
• Le liste sono un tipo di variabile "composto".
• Le liste sono variabili che possono contenere più
di un valore.
• Come per le stringhe per accedere ai singoli
elementi di una lista si usa l’operatore [indice]
(l’elemento [0] è il primo elemento)
• Se un indice ha valore negativo il conteggio parte
dalla fine della lista.
• Questo metodo di usare l’indice negativo con*-1]
accederemo all’ultimo elemento, *-2] al
penultimo e così via.
Lunghezza Lista
• La funzione len applicata ad una lista produce
il numero di elementi di una lista, come nelle
stringhe.
Operazioni sulle liste
Come per le stringhe :
• L'operatore + concatena le liste:
• L'operatore * ripete una lista un dato numero
di volte.
• L’operatore [i:j] restituisce la porzione della
lista dall’indice i all’indice j. Ricordati: il primo
indice incluso, il secondo indice escluso.
Cancellazione
Con l’operatore porzione *i:j+ possiamo eliminare uno o
più elementi di una lista assegnando alla
corrispondente sezione una stringa vuota.
allievi_4E =
["gabriele","alessandro","anna","michela",
"antonio"]
allievi_4E[1:3] = []
print allievi_4E
Risultato --->>> gabriele michela antonio
In maniera esplicita con la funzione del è possibile
cancellare un elemento da una lista.
del allievi_4E[1:3]
Inserimento
Analogamente, possiamo inserire uno o più elementi in
una lista inserendoli in una sezione vuota nella
posizione desiderata:
>>> allievi_4E =
["gabriele","alessandro","anna","michela","antonio"]
>>>print allievi[2:2]
[]
>>>allievi_4E[2:2] = ["sandra", "andrea"]
>>>print allievi_4E
gabriele alessandro sandra andrea anna michela antonio
LISTE annidate
• Un elemento di una lista può essere a sua
volta una lista:
passeggeri =
[["bianchi","gabriele"],["verdi","alessandro"],["rossi",
"anna"],["neri","michela"]]
Qual è il cognome del secondo passeggero?
passeggero=passeggeri[1]
cognome=passeggero[0]
Oppure direttamente:
cognome=passeggeri[1][0]
Attraversamento Lista: ciclo for
• Stampare le iniziali di tutti i passeggeri
i = 0
while i < len(passeggeri) :
nome=passeggeri[i][0]
cognome=passeggeri[i][1]
print nome[0],cognome[0]
i = i + 1
• Questo ciclo può essere scritto anche in questo modo:
for passeggero in passeggeri:
print passeggero[0][0], passeggero[1][0]
Stesso risultato, ma il programma è molto più conciso. In termini generali
devo scrivere:
for <nome di variabile> in <nome di lista>:
• L’istruzione for significa: per ciascuna variabile della lista fai tutto quello
che segue
Lista speciale
• Una lista composta da tutti numeri interi consecutivi, si
crea con la funzione range.
• Scrivere [0,1,2,3,4] è equivalente a scrivere range(5)
• Con range si può scrivere: range(1,5) che è equivalente
a [1,2,3,4]
• La funzione range in questo caso legge dalla lista di interi gli
elementi che partono dal primo indice incluso e arrivano
all'ultimo indice escluso.
• Con range possiamo scrivere anche espressioni del tipo:
range(1,10,2) che è equivalente a [1,3,5,7,9]. Il terzo
indice si chiama "passo" e indica con quale intervallo
leggere i numeri dalla lista di interi partendo da 1 e
arrivando a 10 escluso
Esercizi
1. Scrivi un programma che analizzi le seguenti stringhe e
per ognuna stampi la lunghezza della parola:
banana, cipolla, bambino, finestra, girotondo
2. Scrivi un programma che sommi tutti gli elementi di una
lista data.
3. Scrivi un programma che esamini una lista di numeri e
conti il numero di volte in cui uno di questi numeri cade in
un determinato intervallo, ossia è superiore a un valore
indicato ed è inferiore ad un altro valore assegnato.
4. Prova a incapsulare il codice del programma in una
funzione chiamata "intervallo" che ha come parametri la
lista da controllare ed i valori Inferiore e Superiore.
I Commenti
• I "commenti" sono parole, frasi o testi brevi che servono a spiegare
bene le operazioni che il codice esegue.
• I commenti non sono esaminati dall'interprete che quando li
incontra passa oltre.
• E' molto importante aggiungere nei programmi alcune osservazioni
che spiegano le operazioni che vengono fatte perchè il codice risulta
molto piu' comprensibile anche allo stesso autore, che dopo un po'
di mesi puo' anche non ricordarsi più perchè aveva scritto le
istruzioni in quel modo.
• Attenzione a scrivere bene i commenti: inserire dei commenti che
contraddicono il codice è molto peggio che non avere commenti!
• I commenti in linea dovrebbero essere separati da almeno due spazi
dall'istruzione e devono iniziare con un # seguito da un singolo
spazio.