+ All Categories
Home > Documents > Laboratorio di Python -...

Laboratorio di Python -...

Date post: 20-Jan-2019
Category:
Upload: nguyenliem
View: 224 times
Download: 0 times
Share this document with a friend
31
Laboratorio di Python Matrici con Liste Lab09 10 Aprile 2018
Transcript

Laboratorio di PythonMatrici con Liste

Lab09

10 Aprile 2018

Outline

Correzione esercizi per oggi

MatriciTeoriaEsercizi

Esercizi per casa

Outline

Correzione esercizi per oggi

MatriciTeoriaEsercizi

Esercizi per casa

Esercizio 1 per casa

Scrivere una funzione che verifica se una lista e ordinata in modocrescente (≤) (supponiamo che la lista contenga oggetti ordinabili)

1 def ordinataCrescente(L):

2 i f l e n (L)==0:

3 r e t u r n True

4 f o r i i n range (1, l e n (L)):

5 i f L[i]<L[i-1]:

6 r e t u r n False

7 r e t u r n True

Esercizio 1 per casa

Scrivere una funzione che verifica se una lista e ordinata in modocrescente (≤) (supponiamo che la lista contenga oggetti ordinabili)

1 def ordinataCrescente(L):

2 i f l e n (L)==0:

3 r e t u r n True

4 f o r i i n range (1, l e n (L)):

5 i f L[i]<L[i-1]:

6 r e t u r n False

7 r e t u r n True

Esercizio 2 per casa

Scrivere una funzione che presi come parametri due liste ordinate inmodo crescente (verificarlo usando la funzione dell’esercizio precedente)ne crei una terza, anch’essa ordinata, dall’unione delle due.

Esercizio 2 per casa I

1 import Es1L08 as ol

2

3 def unisciOrdinate(L1, L2):

4 i f (not ol.ordinataCrescente(L1)) or (not ol

.ordinataCrescente(L2)):

