Laboratorio 4
ESERCIZIO XII
Scrivere un programma in grado di generare un triangolo di Tartaglia di altezza n
, dove n
è un intero inserito da tastiera.
Ad esempio, per n = 5
si avrà:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Soluzione
# Alternativa con indici:
def tartaglia_indici(n):
triangolo = []
triangolo.append([0]*n)
triangolo[0][0] = 1
for i in range(1,n):
triangolo.append([0]*n)
triangolo[i][0] = 1
for c in range(1,n):
triangolo[i][c]= triangolo[i-1][c-1]+triangolo[i-1][c]
return triangolo
# Alternativa con zip
def tartaglia_zip(n):
triangolo = []
#inserisco il vertice del triangolo
triangolo.append([1])
for k in range(1, n):
riga = [sum(k) for k in zip([0]+triangolo[-1], triangolo[-1]+[0])]
triangolo.append(riga)
return triangolo
def stampa_tartaglia(triangolo):
"""
Parametro triangolo: list of lists [[], [], [], ...]
"""
n_len = len(triangolo)
print n_len
#iterazione sulle righe del tirangolo (i.e. le liste)
for i, line in enumerate(triangolo):
print " "*(n_len-i)*3,
#iterazione su ciascuna colonna
for col in range(0, i+1):
print "%5d" %triangolo[i][col],
print
print tartaglia_zip(5)
stampa_tartaglia(tartaglia_zip(5))
ESERCIZIO XIII
-
Scrivere un programma che definisca la funzione
dh(s,t)
, che implementi il calcolo della distanza di Hamming tra due stringhe s e t. -
Aggiungere la funzione
dhplus(s,t)
, che generalizzidh(s,t)
al caso di stringhe di diversa lunghezza. Visto che molte generalizzazioni della distanza di Hamming sono possibili e’ richiesta l’implementazione di questo primo modo: estendere la stringa di lunghezza minore con una serie di caratteri non validi (ad esempio ’-’) in modo da ottenere stringhe di lunghezza uguale. -
Aggiungere una funzione
dhplus2(s,t)
che implementa un modo diverso per generalizzare la distanza di Hamming: prolungare le due stringhe con caratteri non validi fino ad una lunghezza pari alla somma delle due, iterare sulla lunghezza delle stringhe prolungate ogni volta ruotando una stringa spostando un carattere dal fondo alla testa e calcolare la distanza di Hamming, ritornare come valore della distanza di Hamming il minimo valore tra quelli calcolati.prova.......
.....provola
prova.......
a.....provol
prova.......
la.....provo
prova.......
ola.....prov
Soluzione
# Punto I:
def dh(s,t):
if len(s) != len(t):
return -1
ones = [ es != et for es, et in zip(s,t) ]
return sum(ones)
s1 = 'prova'
s2 = 'privo'
print dh(s1,s2)
# Punto II
def dhplus(s,t):
max_len = max(len(s), len(t))
s_prime = s + '-'*(max_len - len(s))
t_prime = t + '-'*(max_len - len(t))
return dh(s_prime, t_prime)
s3 = 'prova'
s4 = 'provola'
print dhplus(s3,s4)
# Punto III ???