Laboratorio di Python
Esercizi sulle liste
Sara Zuppiroli
Università di Bologna
17 e 19 aprile 2013
Sommario
1 Correzione esercizi
2 Esercizi
3 Esercizi per casa
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
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)
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?
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()
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
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.
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.
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
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
Esercizio 2
Data una lista di coppie che rappresenta una relazione, generare la relazione che rappresenta la chiusura transitiva di tale relazione
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}.
Esercizio 2
Cosa dobbiamo fare?
Quali sono i passi per trovare una soluzione?
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
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
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.
Cosa abbiamo fatto?
1 Correzione esercizi
2 Esercizi
3 Esercizi per casa