5 p r i n t ("Le liste devono essere ordinate

in modo crescente")

6 r e t u r n None

7 LR = []

8 i = 0

9 j = 0

10 w h i l e i< l e n (L1) and j< l e n (L2):

11 i f L1[i]<=L2[j]:

12 LR.append(L1[i])

13 i+=1

14 e l s e :

15 LR.append(L2[j])

16 j+=1

Esercizio 2 per casa II

17

18 i f i< l e n (L1):

19 LR = LR + L1[i:]

20 e l s e :

21 LR = LR + L2[j:]

22

23 r e t u r n LR

Esercizio 3 per casa

Scrivere una funzione ripetis(s) che data una lista di numeri naturalis, restituisce una nuova lista in cui compaiono gli stessi elementi di s enello stesso ordine, ma ciascun s[i] e ripetuto s[i] volte. (Esempio: da[3,0,2] si deve ottenere [3,3,3,2,2].)

1 def ripetis(s):

2 res = []

3 f o r e i n s:

4 res += [e]*e

5 r e t u r n res

1 #a l t e r n a t i v a2 def ripetis2(s):

3 res = []

4 f o r e i n s:

5 f o r i i n range (e):6 res.append(e)

7 r e t u r n res

Esercizio 3 per casa

Scrivere una funzione ripetis(s) che data una lista di numeri naturalis, restituisce una nuova lista in cui compaiono gli stessi elementi di s enello stesso ordine, ma ciascun s[i] e ripetuto s[i] volte. (Esempio: da[3,0,2] si deve ottenere [3,3,3,2,2].)

1 def ripetis(s):

2 res = []

3 f o r e i n s:

4 res += [e]*e

5 r e t u r n res

1 #a l t e r n a t i v a2 def ripetis2(s):

3 res = []

4 f o r e i n s:

5 f o r i i n range (e):6 res.append(e)

7 r e t u r n res

Esercizio 4 per casa

Scrivere una funzione analoga analoga alla precedente, ma che modificala lista s.

1 def ripetisposto(s):

2 i = 0

3 w h i l e i< l e n (s):

4 e = s[i]

5 d e l s[i]

6 s[i:i] = [e]*e #i n s e r i m e n t o s o t t o l i s t a7 i = i+e

Esercizio 4 per casa

Scrivere una funzione analoga analoga alla precedente, ma che modificala lista s.

1 def ripetisposto(s):

2 i = 0

3 w h i l e i< l e n (s):

4 e = s[i]

5 d e l s[i]

6 s[i:i] = [e]*e #i n s e r i m e n t o s o t t o l i s t a7 i = i+e

Outline

Correzione esercizi per oggi

MatriciTeoriaEsercizi

Esercizi per casa

Outline

Correzione esercizi per oggi

MatriciTeoriaEsercizi

Esercizi per casa

Matrici come liste di listeCome possiamo rappresentare un matrice Ar×c in Python? Per esempio,la matrice A3×2:

A =

0 13 25 6

puo essere rappresentata come una lista di liste.A = [[0,1],[3,2],[5,6]]

Notiamo che:

I la notazione e coerente: quanto vale A[1][1]? (Nb: ricordate, inInformatica si parte da 0...)

I len(A) = 3, len(A[0]) = 2

Semplificazione: I vettori (matrici unidimensionali) sono vettori riga evengono rappresentati come una lista che ha come primo elemento unalista. Dunque:

I [1, 2, 3] e una lista di numeri, ma non una matrice (e dunqueneanche un vettore riga)

I [[1, 2, 3]] e un vettore riga, cioe una matrice

I [[1], [2], [3]] e un vettore colonna, trasposto del precedente.

Outline

Correzione esercizi per oggi

MatriciTeoriaEsercizi

Esercizi per casa

Semplificazioni e suggerimenti

I In tutti gli esercizi seguenti – se non diversamente specificato –supporremo per brevita che l’utente inserisca matrici e vettori ”benformati” (dunque con la sintassi espressa in precedenza, tutte lerighe della stessa lunghezza, elementi tutti numerici...)

I Nel codice allegato alla lezione verranno fornite anche le funzioninecessarie a controllare che l’input rappresenti matrici e vettori ”benformati”

I Gli esercizi seguenti sono tutte funzioni ausiliarie necessarie percalcolare il prodotto tra due matrici

I Consiglio: svolgere tutti gli esercizi nello stesso file chiamatomatrici.py

Esercizio

Scrivere una funzione che stampa una matrice presa come parametroEsempio se A = [[10000,12],[3,2],[5,6]] stampa esattamente:

10000 12

3 2

5 6

Suggerimento: usare print(e, end='\t')

Esercizio

1 def stampaMatrice(M):

2 f o r riga i n M:

3 f o r e i n riga:

4 p r i n t (e, end='\t')5 p r i n t () #a capo dopo o g n i r i g a

O con indici espliciti:

1 def stampaMatrice(M):

2 f o r i i n range ( l e n (M)):

3 f o r j i n range ( l e n (M[i]):

4 p r i n t (M[i][j], end='\t')5 p r i n t () #a capo dopo o g n i r i g a

Esercizio

Scrivere una funzione che, presi come parametri due liste (non vettoririga) moltiplicabili (verificare che abbiano la stessa lunghezza), calcola erestituisce il prodotto scalare, oppure None.

1 def molt_liste(U,V):

2 i f l e n (U)== l e n (V):

3 pr_sc = 0

4 f o r i i n range ( l e n (V)):

5 pr_sc = pr_sc + (U[i]*V[i])

6 r e t u r n pr_sc

7 e l s e :

8 r e t u r n None

Esercizio

Scrivere una funzione che, presi come parametri due liste (non vettoririga) moltiplicabili (verificare che abbiano la stessa lunghezza), calcola erestituisce il prodotto scalare, oppure None.

1 def molt_liste(U,V):

2 i f l e n (U)== l e n (V):

3 pr_sc = 0

4 f o r i i n range ( l e n (V)):

5 pr_sc = pr_sc + (U[i]*V[i])

6 r e t u r n pr_sc

7 e l s e :

8 r e t u r n None

Un’altra possibile soluzione in stile Python

1 def molt_liste_2(U,V):

2 i f l e n (U)== l e n (V):

3 pr_sc = 0

4 f o r eu , ev i n z i p (U, V): #l o p o s s o f a r ep e r c h e ' hanno l a s t e s s a l e n

5 pr_sc = pr_sc + eu*ev

6 r e t u r n pr_sc

7 e l s e :

8 r e t u r n None

Esercizi da una riga

Scrivere tre funzioni:

I Una funzione che prende come parametro una matrice e restituisce ilnumero delle sue righe

I Una funzione che prende come parametro una matrice e restituisce ilnumero delle sue colonne

I Una funzione che verifica se due matrici prese come parametripossono essere moltiplicate tra loro

1 def righe(M):

2 r e t u r n l e n (M)

3

4 def colonne(M):

5 r e t u r n l e n (M[0])

6

7 def sono_matr_molt(M,N):

8 r e t u r n colonne(M) == righe(N)

Esercizi da una riga

Scrivere tre funzioni:

I Una funzione che prende come parametro una matrice e restituisce ilnumero delle sue righe

I Una funzione che prende come parametro una matrice e restituisce ilnumero delle sue colonne

I Una funzione che verifica se due matrici prese come parametripossono essere moltiplicate tra loro

1 def righe(M):

2 r e t u r n l e n (M)

3

4 def colonne(M):

5 r e t u r n l e n (M[0])

6

7 def sono_matr_molt(M,N):

8 r e t u r n colonne(M) == righe(N)

Esercizio

Scrivere una funzione che calcola e restituisce la trasposta di una matricepresa come parametro.

Soluzione

1 def trasposta(M):

2 MT = []

3 r = righe(M)

4 i f r == 0: #v u o t a5 r e t u r n MT

6 e l s e :

7 c = colonne(M)

8 f o r i i n range (c): #c i c l o s u l l e c o l o n n e9 col = [] #i−ma c o l o n n a

10 f o r j i n range (r): #c i c l o s u l l er i g h e

11 col.append(M[j][i])

12 #o r a i n c o l ho l a i−ma c o l o n n a , c h ed i v e n t a l ' i−ma r i g a

13 MT.append(col)

14 r e t u r n MT

Esercizio

Scrivere una funzione che restituisce la matrice prodotto tra due matriciprese come parametri (se non sono moltiplicabili, stampa un messaggio dierrore e restituisce None).

Suggerimento: usare la matrice trasposta per fare il prodotto scalare trale righe di A e le righe della trasposta di B.

Soluzione

1 def molt_mat(A,B):

2 i f sono_matr_molt(A,B): # s e s o n o m o l t .3 AB = [] #p r o d o t t o4 BT = trasposta(B) #t r a s p o s t a d i B5 f o r i i n range (righe(A)): #r i g . d i A ( e

AB)6 riga = [] #i−ma r i g a d i AB7 #j s c o r r e r i g h e d i BT (= c o l d i B e AB

)8 f o r j i n range (righe(BT)):9 ij = molt_liste(A[i],BT[j])

