Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Laboratorio di Python
Istruzione di condizione, Input da tastiera, Iterazione incondizionata
Sara Zuppiroli
Università di Bologna
6 e 8 marzo 2013
Iterazione incondizionata
Sommario
1 Correzione esercizi
Tipi di errore e Debugging
2 Comando di Condizione Sintassi ed Esempi
3 Comando di richiesta Input Sintassi ed Esempi
4 Iterazione incondizionata Sintassi ed Esempi
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Tipi di errore e Debugging
Outline
1 Correzione esercizi
Tipi di errore e Debugging
2 Comando di Condizione Sintassi ed Esempi
3 Comando di richiesta Input Sintassi ed Esempi
4 Iterazione incondizionata Sintassi ed Esempi
Iterazione incondizionata
Esercizio confronto
Esercizio funzione sul confronto:
def conf(a,b):
return (a==b)
non serviva utilizzare l’istruzione di condizione
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Tipi di errore e Debugging
Esercizio scambio
Scrivere una funzione che presi come parametri due valori, scambia i valori ai parametri della funzione.
def scambio(a,b):
c=a a=b b=c
return(a,b)
Iterazione incondizionata
Esempio
import math
def equazione_sec_grado(a,b,c):
if a==0:
x1= -c/b return x1 else:
delta=b**2-4*a*c
radice_delta=math.sqrt(delta) x1=(-b-radice_delta)/2*a x2=(-b+radice_delta)/2*a return x1, x2
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Tipi di errore e Debugging
Errori
Risoluzione esercizio sulle equazioni di secondo grado.
Interpretiamo il nostro programma e proviamolo coi seguenti valori:
equazione_sec_grado(0,0,4) equazione_sec_grado(’x’,0,4) equazione_sec_grado(+,0,4) equazione_sec_grado(2,4,3) equazione_sec_grado(0,0,0)
Iterazione incondizionata
Tipi di errori
sintassi un’espressionenon è scritta correttamente (Python non capisce la sequenza e non sa come interpretare il comando),
non riesce ad eseguire il comando es: equazione_sec_grado(+,0,4) runtime unerrore eccezionaledel programma,
l’esecuzione del programma viene interrotta, equazione_sec_grado(0,0,4)
semantica il programma scrittonon è quello che si pensa, l’esecuzione può terminare normalmente, print('1'+'1') = '11'
Che tipo di errore é quello restituito dal comando equazione_sec_grado(’x’,0,4)?
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Tipi di errore e Debugging
Debugging
É quel processo nella produzione del software che ha come obiettivo l’eliminazione degli errori sintattici e semantici. Durante questo processo é necessario provare (testare) il programma che si é scritto piú volte. Per ogni tipo di errore vediamo la sua correzione:
sintassi → utilizzando gli errori dell’interprete o del compilatore correggere il codice
semantica → effettuare diverse prove, su diversi input, per capire se l’algoritmo é corretto
run-time → prevedere e gestire gli errori che possono verificarsi run-time per evitare l’interruzione anomala del programma
Iterazione incondizionata
Outline
1 Correzione esercizi
Tipi di errore e Debugging
2 Comando di Condizione Sintassi ed Esempi
3 Comando di richiesta Input Sintassi ed Esempi
4 Iterazione incondizionata Sintassi ed Esempi
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Perché la condizione
Data ax2+bx + c = 0 cosa accade quando a, b, c = 0?
Eseguendo il seguente comando equazione_sec_grado(0,0,0) cosa accade al nostro programma?
Possiamo evitare questo errore? Come?
Iterazione incondizionata
If...
if <condizione>:
< blocco di istruzioni_if>
condizione: é l’espressione booleana che sará valutata. Solo se l’espressione booleana restituirá True allora si eseguono le istruzioni del <blocco di istruzioni_if>
blocco di istruzioni_if: sono le istruzioni da eseguire solo nel caso risulti vera (True) l’espressione booleana della condizione
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Esempio
if a==0:
x1= -c/b return x1
a == 0 é l’espressione booleana da valutare. Solo quando alla variabile a é assegnato il valore 0 si ha che a == 0 restituisce True
x 1 = −c/b return x 1 é il blocco di istruzioni (stessa tabulazione) e vengono eseguiti solo se a vale 0. Avendo inserito il comando return questa istruzione fa terminare l’esecuzione della funzione.
Iterazione incondizionata
Operatori relazionali
Indicano uguaglianza, disuguaglianza o relazioni d’ordine:
x==y(x uguale a y ) x!=y(x diverso da y ) x>y(x maggiore di y ) x<y(x minore di y )
x>=y(x maggiore o uguale a y ) x<=y(x minore o uguale a y )
1 x==2
2 3==x
le precedenti sono valide, mentre la seguente. . .
3 4=x
che tipo di errore é?
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Else...
if <condizione>:
< blocco di istruzioni_if>
else:
< blocco di istruzioni_else>
else: é l’istruzione che nel caso in cui l’espressione booleana scritta in <condizione> sia valutata False permette di eseguire il
<blocco di istruzioni_else>
blocco di istruzioni_else: sono le istruzioni da eseguire solo nel caso risulti falsa (False) l’espressione booleana della condizione N.B. < blocco di istruzioni_if> e < blocco di istruzioni_else> sono dette ramificazioni. All’interno di entrambi i blocchi possono
Iterazione incondizionata
Esempio
import math
def equazione_sec_grado(a,b,c):
if a==0:
x1= -c/b return x1 else:
delta=b**2-4*a*c
radice_delta=math.sqrt(delta) x1=(-b-radice_delta)/2*a x2=(-b+radice_delta)/2*a return x1, x2
Ora é corretto il programma?
proviamo ad eseguire questo comando:
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Elif(1/2)
if <condizione>:
< blocco di istruzioni_if>
elif <condizione>:
< blocco di istruzioni_elif>
: else:
< blocco di istruzioni_else>
elif: é l’istruzione che indica di valutare l’espressione booleana presente nella condizione. Solo se l’espressione booleana restituisce il valore True allora si eseguono le istruzioni del
<blocco di istruzioni_elif>
blocco di istruzioni_elif: sono le istruzioni da eseguire solo nel caso risulti vera (True) l’espressione booleana della condizione
Iterazione incondizionata
Elif(2/2)
if <condizione>:
< blocco di istruzioni_if>
elif <condizione>:
< blocco di istruzioni_elif>
: else:
< blocco di istruzioni_else>
possono esserci diversi comandi elif uno di seguito all’altro, ma elif puó comparire solo all’interno del comando if
else: é il comando che attiva l’esecuzione del suo blocco di istruzioni <blocco di istruzioni_else>, tale attivazione avviene solo nel caso in cui tutte le condizioni antecedenti siano risultate
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Type None
Rappresentazione:
M= None; l’insieme dei valori appartenenti a questo tipo é il solo elemento None. Si dice insieme singoletto.
Operazioni:
M is None → confronta se M sia esattamente None M is not None → confronta se M sia diverso da None
Iterazione incondizionata
Esercizio
1 Correggere il codice in modo tale che non restituisca piú nessun errore usando il comando elif, e facendo restituire alla funzione sempre 2 valori.
2 Definire una funzione che presi come parametri (a,b,c) restituisca gli intervalli in cui risulta essere verificata la disequazione ax2+bx + c > 0
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Esempio Corretto solo con Elif
import math
def sec_grado(a,b,c):
if a==0 and b==0 and c==0:
return 'indeterminata', None elif a==0 and b==0:
return 'impossibile', None elif a==0:
return -c/b, None else:
delta=b**2-4*a*c if delta<0:
return 'impossibile', None else:
x1= (-b+math.sqrt(delta))/(2*a) x2= (-b-math.sqrt(delta))/(2*a) return x1, x2
Iterazione incondizionata
Disequazione
import equazione_sec_grado def disequazione(a,b,c):
x1,x2=equazione_sec_grado.equazione_sec_grado(a,b,c) if x1 is not None and x2 is not None:
if a>0:
print ("x<", x1, "and x>", x2) else:
print (x1,"<x<",x2)
elif x1 != "l'equazione e' impossibile" and x1!="l'equazione e' indeterminata" and x2 is None:
if b>=0:
print ("x>",x1) else:
print ("x<", x2)
elif x1== "l'equazione e' indeterminata" and x2 is None:
print("mai")
elif x1=="l'equazione e' impossibile" and x2 is None:
if a>0:
print ("sempre")
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Esercizi
Scrivere una funzione che dati due numeri dica se il primo é maggiore, minore o uguale del secondo
Scrivere una funzione che dati due numeri dica se il primo é divisore del secondo.
Iterazione incondizionata
Outline
1 Correzione esercizi
Tipi di errore e Debugging
2 Comando di Condizione Sintassi ed Esempi
3 Comando di richiesta Input Sintassi ed Esempi
4 Iterazione incondizionata Sintassi ed Esempi
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Input da tastiera Sintassi
<var> = raw_input('stringa descrittiva')
#esisteva nella versione 2.*
<var>= input('stringa descrittiva')
#esiste anche nella versione 3.*
var: indica il nome della variabile a cui si assegna il valore di input digitato da tastiera
raw_input(): era il comando che richiedeva in input la stringa di caratteri.
input(): é una funzione prende in input la stringa di caratteri, o un tipo di dato (tuple, list, int) specificato. es: int(input(’stringa descrittiva’))
Iterazione incondizionata
Esempi
import equazione_sec_grado def prova_input():
print('**programma che risolve l'equazione ax^2+bx+c=0 **\n') a= float(input("scrivi in valore di a \n"))
b=float(input("scrivi in valore di b \n")) c=float(input("scrivi in valore di c \n"))
return equazione_sec_grado.equazione_sec_grado(a,b,c)
Proviamo questo programma
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Input e Output vs parametri della funzione
Quali differenze ci sono tra il comando input, e la definizione di una funzione che prenda dei parametri di ingresso.
Iterazione incondizionata
Outline
1 Correzione esercizi
Tipi di errore e Debugging
2 Comando di Condizione Sintassi ed Esempi
3 Comando di richiesta Input Sintassi ed Esempi
4 Iterazione incondizionata Sintassi ed Esempi
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Iterazione Sintassi
for <var> in <sequence>:
<istruzioni_for>
var: indica il nome della variabile che assume ad ogni ciclo, in sequenza tutti i valori presenti in <tuple> e per ognuno di questi valori sono eseguite le <istruzioni_for>.
sequence: é un gruppo di tipi di dato in python.
istruzioni_for: sono l’insieme di istruzioni che vengono eseguite per tutti i valori presenti nella tupla
Iterazione incondizionata
Tipo Sequenza
Immutabili che non possono essere modificate una volta create stringhe (str ’ ’): tipo stringa di caratteri
tuple (tuple ( )): tipo tupla, un insieme di valori range: un iteratore
Mutabili che possono essere modificate una volta create Liste (List[ ]): una lista di valori di qualsiasi tipo
Tipo Dizionario (dict{ }): tipo di dato hash
· · ·
Per approfondire: http://docs.python.org/3.2/library/stdtypes.html
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Esempi
1 Scrivere una funzione che data stringa passata come parametro mi stampi tutti i caratteri diversi da a, b e c
2 Scrivere una funzione che data un stringa in input mi sostituisca i caratteri a, b e c in A, B, C
Iterazione incondizionata
Primo esercizio
Prima soluzione
def stampanoabc1(s):
for i in s:
if(i!='a' and i!='b' and i!='c'):
print i
Corrisponde direttamente al testo dell’esercizio.
E se volevamo escludere un numero di caratterimaggiore?
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Primo esercizio
Seconda soluzione
def stampanoabc2(s):
for i in s:
if(i<'a' or i>'c'):
print i
Notare che i caratteri da filtrare sonoconsecutivi.
Basta prendere solo quelli prima o dopo di quest’intervallo.
Iterazione incondizionata
Secondo esercizio
def stampanoabc3():
s=input('scrivi la stringa a cui eliminare a,b,c \n') for i in s:
if i=='a':
print('A') elif i=='b':
print('B') elif i=='c':
print ('C') else:
print(i)
Richiedo in input una stringa
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Esercizi
1 Scrivere una funzione che sostituisca ad ogni vocale minuscola l’equivalente maiuscola. (es. a = A, ecc...)
2 Scrivere una funzione che prenda come parametro una stringa mi scriva tutti i singoli caratteri appartenenti a tale stringa
3 Scrivere una funzione che prenda come parametro una stringa e mi dica se questa é palindroma (es. di stringhe palindrome abba, ara, ceaodoaec)
Iterazione incondizionata
Esercizi a casa
1 Scrivere una funzione che restituisca le vocali della stringa passata come parametro.
2 Scrivere una funzione che presa una stringa in input e non come paraemtro la scriva al contrario
3 Scrivere una funzione che sostituisca nella stringa passata come parametro, tutte le occorrenze di un dato carattere con un altro carattere anch’essi passati come parametro.
4 Inviate gli esercizi svolti a: labinfo.mat.unibo@gmail.com
Correzione esercizi Comando di Condizione Comando di richiesta Input Iterazione incondizionata
Sintassi ed Esempi
Cosa abbiamo fatto?
1 Correzione esercizi
Tipi di errore e Debugging
2 Comando di Condizione Sintassi ed Esempi
3 Comando di richiesta Input Sintassi ed Esempi
4 Iterazione incondizionata Sintassi ed Esempi