• Non ci sono risultati.

Laboratorio di Python Esercizi sulle liste Sara Zuppiroli

N/A
N/A
Protected

Academic year: 2021

Condividi "Laboratorio di Python Esercizi sulle liste Sara Zuppiroli"

Copied!
18
0
0

Testo completo

(1)

Laboratorio di Python

Esercizi sulle liste

Sara Zuppiroli

Università di Bologna

17 e 19 aprile 2013

(2)

Sommario

1 Correzione esercizi

2 Esercizi

3 Esercizi per casa

(3)

Correzione

def valle(s):

if len(s)> 2:

return(s[1]<s[0] and s[1]<s[2]) else:

False

def picco(s):

if len(s)> 2:

return(s[1]>s[0] and s[1]>s[2]) else:

False

def sedef(s):

if len(s)==0:

return 0

(4)

Lotto

import random

def sim_lotto(): #scrive nel file lotto.docx l'estrazione del lotto s=[]

for i in range(91):

s.append(i)

d=open('lotto.docx','w')

r=['Bari','Cagliari','Firenze','Genova','Milano', 'Napoli','Palermo','Roma','Torino',

'Venezia','Nazionale']

for i in range(len(r)):

t=random.sample(s,5) d.write(str(r[i])) d.write(str(t)) d.close()

L’istruzione range doveva avere come estremi (1,91)

(5)

Copia

def copia_file(): #copia il contenuto di un file in un altro file file1=open('./testo1.txt','r')

file2=open('./testo2.txt','w') file2.write(str(file1.readlines())) file1.close()

file2.close()

Cos’é sbagliato?

(6)

Copia corretta

def copy_f(file1, file2):

#Funzione che copia contenuto di file1 in file2 f1 = open(file1,'r')

f2 = open(file2,'w') for line in f1:

f2.write(line) f1.close()

f2.close()

(7)

Esercizi sulle liste

1 Data una lista di coppie verificare se é il grafico di una funzione

2 Data una lista di coppie che rappresenta una relazione, generare la relazione che é la sua chiusura transitiva

(8)

Esercizio 1

1 Cosa bisogna verificare?

1 Se sto prendendo in considerazione una lista di coppie

2 Se ogni coppia della lista é una coppia di che rispetta la definizione di funzione

2 Cosa significa verificare di essere una funzione sulla struttura dati?

1 Che ogni coppia (a, b) appartenente alla lista di coppie abbia il primo elemento diverso da ogni altro primo elemento delle coppie, o se é uguale ad uno o piú primi elementi allora anche il secondo elemento deve essere uguale.

(9)

Esercizio 1

1 Definire una funzione che dato un parametro mi restituisca se questo é una lista o una tupla

2 Definire una funzione che calcoli il punto 1.1 del lucido precedente, e chiamarla isrel(l)

3 Definire una funzione che presa una lista di coppie mi restituisca True se la lista rappresenta una funzione, altrimenti False. La lista é una funzione se é una relazione e se i primi elementi delle coppie sono tutti diversi.

(10)

Esercizio 1

def seq(a):

return type(a)==list or type(a)==tuple

def isrel(l):

if seq(l):

for i in range(0, len(l)):

if not seq(l[i]) or len(l[i])!=2:

return False return True

else:

return False

(11)

Esercizio 1

def funzione2(L):

if isrel(L):

S=[]

for c in L:

if c[0] not in S:

S.append(c[0]) return len(S)==len(L) return False

def funzione(L): #piu' efficiente in media if isrel(L):

S=[]

for c in L:

if c[0] in S:

return False

(12)

Esercizio 2

Data una lista di coppie che rappresenta una relazione, generare la relazione che rappresenta la chiusura transitiva di tale relazione

(13)

Chiusura transitiva

Sia R una relazione su A2; si definisce chiusura transitiva di R, denotata con R+, la relazione:

R+= {<x , y > t.c. Esistono y1, · · · ,yn∈ A, con n ≥ 2, y1=x , yn=y , t. c. < yi,yi+1>∈R, i = 1, · · · , n − 1}.

(14)

Esercizio 2

Cosa dobbiamo fare?

Quali sono i passi per trovare una soluzione?

(15)

Esercizio 2

Creiamo la soluzione a passi successivi:

per ogni coppia (x1,x2)e ogni coppia (x2,x3)della lista

inseriamo la coppia (x1,x3)se non é giá presente nella lista che rappresenta la nostra chiusura transitiva.

su ogni elemento inserito si dovrá controllare se genera altri elementi appartenenti alla relazione chiusura transitiva

quando non sono piú inseriti elementi allora abbiamo trovato la lista che rispetta la proprietá di chiusura transitiva

(16)

Esercizio 2

def transclos(R):

if not isrel(R):

return False L=list(R)

devo_iterare=True #forzo inizio iterazione while devo_iterare:

NuoveCoppie=[]

for c in L:

for x in L:

if c[1]==x[0] and (c[0],x[1]) not in L \ and (c[0],x[1]) not in NuoveCoppie:

NuoveCoppie.append((c[0],x[1])) L=L+NuoveCoppie

devo_iterare = (len(NuoveCoppie)!=0) return L

(17)

Esercizi

1 Scrivere una funzione che presa una lista e un valore casuale i appartenente a tale lista restituisca due liste una coi valori minori o uguali a i e l’altra coi valori maggiori di i. [non utilizzare il metodo sort]

2 Scrivere una funzione che prese come parametri due liste ordinate ne crei una sola anch’essa ordinata. [non utilizzare il metodo sort.]

3 Scrivere una funzione che simuli l’estrazione casuale da un mazzo di 40 carte di 10 carte con e senza reinserimento della carta.

(18)

Cosa abbiamo fatto?

1 Correzione esercizi

2 Esercizi

3 Esercizi per casa

Riferimenti

Documenti correlati

Altrimenti deve essere hgi = G, ma in tal caso G `e un gruppo ciclico di ordine non primo, e in quanto tale ha certamente dei sottogruppi.. (3) Provare che se G ` e un gruppo tale

L’ispettore Numerik sta affrontando un caso complicato e misterioso: è alla ricerca di un abilissimo ladro che, da alcune settimane, compie numerosi furti in città.. Gli unici

[r]

Si dice che i due punti formano un sistema di riferimento per la retta, il primo punto si dice origine ed il secondo punto si dice punto unita’; il numero reale da cui proviene un

Nei gruppi metabeliani vale una simmetria dei centralizer-like subsets relativi alle parole della forma... 4

• This means that it is possible to define parametric

Completa le didascalie riferite alla cucina inserendo le funzioni degli oggetti.. Collega ogni elemento del bagno con il

Completa le didascalie riferite alla cucina inserendo i nomi degli oggetti.. Collega ogni elemento del soggiorno con il