Esercitazione3

Metodi Informatici per la Biologia Esercitazione della Lezione 3 Riepilogo della lezione precedente Facciamo il punto su un concetto visti martedì: le liste. Una lista è un contenitore ordinato e mutabile di oggetti. Ordinato vuol dire l’ordine in cui si inseriscono elementi nella lista viene mantenuto, e che c’è un indice che identifica univocamente ogni elemento. Da questo punto di vista una lista può ricordare una stringa. Mutabile vuol dire che posso rimpiazzare un elemento con un altro. Vediamo come si usano: >>> expression = [11.3, 0.5, 0.0, 6.3, 0.0]
>>> print expression[0]
11.3
>>> print expression[1]
0.5
>>> print expression[-1]
0.0
>>> print expression[0:2]
[11.3, 0.5]
>>> print expression[1:3]
[0.5, 0.0]
>>> print expression[10]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> tot_expr = sum(expression)
>>> elements = len(expression)
>>> mean = tot_expr/elements
>>> print mean
3.62
>>> expression[4]
0.0
>>> expression[4] = 10.5
>>> print expression[4]
10.5
>>> expression.append(2.1)
>>> print expression
[11.3, 0.5, 0.0, 6.3, 10.5, 2.1]
>>> expression.insert(0,12.0)
>>> print expression
[12.0, 11.3, 0.5, 0.0, 6.3, 10.5, 2.1]
>>> expression.pop(4)
6.3
>>> print expression
[12.0, 11.3, 0.5, 0.0, 10.5, 2.1]
>>> expression.sort()
>>> print expression
[0.0, 0.5, 2.1, 10.5, 11.3, 12.0]
>>> max(expression)
12.0
>>> min(expression)
0.0
Il ciclo for permette di eseguire un blocco di istruzioni tante volte quanti sono gli elementi di una sequenza di oggetti. La sequenza è un contenitore di oggetti, e la variabile assumerà di volta in volta il valore dell’oggetto nel contenitore in esame. Il contenitore può essere ad esempio una stringa, o più comunemente una lista, scritta esplicitamente o creata con il comando range.
>>> nomi = ["Totti", "Pirlo", “Buffon”]
>>> for nome in nomi:
...
print nome.upper()
...
TOTTI
PIRLO
BUFFON
>>>
>>> date = [1976,1979,1978]
>>> data_corrente = 2013
>>> for data in date:
...
eta = data_corrente - data
...
print "Anno di nascita:",data,"Eta':",eta
...
Anno di nascita: 1976 Eta': 37
Anno di nascita: 1979 Eta': 34
Anno di nascita: 1978 Eta': 35
>>>
>>> for i in range(1980,1985,1):
...
eta = data_corrente - i
...
print "Se se nato nel",i,"hai",eta,"anni"
...
Se se nato nel 1980 hai 33 anni
Se se nato nel 1981 hai 32 anni
Se se nato nel 1982 hai 31 anni
Se se nato nel 1983 hai 30 anni
Se se nato nel 1984 hai 29 anni
>>>
>>> for i in range(len(nomi)):
...
eta = data_corrente - date[i]
...
nome = nomi[i]
...
print nome,"ha",eta,"anni"
...
Totti ha 37 anni
Pirlo ha 34 anni
Buffon ha 35 anni
Prendiamo familiarità con le liste. Provate a fare nella shell interattiva: -­‐ Create una lista contenente una decina di numeri decimali, e usate l’indice della lista per farvi scrivere il primo, l’ultimo, il terzo e cosi via, poi dal primo al terzo, dal secondo al settimo, tutti i numeri tranne il primo -­‐ Aggiungete un valore in coda alla lista (append), inserite un valore in terza posizione (insert), rimuovete l’ultimo valore (pop) -­‐ Create una lista contenente delle parole (nomi, cognomi, parole di un testo, qualsiasi cosa) e, come prima, fatevene scrivere alcuni o un intervallo usando gli indici -­‐ Rimuovete la prima parola, cambiate quella che ora è la prima parola con il mio nome (o quello che vi pare) -­‐ Usate il comando range per mettere in una variabile i numeri da 1 a 5; ricordate che la sintassi di range è range(numero di partenza, numero
di arrivo non incluso, incremento) -­‐ Usate range per creare liste contenenti i numeri pari da 10 a 20, i numeri dispari, da 1 a 11, i numeri da 0 a 30 in salti di 3 Esercizi 1 Dato un numero in input minore di 10, scrivere la tabellina (ad es. se il numero è 4, scrivere 4x0,4x1, 4x2,4x3 fino a 4x10) 2 Scriviamo una sequenza nucleotidica a caso, e calcoliamo il contenuto in GC (la frazione di G e C rispetto al totale) senza usare il metodo count (usate un ciclo for per iterare lungo la sequenza e contare quante C e quante G ci sono, sommate questi due valori, e dividete per la lunghezza della sequenza) 3 Scriviamo dei numeri in una lista, e contiamo quanti numeri della lista sono maggiori di 10 (ho bisogno di un ciclo for che scorra gli elementi della lista, e di una variabile contatore che progressivamente incrementi di 1 ogni volta che incontra un numero > 10). 4 Scriviamo dei numeri in una lista, e calcoliamo la somma dei numeri della lista maggiori di 10 (ho bisogno di un ciclo for che scorra gli elementi della lista, e di una variabile accumulatore che progressivamente accumuli la somma dei numeri > 10 incontrati). 5 Scriviamo dei numeri in una lista, e calcoliamo il valore medio dei numeri maggiori di 10. Soluzioni 1 Dato un numero in input minore di 10, scrivere la tabellina >>> numero = input("Scrivi un numero minore di 10")
Scrivi un numero minore di 10
>>> print numero
9
>>> if numero > 10:
...
print "Ho detto minore di dieci!"
... else:
...
for i in range(1,11,1):
...
print numero * i
...
9
18
27
36
45
54
63
72
81
90
2 Scriviamo una sequenza nucleotidica, e calcoliamo il contenuto in GC (la frazione di G e C rispetto al totale) senza usare il metodo count >>> sequenza = "AGCACGCATATGTATATCGGCGCATTCAGCTGCAGTCATTAC"
>>> numGC = 0
>>> for nucleotide in sequenza:
...
if nucleotide == "G" or nucleotide == "C":
...
numGC = numGC + 1
...
>>> print numGC/len(sequenza)
# divisione fra interi!
0
>>> print float(numGC)/len(sequenza)
0.47619047619
3 Scriviamo dei numeri in una lista, e contiamo quanti numeri della lista sono maggiori di 10 (ho bisogno di un ciclo for che scorra gli elementi della lista, e di una variabile contatore che progressivamente incrementi di 1 ogni volta che incontra un numero > 10). >>>
>>>
>>>
...
...
...
>>>
3
lista = [2,12,5,55,7,16]
elementi = 0
for elemento in lista:
if elemento > 10:
elementi = elementi + 1
print elementi
4 Scriviamo dei numeri in una lista, e calcoliamo la somma dei numeri della lista maggiori di 10 (ho bisogno di un ciclo for che scorra gli elementi della lista, e di una variabile accumulatore che progressivamente accumuli la somma dei numeri > 10 incontrati). >>>
>>>
>>>
...
...
...
>>>
83
lista = [2,12,5,55,7,16]
somma = 0
for elemento in lista:
if elemento > 10:
somma = somma + elemento
print somma
5 Scriviamo dei numeri in una lista, e calcoliamo il valore medio dei numeri maggiori di 10. >>> lista = [2,12,5,55,7,16]
>>> somma = 0
>>> elementi = 0
>>> for elemento in lista:
...
if elemento > 10:
...
somma = somma + elemento
...
elementi = elementi + 1
...
>>> media = float(somma)/elementi
>>> print round(media,2)
27.67