Guida Python - Istituto Fermi Polo Montale

Avviare il programma (Tutti i Programmi…Python 2.7…Idle).
Quello che si è avviato è l’ambiente di sviluppo di Python, che serve per facilitare il programmatore nello scrivere
programmi usando Python.
Dalla Phyton Shell andare sulla barra degli strumenti e cliccare File-New Window.
La finestra che si è aperta è dove si deve scrivere il programma.
A titolo di esempio, scrivervi le seguenti righe
print “il mio primo programma in Python”
raw_input("")
Per eseguire il programma andare sulla barra degli strumenti e cliccare Run->Run Module (oppure premere F5).
Vi verrà chiesto dove salvare il programma e con che nome. Terminare il nome del programma con l’estensione .py
in modo che il sistema operativo sappia che si tratta di un programma scritto in python.
Il programma verrà eseguito nella Python Shell.
Tuttavia, se andate a cercarlo da Risorse del Computer->… potrete eseguirlo anche semplicemente facendovi sopra
un doppio-click come per qualunque altro programma.
Si può scrivere un programma anche utilizzando un editor di testo (Blocco Note, WordPad, …) ricordandosi
comunque di salvarlo con l’estensione .py.
Comando print
E’ il commando utilizzato nel programma precedente, e semplicemente richiede la scrittura a video di ciò che è
indicato successivamente tra virgolette.
Tipi di variabile
Si possono utilizzare numeri interi, numeri decimali, stringhe (ovvero sequenze di caratteri).
Se scrivo a=5 sto dicendo che nella variabile a inserisco il numero 5. Tutte le volte che mi riferisco ad a, mi sto
riferendo al numero 5.
Provare questo programma:
a=2
b=3*2
print a
print b
print a+b
In questo programma alla variabile x viene assegnata una stringa, che poi viene scritta a video:
x=”classe 1t”
print x
Il comando “+” se eseguito tra due numeri fa ovviamente la somma, se invece è eseguito tra due stringhe le
“attacca” assieme.
Ad esempio provare:
a=”mi piace ”
b=”la matematica”
print a+b
Se provo il seguente programma va in errore:
a=1
b=”t”
print a+b
Se provo questo invece non va in errore:
a=”1”
b=”t”
print a+b
La differenza è che nel primo caso sta usando il + tra un numero e una stringa, e non si può.
Nel secondo caso alla variabile a è assegnata la stringa “1” e non il numero 1.
Non esiste un solo tipo numerico: ci sono gli interi (int) e i decimali (float).
Comando for: eseguire un ciclo
Provare il programma
for j in range(1,13):
print j*8
Verrà stampata a video la tabellina dell’8 fino a 8x12.
Il comando for esegue un ciclo, cioè ripete alcune operazioni un certo numero di volte.
In questo caso la seconda riga viene ripetuta per j che assume i valori che vanno da 1 a 12.
L’operatore range(a,b) restituisce infatti l’insieme di tutti i numeri compresi tra a compreso e b escluso.
Quindi utilizzare range(1,12) vuol dire ripetere il ciclo con j che va da 1 a 12.
Attenzione ai caratteri all’inizio della riga (si chiama indentazione). I comandi ripetuti sono quelli che si trovano
“internamente” rispetto al for.
Provare la differenza tra questo programma
for j in range(1,13):
print j*8
print "---"
e quest’altro
for j in range(1,13):
print j*8
print "---"
Doppio ciclo
for m in range(1,13):
for j in range(1,13):
print j*m
print "------------------- "
In questo modo m va da 1 a 12, e per ogni valore di m si riesegue il ciclo della tabellina.
Ricevere parametri dall’utente
Provare questo programma:
risp = raw_input("Come ti chiami? ")
print "Ciao, " + risp
Alla prima riga il comando raw_input chiede all’utente di inserire il nome e lo memorizza nella variabile risp.
Il secondo comando utilizza la variabile scrivendola a video.
Provare questo:
m = int(raw_input("Di quale numero vuoi visualizzare la tabellina? Scegli un numero: "))
for j in range(1,13):
print j*m
Attenzione: il comando int trasforma il testo che si inserisce per farlo considerare come un numero e non come
stringa. Allo stesso modo se si vuol far considerare un numero come stringa, si deve usare il comando str. Ad
esempio str(4) equivale a “4”.
Il comando float trasforma invece il dato inserito dall’utente in un numero decimale.
Il comando raw_input serve anche tutte le volte che voglio bloccare l’esecuzione di un programma. Se ad esempio
voglio lanciare il programma direttamente dal sistema operativo (doppio click) dovrò sempre terminare con
raw_input(””) altrimenti la finestra su cui lo esegue si chiude subito.
Comando while: un altro modo per eseguire un ciclo
Il comando while ripete le istruzioni fino a quando una certa condizione è vera.
j=1
while j < 12:
print j*6
j=j+1
Se eseguiste i due comandi sopra senza l’ultima istruzione j=j+1 il ciclo non finirebbe mai perché la condizione j < 12
sarebbe sempre vera.
Se provate a farlo preparatevi a dover chiudere e riaprire la Python Shell per uscire da questo che si chiama loop
infinito.
Comandi if-else (se…altrimenti…)
Provare a creare un altro file con il seguente testo, salvarlo ed eseguirlo
nome= raw_input("Chi ha scritto I Promessi Sposi?")
if (nome == "Manzoni"):
raw_input("Giusto!")
else:
raw_input("Sbagliato!")
If sta per SE e else per ALTRIMENTI.
Alla prima riga si fa all’utente una domanda e la risposta viene memorizzata nella variabile nome.
SE il nome inserito è Manzoni viene scritto “Giusto!” ALTRIMENTI “Sbagliato!”.
Osservare che per controllare se il nome è “Manzoni” viene usato il comando ==.
Il comando = serve ad assegnare un valore a una variabile.
Il comando == serve a fare il test di una condizione.
Comando %
Un comando che useremo per alcuni esercizi è il comando %:
a%b restituisce il resto della divisione tra a e b.
Esempi:
print 7%2
scriverà a video 1
print 12%4
scriverà a video 0
print 10%3
scriverà a video 1
print 15%4
scriverà a video 3
Liste (o Vettori)
Una lista è un insieme di elementi, anche di tipo diverso.
Creare un file con il seguente testo ed eseguirlo.
lista=[34, "aaaaa", 453]
print lista[0]
print lista[1]
print lista[2]
raw_input("Fine")
Nella prima riga si sono specificati gli elementi della lista.
Nelle righe successive scrivono a video gli elementi.
Osservare che lista[0] indica il primo elemento della lista, lista[1] il secondo, ecc.
Per aggiungere elementi ad una lista si usa il comando append. Provare l’esempio sotto.
valori = []
for i in range(0,4):
valori.append(i*i)
print valori[0]
print valori[1]
print valori[2]
print valori[3]
raw_input("Fine")
ALTRE FUNZIONI SULLE LISTE:
• per capire se un elemento è presente in una lista:
valori = []
for i in range(0,4):
valori.append(i*i)
if (5 in valori):
print “presente nella lista”
else:
print “assente dalla lista”
Dopo il ciclo for la lista valori sarà formata dagli elementi [0,1,4,9] quindi 5 non è nella lista e a video verrà
scritto “assente dalla lista”. Se invece il programma viene modificato così:
valori = []
for i in range(0,4):
valori.append(i*i)
if (9 in valori):
print “presente nella lista”
else:
print “assente dalla lista”
questa a volta a video verrà scritto “presente nella lista”
•
per capire in quale posizione della lista si trova un elemento si usa la funzione index in questo modo:
valori = []
for i in range(0,8):
valori.append(i*i)
print valori.index(25)
Dopo il ciclo for la lista valori sarà formata dagli elementi [0,1,4,9,16,25,36,49]
A video viene scritto “5” perché il numero 25 è nella posizione 5 della lista (ricordare che il primo elemento è
in posizione 0).
Funzioni di libreria
In Python ci sono delle funzioni predefinite che svolgono attività più complesse che quelle di un semplice comando.
Per utilizzarle bisogna prima importare in memoria il relativo modulo di libreria (cioè gruppo di funzioni).
Funzioni di libreria sulle stringhe:
Nell’esempio sotto si importa la libreria string (che contiene funzioni per lavorare con le stringhe, ovvero sequenze
di caratteri) e si usa la funzione upper che trasforma tutte le lettere di una stringa in maiuscole.
import string
print string.upper("Alessandro Manzoni")
raw_input("Fine")
Per chiamare una funzione di deve scrivere nome_libreria.nome_funzione. Le funzioni accettano tra parentesi un
certo numero di argomenti su cui lavorare (dati di input). Ad esempio la funzione upper vuole come argomento il
valore della stringa che deve trasformare.
Un altro esempio è la funzione split, sempre appartenente al modulo string.
La funzione spezza una stringa in parole, restituendo un vettore che ha come elementi queste parole
import string
v=string.split("Nel mezzo del cammin di nostra vita")
print v[0]
print v[3]
print v[5]
print "Ci sono ", len(v), "parole"
raw_input("-------")
Altro esempio è la funzione replace che sostituisce in un testo una stringa con un’altra, ad esempio così:
import string
s="Nel mezzo del cammin di nostra vita"
print s.replace("el","aa")
raw_input("-------")
Altre funzioni di libreria:
Una funzione utile è randint(a,b) del modulo random che restituisce un numero casuale intero compreso tra a e b
(estremi compresi).
import random
print random.randint(1, 200)
raw_input("-------")
Un'altra funzione utile è floor, che restituisce un numero arrotondato all’intero per difetto.
import math
print math.floor(1.43)
raw_input("----")
La funzione ceil arrotonda invece per eccesso.
import math
print math.ceil(1.43)
raw_input("----")
Sono disponibili con Python moltissimi moduli per gli usi più diversi, e altri si trovano su internet.
Stringhe come liste di caratteri
Una stringa viene interpretata da Python come una lista di caratteri.
Ad esempio la stringa “ciao” è equivalente ad una lista così composta: [c,i,a,o].
Quindi il seguente programma
s = "informatica"
print s[3]
print s[5]
scrive a video la lettera “o” e la lettera “m”.
Si può anche fare un ciclo sui caratteri di una stringa.
Il seguente programma chiede all’utente di inserire una parola, e scrive a video una parola ottenuta dalla precedente
sostituendo le “a” con il carattere “x”.
parola = raw_input("Inserire una parola: ")
nuovaparola = ""
for lettera in parola:
if (lettera == "a"):
nuovaparola = nuovaparola + "x"
else:
nuovaparola = nuovaparola + lettera
print nuovaparola
Esercizio: scrivere un programma che chieda all’utente di inserire una parola, e scriva a video il numero di vocali
contenute nella parola.
Come leggere un file
f=open('testo_di_prova.txt', 'r')
s = f.read()
print s
Alla prima riga il file viene aperto il file con il comando open, specificando come primo argomento il nome del file e
come secondo argomento la lettera “r” (che sta per read, indicando che il file lo si vuole scrivere).
Nella variabile s viene letto il contenuto del file, che successivamente viene scritto a video.
Come scrivere un file
Intanto va aperto un file con il comando open, specificando come primo argomento il nome del file e come secondo
argomento la lettera “w” (che sta per write, indicando che il file lo si vuole scrivere). Se il file non esiste viene creato.
Poi con write si aggiunge testo al file. Osservare che \n alla fine delle stringhe serve per andare a capo nel file. Non
mettendolo si troverebbe tutto il testo in unica riga.
outp = open("divinaCommedia.txt","w")
outp.write("Nel mezzo del cammin\n")
outp.write("di nostra vita,\n")
outp.write("mi ritrovai per una selva oscura\n")
outp.close()
Operatori logici and e or.
L’operatore logico and unisce due condizioni in una sola condizione che è vera quando lo sono entrambe.
Il seguente programma alla prima riga chiede di inserire un numero.
La condizione dell’if alla seconda riga è vero quando sia a > 20 che a%3=0.
a=int(raw_input("Scegli un numero maggiore di 20 e anche divisibile per 3: "))
if (a > 20 and a%3==0):
print "OK"
else:
print "Numero non valido"
L’operatore logico or unisce due condizioni in una sola condizione che è vera quando lo è almeno una delle due.
Esempio:
a=int(raw_input("Scegli un numero maggiore di 20 oppure divisibile per 3: "))
if (a > 20 or a%3==0):
print "OK"
else:
print "Numero non valido"
Funzioni
Non soltanto le funzioni possono essere disponibili all’interno delle librerie, è anche possibile scrivere un file che
contenga funzioni scritte da noi.
numeri
funzione
liste
…..
stringhe
•
•
•
I dati di input (entrata) della funzione sono chiamati argomenti.
La funzione deve essere collocata in un file esterno (insieme ad altre funzioni)
L’argomento (o gli argomenti) vengono specificati quando la funzione viene chiamata
Ad esempio se salviamo il seguente testo
def quadrato(x):
return x*x
in un file (che possiamo chiamare leMieFunzioni.py), tutte le volte che vogliamo fare il quadrato di un numero
possiamo invocare questa funzione.
Sarà prima necessario fare l’import del file con le funzioni.
Ad esempio proviamo a costruire un programma di questo tipo
import leMieFunzioni
print leMieFunzioni.quadrato(2)
raw_input ("Fine")
Abbiamo utilizzato la funzione che sta nel file leMieFunzioni.py
Per un esempio meno banale aggiungiamo a leMieFunzioni.py
def scriviNumeriPrimi(a,b):
for j in range(a,b):
div=0
for i in range(2,j):
if (j%i == 0):
div=div+1
if div == 0:
print j
Questa funzione accetta come argomento due numeri e scrive a video tutti i numeri primi compresi tra essi.
Eseguendo quindi il programma
import leMieFunzioni
leMieFunzioni.scriviNumeriPrimi(5,100)
saranno scritti a video tutti i numeri primi compresi tra 5 e 100.
La funzione seguente è simile a quella precedente, ma questa volta i numeri primi vengono scritti nel file
numeriPrimi.txt.
def scriviNumeriPrimiSuFile(a,b):
outp = open("numeriPrimi.txt","w")
for j in range(a,b):
div=0
for i in range(2,j):
if (j%i == 0):
div=div+1
if div == 0:
outp.write(str(j) + "\n")
ESERCIZIO:
Modificare la funzione scriviNumeriPrimiSuFile in modo che richieda come terzo argomento il nome del file su cui
scrivere.