+ All Categories
Home > Documents > Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice,...

Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice,...

Date post: 19-Sep-2020
Category:
Upload: others
View: 6 times
Download: 0 times
Share this document with a friend
23
Correzione esercizi Leggibilità Esercizi Comprendere il codice Laboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione 21 marzo 2014 Laboratorio di Python
Transcript
Page 1: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

Correzione eserciziLeggibilità

EserciziComprendere il codice

Laboratorio di PythonDocumentare il codice, Esercizi, Comprendere cosa calcola una

funzione

21 marzo 2014

Laboratorio di Python

Page 2: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

Correzione eserciziLeggibilità

EserciziComprendere il codice

Sommario

1 Correzione esercizi

2 Leggibilità

3 Esercizi

4 Comprendere il codice

Laboratorio di Python

Page 3: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 4: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 5: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 6: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 7: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 8: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 9: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 10: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 11: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 12: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 13: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 14: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 15: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 16: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 17: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 18: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 19: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 20: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 21: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 22: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

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

Page 23: Laboratorio di Python - Plone sitezuppirol/lez4_2014.pdfLaboratorio di Python Documentare il codice, Esercizi, Comprendere cosa calcola una funzione ... la somma dei primi n numeri

Correzione eserciziLeggibilità

EserciziComprendere il codice

Cosa abbiamo fatto?

1 Correzione esercizi

2 Leggibilità

3 Esercizi

4 Comprendere il codice

Laboratorio di Python


Recommended