laboratorio di python - plone sitezuppirol/lez4_2014.pdflaboratorio di python documentare il codice,...
TRANSCRIPT
Correzione eserciziLeggibilità
EserciziComprendere il codice
Laboratorio di PythonDocumentare il codice, Esercizi, Comprendere cosa calcola una
funzione
21 marzo 2014
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Sommario
1 Correzione esercizi
2 Leggibilità
3 Esercizi
4 Comprendere il codice
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Esercizi
Lunedì il numero di studenti che avevano consegnato gli esercizi era15.Martedì il numero di esercizi ricevuti era: 30.Da mercoledì alle 16:40 a giovedì alle 22 ho ricevuto più di 20esercizi.C’è stato un miglioramento.
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Esercizi a casa
Scrivere una funzione che presi due numeri come parametridella funzione mi stampi il MCD tra i due numeri. Usare ciclo fore whileScrivere una funzione che preso un numero come parametrorestituisca True se è primo, e False altrimenti. Usare ciclo for ewhileScrivere una funzione che preso un numero come parametro mistampi tutti i numeri primi che lo dividano. Usare ciclo for e whileScrivere una funzione che prese in input due stringhe le stampiordinate in ordine alfabetico.
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Esercizi a casa
Scrivere un unico programma, che attraverso un menù diselezione restituisca i risultati delle funzioni che seguono, senzauscire dal programma se non selezionando il numero 4.
la somma dei primi n numeri pari, dove n è richiesto in input(soluzione iterativa con for)la somma dei primi n numeri dispari, dove n è richiesto in input(soluzione iterativa con while)la serie geometrica di n numeri, dove n è richiesto in input(soluzione ricorsiva)
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Errori
def primi_pari(n):if n==1:
a=0elif n<1:
a='errore'else:
a=(n-1)*2+primi_pari(n-1)return a
cosa chiedeva l’esercizio?cosa fa l’algoritmo?
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Correzione
def MULTI ():print('Digita 1 per ottenere la somma dei primi n numeri pari')print('Digita 2 per ottenere la somma dei primi n numeri dispari')print('Digita 3 per ottenere la serie geometrica di x fino ad n')print('Digita 4 per uscire dal programma')w=int(input("Digita la tua scelta: "))while w<>4:
if w==1:a=int(input('Inserisci un numero: '))print(SOMMA_PARI(a))w=int(input("Digita la tua scelta: "))
# elif w==2: per gestire la somma disparielif w==3:
x=int(input('Inserisci il numero: '))n=int(input("Inserisci l'indice: "))print(SERIE_GEOMETRICA(x,n))w=int(input("Digita la tua scelta: "))
else:w=int(input("Scelta non valida, fai una nuova scelta: "))
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Definizione di leggibilità
La leggibilità è una qualità del codice sorgente che:facilita la lettura e la comprensione del codiceal fine di rendere meno costosa la manutenzione del software
Come mezzo per ottenere la leggibilità useremo alcuni elementistilistici di programmazione
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Elementi stilistici della programmazione
Tra gli elementi di stile del codice vediamo:commentiscelta dei nomi a moduli, funzioni e variabiliordine delle dichiarazioni e delle istruzioni
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Commento
Un commento è una frase che documenta una porzione di codice,volta a spiegare il funzionamento del codice stesso
l’interprete ignora i commenti (#: comando per indicare ilcommento)bisogna inserirli in una giusta quantità
Vediamo tre tipologie di commenti:Documentali: descrivono quale problema si sta risolvendoImplementativi: descrivono i passi principali dell’algoritmoAssertivi: descrivono proprietà durante l’esecuzione delprogramma
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
I nomi
Scelta dei nomi:I nomi dei moduli, delle funzioni e delle variabili sonoidentificatori composti da una sequenza non vuota di caratteri ecifre, iniziante con un caratterePer aumentare la leggibilità: scegliere e utilizzare solo nomi chesiano significativi e richiamino il senso dell’algoritmo
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Esempi
È stato richiesto di risolvere i seguenti problemi:1 Calcolare il numero di funzioni iniettive definibili a partire da un
insieme di cardinalità m a uno di cardinalità n, con m ≤ n2 Data una tupla dire se essa può rappresentare una matrice.3 Date due tuple che rappresentano due matrici dire se sia
possibile moltiplicarle4 Date due tuple che rappresentano due vettori, calcolare il
prodotto scalare dei due vettori nel caso si possa applicare
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Soluzione iterativa
def nfun(n,m):#la funzione calcola il numero di distribuzioni di m elementi#a n a n [documentale]
if n<m:#se n<m allora non posso calcolare le#disposizioni [implementativo]
return 'errore'elif n>0:tot=1#inizializzo la variabile [assertivo]for i in range(n,n-m,-1):
print(i)tot=tot*i
return totelse:
return 'errore'
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Soluzione ricorsiva
def disp(n,m):# funzione che mi restituisce le disposizioni di m elementi a n a n# usando la ricorsione
if m==1:return n
elif m>1:return n*disp(n-1,m-1)
else:return 'errore'
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Input diversi
Testiamo le funzioni con i seguenti input(99999, 3); (99999, 5555), (99999,99998)Lo spazio è una risorsa finita di cui bisogna tener conto nellechiamate ricorsive
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Esercizio 2
def se_matrice(t):# funzione che mi restituisce True se ho passato in input# una matrice, False altrimenti
if type(t)<>tuple:return False
for i in t:if not( type(i)==tuple and se_numero(i)):
return Falseelif len(i)<>len(t[0]):
return Falsereturn True
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Esercizio 2
def se_numero(t):# funzione che mi restituisce True se ho passato in input# una sequenza di numeri, False altrimenti
for i in t:if type(i)<>int and type(i)<> float:
return Falsereturn True
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Esercizio 3
def righe_colonne(t):# funzione che mi calcola il numero di righe e colonne# di una matrice, se non e' una matrice restituisce False,False
if se_matrice(t):return len(t),len(t[0])
else:return False, False
def se_molt(t,v):# funzione che mi calcola restituisce True se posso moltiplicare#le matrici, False altrimenti
a,b= righe_colonne(t)c,d=righe_colonne(v)return b==c
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Esercizio 4
def se_molt_vet(x,y):# funzione che mi restituisce True#se posso moltiplicare i vettori False altrimenti
return len(x)==len(y)
def molt_vet(x,y):# funzione che mi calcola il prodotto scalare#se \`e possibile altrimenti restituisce False
if se_molt_vet:ris=0for i in range(0,len(x)):
ris=ris+x[i]*y[i]return ris
else:return False
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Cosa esegue questo codice?
def f(s):i=0while (s[i]<>0) and (i<len(s)):
i+=1if i==len(s):
print('non vi sono elementi nulli')else:
print('elemento nullo con indice:', i)
Per quali input provarlo?
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Cosa stampa questo codice?
def r(s):c=0for x in s:
if x>0:c+=x
else:x=-x
return c
L=(2,5,-3,-2)print(r(L))print(L)
F=[1,-3,2,-1]print(r(F))print(F)
Laboratorio di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Esercizi per casaScrivere e documentare un programma con un menu dove:
se si seleziona 1: la funzione prende in input una tupla di numerie restituisca la varianzase si seleziona 2: la funzione prende in input due tuple erestituisca la somma delle due tuple (1,3,6) + (1,2,2) = (2,5,8)solo se le tuple hanno lunghezza ugualese si seleziona 3: la funzione prende in input 3 punti(x1, y1), (x2, y2), (x3, y3) e restituisca True se questi puntigiacciono sulla stessa retta False altrimentise si seleziona 4: la funzione prende in input due tuple erestituisca la tupla dei valori appartenenti ad entrambe le tuple.se si seleziona 5: la funzione prende in input due tuple erestituisca la tupla dei valori appartenenti alla prima tupla esclusii valori della seconda tupla.se si seleziona 6 e soltanto 6: il programma esce
Inviate gli esercizi svolti a: [email protected] di Python
Correzione eserciziLeggibilità
EserciziComprendere il codice
Cosa abbiamo fatto?
1 Correzione esercizi
2 Leggibilità
3 Esercizi
4 Comprendere il codice
Laboratorio di Python