10 riga.append(ij) #e l e m e n t o i nr i g a

11 AB.append(riga) #r i g a i n r i s u l t a t o12 r e t u r n AB

13 e l s e :

14 p r i n t ("Matrici non moltiplicabili")

15 r e t u r n None

Comunicazioni di servizio

Il prossimo laboratorio (Lab10 - Venerdı 13 aprile) avra come argomentola ricorsione.

Ripassare gli appunti presi e gli esercizi svolti a lezione e fare domande.

Outline

Correzione esercizi per oggi

MatriciTeoriaEsercizi

Esercizi per casa

Esercizi per casa (per il 13/04/2018 ore 8:59)(Mail: Lab09-..........)

Anche usando le funzioni viste a lezione:

1. Scrivere una funzione che determina se il suo parametro e unamatrice quadrata

2. Scrivere una funzione che prende come parametri una matrice e unnumero (verificare che lo sia) e restituisce una nuova matrice checostituisce il prodotto della matrice per quel numero. Non modificala matrice originale.

3. Scrivere una funzione che prende come parametri (tralasciare leverifiche)

I una matrice non vuota di interiI un intero n

e restituire la coppia (i,j) che identifica la posizione del primoelemento (leggendo la matrice per righe) che, sommato a tutti i suoiprecedenti, dia come risultato un valore > n.Se tale elemento non esiste, perche la somma di tutti gli elementi eminore di n, restituire la coppia (+∞,+∞)(Suggerimento: Usare float('inf') o math.inf)Non modificare la matrice ne usare altre liste. Usare il ciclo whilema non il ciclo for.


Recommended