• Non ci sono risultati.

Laboratorio di Python Istruzione di condizione, Input da tastiera, Iterazione incondizionata Sara Zuppiroli

N/A
N/A
Protected

Academic year: 2021

Condividi "Laboratorio di Python Istruzione di condizione, Input da tastiera, Iterazione incondizionata Sara Zuppiroli"

Copied!
37
0
0

Testo completo

(1)

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

(2)

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

(3)

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

(4)

Iterazione incondizionata

Esercizio confronto

Esercizio funzione sul confronto:

def conf(a,b):

return (a==b)

non serviva utilizzare l’istruzione di condizione

(5)

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)

(6)

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

(7)

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)

(8)

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

(9)

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

(10)

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

(11)

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?

(12)

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

(13)

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.

(14)

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 é?

(15)

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

(16)

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:

(17)

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

(18)

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

(19)

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

(20)

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

(21)

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

(22)

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

(23)

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.

(24)

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

(25)

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

(26)

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

(27)

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.

(28)

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

(29)

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

(30)

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

(31)

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

(32)

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?

(33)

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.

(34)

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

(35)

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)

(36)

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

(37)

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

Riferimenti

Documenti correlati

La differenza di potenziale ai capi del condensatore si può esprimere, come prodotto del campo all’interno (uniforme) per la distanza fra le armature... l’energia

[r]

Essendo tutti metodi espliciti non richiedono decomposizioni LU o so- luzioni di sistemi lineari, invece le altre funzioni che usano metodi implici- ti richiedono per la soluzione

 Più comunemente, l'istruzione è un blocco di Più comunemente, l'istruzione è un blocco di istruzioni (insieme di istruzioni delimitata da. istruzioni (insieme di

Mentre la condizione di ingresso di un ciclo while essendo testata prima di eseguire il codice associato al ciclo, potrebbe se questa risulta falsa non fare nulla e riprendere

 Per seguire diversi (più di 2) rami alternativi a seconda del risultato di un’unica espressione si può sempre utilizzare una serie di costrutti if annidati (o in cascata). 

Parte if Blocco di istruzioni eseguite se la condizione di un if è true Parte else Blocco di istruzioni eseguite se la condizione di un if è false Blocco di istruzioni Sequenza

● Il blocco di istruzioni inoltre non può mai essere eseguito, poiché la condizione è verificata all'inizio, finché la condizione è vera, il blocco di istruzioni