Comando for: eseguire un ciclo Come eseguire una sequenza di

Avviare il programma (Tutti i Programmi…Python 2.6…Idle)
Nella python shell scrivere
print "prova"
e dare invio (da qui in poi si sottintende l’invio dopo ogni istruzione).
Il comando print fa scrivere a video una sequenza di caratteri (quelli compresi tra virgolette).
Scrivere
print 3+2
Scrivere
a=5
b=7
print a + b
Modificare il valore di a e riprovare
a=11
print a + b
Provare il comando
print "La somma di a+b è uguale a ", a+b
Comando for: eseguire un ciclo
Provare il ciclo
for j in range(1,13):
print j, " x ", 8, " = ", j*8
Sarà necessario dare invio due volte per eseguire il ciclo.
Verrà stampata a video la tabellina dell’8 fino a 8x12.
La seconda riga viene ripetuta per j che assume i valori che vanno da 1 a 12.
L’operatore range(a,b) restituisce 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.
Provare ora a parametrizzare il numero di cui si vuole la tabellina facendo così:
m=7
for j in range(1,13):
print j, " x ", m, " = ", j*m
Provare a cambiare il valore di m e a rieseguire il ciclo. Per rieseguire un’istruzione muoversi in su con le frecce e
dare invio quando ci si trova sulla riga giusta
Come eseguire una sequenza di istruzioni
Aprire un editor di testo (ovvero Blocco Note oppure WordPad oppure dalla Phyton Shell andare sulla barra degli
strumenti e cliccare File-New Window)
Copiarvi il seguente testo:
m=4
for j in range(1,13):
print j, " x ", m, " = ", j*m
raw_input("Fine")
Salvare il file come prova.py in qualche posizione del vostro computer.
Andare sul file e farvi doppio click.
Verificare che si apra una finestra nella quale sia visualizzata la tabellina del 6.
Il file che avere creato rappresenta un minuscolo programma che viene eseguito dall’interprete Python. E’
l’estensione .py che specifica il fatto che il file creato sia un programma scritto in Python, e quindi vada interpretato
dal computer in quel modo.
L’ultima riga serve per evitare che la finestra si chiuda immediatamente.
Alternativamente il programma può essere lanciato direttamente dalla window di Python premendo il tasto F5.
Doppio ciclo
for m in range(1,13):
for j in range(1,13):
print j, " x ", m, " = ", j*m
print "------------------- "
In questo modo m va da 1 a 12, e per ogni valore di m si riesegue il ciclo della tabellina.
L’indentatura (lo spazio di ogni riga da sinistra) è importante per stabilire cosa faccia parte del ciclo. Ad esempio il
comando print "------------------- " fa parte del primo ciclo e viene ripetuto solo una volta per ogni valore di m.
Ricevere parametri dall’utente
risp = raw_input("Come ti chiami? ")
Ora fare eseguire invece
print "Ciao, ", risp
Il primo comando chiede all’utente di inserire il nome e lo memorizza nella variabile risp.
Il secondo comando utilizza la variabile.
Provare ad eseguire questi due comandi per fare scegliere all’utente la tabellina che vuole visualizzare
m = int(raw_input("Di quale numero vuoi visualizzare la tabellina? Scegli un numero: "))
for j in range(1,13):
print j, " x ", m, " = ", j*m
Il commando int trasforma il testo che si inserisce per farlo considerare come un numero.
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, " x 6 =", 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.
Vettori
Un vettore è un insieme di elementi, che possono essere sequenze di caratteri (si chiamano stringhe) o numeri.
Creare un file con il seguente testo ed eseguirlo.
vettore=[34, "aaaaa", 453]
print vettore[0]
print vettore[1]
print vettore[2]
raw_input("Fine")
Nella prima riga si sono specificati gli elementi del vettore.
Nelle righe successive si sono stampati a video gli elementi.
Osservare che 0 indica il primo elemento, 1 il secondo, ecc.
E’ anche possibile che non si sappia a priori quanti sono gli elementi del vettore, per cui si può dichiararlo vuoto ed
aggiungervi poi elementi con il comando append. Provare l’esempio sotto.
valori = []
for i in range(1,13):
valori.append(i*i)
print valori[0]
print valori[1]
print valori[2]
print valori[3]
raw_input("Fine")
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).
Nell’esempio sotto si importa il modulo string (che contiene funzioni per lavorare con le stringhe, ovvero gli insiemi
di lettere) 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")
Queste funzioni accettano tra parentesi un certo numero di argomenti su cui lavorare. 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[1]
print v[2]
print v[3]
print "Ci sono %s parole" %len(v)
raw_input("-------")
Una funzione che sarà utile in seguito è la funzione 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 negli esercizi sotto è 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.
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()
Esercizi:
1) Scrivere un file che abbia uno sotto l’altro tutti i numeri dispari tra 1 e 100
2) Scrivere un file che abbia uno sotto l’altro tutti i numeri primi tra 1 e 100
Attenzione: il comando a%b ci dice qual è il resto di a:b
Ad esempio 45%6 ci restituisce 3
3) Fare un programma che chiede all’utente di indicare due numeri e restituisce i numeri primi compresi tra i
due numeri
Funzioni
E’ possibile scrivere un file che contenga delle funzioni da riutilizzare in altri programmi.
numeri
funzione
vettori
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 funzioni1T.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 funzioni1T
print funzioni1T.quadrato(2)
raw_input ("Fine")
Abbiamo utilizzato la funzione che sta nel file funzioni1T.py
Per un esempio meni banale aggiungiamo a funzioni1T.py
def scriviNumeriPrimi(x,y):
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("%s \n"%j)
Questa funzione accetta come argomento due numeri e scrive su un file tutti I numeri primi compresi tra essi.
L’esercizio 3 diventa allora
import funzioni1T
a= raw_input ("Numero inizio = ")
b= raw_input ("Numero fine = ")
x=int(a)
y=int(b)
funzioni4A .scriviNumeriPrimi(x,y)
Le due righe
x=int(a)
y=int(b)
servono a specificare che l’utente ha inserito dei numeri interi.
Operatori logici and e or.
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.
L’operatore logico and concatena due condizioni in una sola condizione che è vera quando sono vere entrambe le
condizioni concatenate.
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"
Il programma seguente ha un comportamento diverso per la presenza dell’operatore logico or invece che and.
L’operatore logico or concatena due condizioni in una sola condizione che è vera quando è vera almeno una delle
condizioni concatenate.
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"
Provare a svolgere i seguenti esercizi, eseguendo il programma solo come verifica.
1) Cosa scrive a video il seguente programma ?
a=5
for j in range(0,6):
if (a%3==0 or j%2==0):
a=a+1
else:
a=a+2
print a
2) Cosa scrive a video il seguente programma ?
a=5
for j in range(0,6):
if (a%3==0 and j%2==0):
a=a+1
else:
a=a+2
print a
3) Cosa scrive a video il seguente programma ?
s=1
for j in range(1,10):
if (s%2==0 or j%2==0):
s= s+j+1
print s
4) Cosa scrive a video il seguente programma ?
lista = [3]
for i in range(1,4):
a= lista[i-1]+i
if (a>5 and a<10):
a=a+2
lista.append(a)
s=0
for i in range(0,4):
s=s+lista[i]
print s
Esercizi di riepilogo:
1) Spiegare cosa fa il seguente programma, aiutandosi con almeno due esempi (l’operatore % restituisce il resto
della divisione tra due numeri interi, ad esempio 12%5 è 2)
a= int(raw_input ("Numero di partenza = "))
if a%5 != 0:
a = a+ 5 - (a%5)
while a <51:
print a
a=a+5
2) Cosa scrive a video il seguente programma durante la sua esecuzione ?
for j in range(2,4):
for k in range(1,4):
print j-k
3) Cosa scrive a video il seguente programma durante la sua esecuzione ?
v=[]
v.append(3)
for j in range(1,6):
v.append(v[j-1]+j)
for j in range(0,6):
print v[j]
4) Cosa scrive a video il seguente programma ?
x=3
while (x < 20 or x%4==0):
x = x+7
print x
5) Cosa scrive a video il seguente programma ?
x=0
y=10
while (x*y < 20):
y = y-1
x = x+1
print x+2*y
6) Scrivere un programma che chiede all’utente di inserire un numero dispari minore di 50. Se il numero soddisfa la
richiesta il programma scrive a video “Numero valido” altrimenti scrive “Numero non valido”.
7) Il seguente programma alla seconda riga “estrae” un numero intero casuale tra 1 e 100, e lo assegna alla
variabile a. Come continua l’interazione con l’utente ?
import random
a=random.randint(1,100)
b=0
while (b != a):
b = int(raw_input("Indovina il numero: "))
c = b-a
if (c > -6 and c < 6 and c!=0):
print "Hai quasi indovinato"
print "OK"
8) Scrivere un programma che:
-) chiede all’utente di inserire un numero intero
-) riempie un vettore con tutti i divisori del numero inserito (escludendo il numero stesso)
-) calcola la somma di tutti gli elementi del vettore
-) se la somma è uguale al numero inserito dall’utente, scrive a video “Perfetto”
http://it.wikipedia.org/wiki/Numero_perfetto