Sunteți pe pagina 1din 10

Programare pentru Bioinformatica

Unitatea 3: Concepte avansate de Python

Exerciții și întrebări teoretice


În continuare, veți găsi partea pe care trebuie să o completați în acest modul și întrebările teoretice la care trebuie să
răspundeți.

Exercitiul 1
Completați codul necesar pentru a:

• Calculați numărul de cuvinte


• Calculați numărul de spații dintr-un text
• Calculați numărul de litere „d” sau „D” care apar

Vă rugăm să rețineți următoarele:

• Numărul de spații nu trebuie să fie neapărat o funcție de numărul de cuvinte.


• Între o linie de text și următoarea, imediat după caracterul „\” există un număr mare de spații
• Trebuie să numărați numărul de litere „d”, indiferent dacă sunt litere mari sau mici
În
[1 ]: text1 = „Nu exista niciun motiv să credem că un băiat negru în acest moment, \ în
acest loc, ar putea în vreun fel să schimbe istoria. La urma urmei, Africa de Sud a
fost
apoi mai puțin de un deceniu îndepărtat de sub controlul deplin britanic.
Deja, legile \ erau în curs de codificare pentru a implementa segregarea
rasială și subjugarea, \ rețeaua de legi care ar fi cunoscută sub numele de
apartheid”.

text2 = „Repugnantă este o creatură care ar risipi capacitatea de a ridica \


un ochi spre cer, conștient de timpul lui trecător aici.”

def count_words (text):


# Numărează cuvintele conținute în șirul de text num_words = 0

# Cod de completat

returnează num_words

def count_spaces (text):


# Numărează spațiile conținute în textul șirului de caractere num_spaces = 0

# Cod de completat

returnează num_spații

def count_literes (text, letter= 'd' ):


# Numărul de litere „scrisoare” conținute în text
numere = 0

# Cod de completat
returnează numerele

# Folosim funcțiile pentru text1: num_words = count_words(text1) num_spaces =


count_spaces(text1)
număr_litere = număr_litere(text1)
print ( număr de cuvintele de %d " % num_words)
"The (
print este
număr de spatii este de %d " % num_spații)
"The (
print număr de literele est de la % num_litere)
"The „d” e %d "
imprimare ()
# Și, de asemenea, pentru text2:
num_words = count_words(text2)
num_spaces = count_spaces(text2)
număr_litere = număr_litere(text2)
print ( „Numărul de cuvinte este %d „ % num_words) print ( „Numărul de spații este
%d „ % num_spaces) print ( „Numărul de litere „d” este %d „ % num_litere)

Numărul de cuvinte este 0


Numărul de spații este 0
Numărul de litere „d” este 0
El număr de cuvinte este de 0
El număr a spaţiilor de 0
El număr este
de litere „d” es de
Cheie
Aruncă o privire la documentația Python pentru funcția count() : https://docs . py thon.or g /3/library/string .html ( https ://docs .
python.or g /3/ library / string .html )

Exercițiul 2
Completați următoarele funcții matematice și, de asemenea, documentați codul fiecărei funcții. În cele din urmă, scrieți câteva
exemple de utilizare a fiecărei funcții :

În 2] # Completați următoarele funcții matematice.


# Atenție la utilizarea numerelor zecimale!
import matematică

# Un exemplu:
def dreptunghi_zonă (bază, înălțime): returnare bază * înălțime

def circle_area (raza): # Pentru a completa returnarea 0.

def circle_length (raza): # Un return complet 0.

def ipotenuză (leg1, leg2): # O întoarcere completă 0.

def square_area (lateral): # Pentru a completa returnarea 0.

def volume_sphere (raza): # Un return complet 0.

def volume_cube (lateral): # Pentru a completa returnarea 0.

imprimare (zona_dreptunghi(2.0, 4.0))


# Scrieți aici câteva exemple folosind aceste funcții, de exemplu:
# print 'Volumul cubului de latura 3.5 este %f' % volume_cube(3.5) 8.0

Exercițiul 3
Următorul exercițiu constă în conversia unui număr în baza 2 (binar, 0/1) în baza 10 (zecimală).

Având în vedere un șir care reprezintă un număr binar, de exemplu, 1011, returnează numărul natural corespunzător, în acest
caz, 11.
În # Pentru a finaliza: DEFINIȚI O FUNCȚIE și scrieți câteva cazuri de utilizare # ale
[3 ]: acelei funcție

Exercițiul 4
Având în vedere o moleculă reprezentată printr-un șir precum C9-H8-O4, calculați masa atomică a acesteia. De exemplu, pentru
o moleculă C4-H3, masa atomică ar fi 4*12,01 + 3*1,007825.

Faceți o soluție generală accesând dicționarul prin cheie, care în acest caz va fi tipul de atom. De exemplu, pentru molecula C5-
H3 ar trebui să urmam acești pași:

• Separați molecula prin cratime (o putem face cu funcția split, de exemplu).


• Pentru fiecare dintre părți, C5 și H3, găsiți tipul de atom: C și H. (Vom avea nevoie de un fel de buclă aici)
• Accesați dicționarul de mase și pentru cheia care corespunde tipului de atom, obțineți masa.
• Odată ce masa este găsită, înmulțiți-o cu numărul de atomi găsiți.

Sugestie: pentru un șir de tipul a = 'C15', a[0] ne va da tipul de atom, C. a[1:] ne oferă șirul rămas: „15”. Rețineți că trebuie
convertit într-un număr zecimal pentru a putea înmulți .

În[4] # mase atomice


mase = { „H” : 1,007825, „C” : 12,01, „O” : 15,9994, „N” : 14,0067, „S” : 31,972071,
„P” : 30,973762}

def calculate_atomic_mass (moleculă): """


Calculați masa atomică a unei molecule
"""
masa = 0,0

# Cod de completat

masa de întoarcere

imprimare (calculate_atomic_mass( 'C14-H10-O6' ))


imprimare (calculate_atomic_mass( 'C8-H10-N4-O2' ))
imprimare (calculate_atomic_mass( 'C20-H15-N5-O' ))
imprimare (calculați_masa_atomică( 'C20-H10-O2-P2-S' )) 0,0
0.0
0.0
0.0

Notă importantă

După cum se specifică în declarație, dicționarul trebuie creat din mers. Următoarele exemple sunt incorecte :
În[5]: mase = { „H” : 1,007825, „C” : 12,01, „O” : 15,9994, „N” : 14,0067, „S” : 31,972071,
„P” : 30,973762}

# Acest prim exemplu are mai multe probleme:


# 1: nu ia în considerare parametrul moleculei
# 2: nu folosește nicio buclă, soluția este „codificată”
# 3: funcția nu are retur
def calculate_atomic_mass (moleculă):
masa = mase[ 'C' ]*13 + mase[ 'H' ]*18 + mase[ 'O' ]*2

imprimare (calculate_atomic_mass( 'C13-H18-O2' ))

Nici unul

În[6]: mase = { „H” : 1,007825, „C” : 12,01, „O” : 15,9994, „N” : 14,0067, „S” : 31,972071,
„P” : 30,973762}

# Acest al doilea exemplu folosește o buclă,


# dar nu folosește dicționarul de masă
def calculate_atomic_mass (moleculă):
masa = 0,0
grupuri = molecule.split( '-' )
pentru grup in grupuri:
dacă grupul[0] == „C” :
masa += plutitor (grup[1:]) * 12,01
masa de întoarcere

imprimare (calculate_atomic_mass( 'C13-H18-O2' ))


156.13

Exercițiul 5
Unul dintre cei mai de bază algoritmi în criptografie este cifrul Caesar ( https://es.wikipedia.org /wiki/Cifrado_C % C3 %A9sar
( https://es.wikipedia.org / wiki / Cifrado_C %C3%A9sar) ) , care a fost folosit de Iulius Cezar pentru a comunica cu generalii săi,
și care constă în dat câte un text, pentru fiecare dintre literele textului, adăugând o deplasare pentru a obține o nouă literă diferită
de originală. Vom înțelege rapid mecanismul acestuia printr-un exemplu:

Dacă atribuim numărul 1 primei litere a alfabetului, A, 2 următoarei, B etc., imaginați-vă că avem următorul mesaj:
abc
123

Dacă aplicăm o deplasare de 3, vom găsi litera corespunzătoare în alfabet:


DEF
456

ABC a devenit DEF deoarece am adăugat un offset de 3. Am putea aplica și alte tipuri de deplasare, cum ar fi negative. De
exemplu, pentru offset -1 și mesajul original ABC, am avea un mesaj criptat de: ZAB.

Scrieți o funcție care, având în vedere un mesaj original și un offset, calculează și returnează mesajul criptat:
def cipher_cease (mesaj, offset=1): """
În [7
] Criptați mesajul folosind metoda lui Cesar
dat un offset """
mesaj_criptat = ""

# cod de completat

returnează mesajul_criptat

# Aici puteți adăuga mai multe exemple


print (cifrado_cesar( "PROGRAMARE PENTRU BIOINFORMATICĂ" , 1))

Exercițiul 6
Formatul PDB este folosit în chimia computațională pentru a stoca informații despre molecule pe disc. Fiecare linie care începe
cu ATOM reprezintă un atom din moleculă:
ATOM 1 Nu. ARG A 1 0.609 18.920 11.647 1.00 18.79 Nu.
ATOM 2 AC ARG A 1 0.149 17.722 10.984 1.00 13.68 C.

0,609, 18,920 și 11,647 sunt coordonatele x, y, z ale atomului 1 (un azot, „N”, ultima literă a liniei). Al doilea atom este de tip C
(Carbon) și denumește CA (Alpha Carbon).

Completați următorul cod care ne spune numărul de atomi găsiți pentru fiecare element.

De exemplu, pentru următoarele rânduri:


ATOM 211 Nu. TYR LA 27 4.697 8.290 -3.031 1.00 13.35 N
u. C
ATOM 212 AC TYR LA 27 5.025 8.033 -1.616 0.51 11.29
. C
ATOM 214 C. TYR LA 27 4.189 8.932 -0.730 1.00 10.87
. F
ATOM 215 FIE TYR LA 27 3.774 10.030 -1.101 1.00 12.90
IE
Am avea doi atomi de tip C, un atom de tip O și un alt atom de tip N.

IMPORTANT: Rețineți că a priori nu știți ce tipuri de atomi puteți găsi până când linia este citită în codul dvs., deci nu
puteți defini o listă sau dicționar de atomi găsiți decât dacă este definit gol și este actualizat așa cum găsim. ea.tipuri
de atomi pe care nu i-am mai întâlnit înainte .

Fișierul pe care îl vom folosi se află în directorul data / (data) și fișierul este 1l2 și .pdb (data/1l2 și .p db ) .
În [8 ]: importuri
_
"""
Următorul cod este un indiciu despre cum să citiți atomii linie cu linie și să
accesați tipul lor (ultimul caracter):

linii = molecule.split(os.linesep) pentru linie în linii:


if line.startswith('ATOM'):
atom = line[77].strip()
tipăriți atomul """

def atom_count (nume_fișier_pdb):

# Vom salva atomii găsiți în această variabilă: număr_atomi = dict ()

# Deschidem fisierul:
cu deschis (pdb_file_name) ca file_content:

# Cod de completat, șterge „pass”


trece

returnează atomii numerici

rezultat = atom_count( 'data/1l2y.pdb' )

# Rezultatul ar trebui să fie un dicționar cu


# următoarele valori:
# rezultat = {'N':27, 'C':98, 'O':29, 'H':150}
imprimare (rezultat) {}

Cheie

Următorul cod vă va ajuta să înțelegeți cum să creați un dicționar din mers și să programați soluția pentru acest exercițiu:

moleculă = " ""


ATOM 211 Nu. TYR LA 27 4.697 8.290 -3.031 1.00 13.35 Nu.
ATOM 212 AC TYR LA 27 5.025 8.033 -1.616 0.51 11.29 C.
ATOM 214 C. TYR LA 27 4.189 8.932 -0.730 1.00 10.87 C.
ATOM 215 FIE TYR LA 27 3.774 10.030 -1.101 1.00 12.90 FIE
ATOM 216 î.Hr TYR LA 27 6.509 8.214 -1.310 0.51 12.65 C.
ATOM 218 GC TYR LA 27 7.406 7.086 -1.795 0.51 14.00 C.
ATOM 220 CD1 TYR LA 27 7.951 6.144 -0.978 0.51 14.16 C.
ATOM 222 CD2 TYR LA 27 7.674 6.963 -3.164 0.51 17.10 C.
ATOM 224 CE1 TYR LA 27 8.752 5.109 -1.405 0.51 14.93 C.
ATOM 226 CE2 TYR LA 27 8.455 5.964 -3.656 0.51 17.43 C.
ATOM 228 C.Z. TYR LA 27 8.990 5.041 -2.763 0.51 16.44 C.
ATOM 230 ooh TYR LA 27 9.803 4.026 -3.237 0.51 17.79 FIE
ATOM 232 Nu. CYS LA 28 3.977 8.402 0.487 1.00 10.53 Nu.
ATOM 233 AC CYS LA 28 3.295 9.146 1.517 1.00 10.04 C.
ATOM 234 C. CYS LA 28 4.174 10.264 2.053 1.00 10.31 C.
ATOM 235 FIE CYS LA 28 5.378 10.108 2.202 1.00 12.91 FIE
ATOM 236 î.Hr CYS LA 28 2.912 8.210 2.680 1.00 9.81 C.
ATOM 237 SG CYS LA 28 1.804 6.853 2.197 1.00 9.93 S
ATOM 238 Nu. GLY LA 29 3.546 11.391 2.430 1.00 10.76 Nu.
ATOM 239 AC GLY LA 29 4.295 12.472 3.049 1.00 11.93 C.
ATOM 240 C. GLY LA 29 3.416 13.524 3.596 1.00 12.60 C.
În [9 ]: importuri
_
ATOM 241 FIE GLY LA 29 3.985 14.574 4.052 1.00 15.82 FIE
ATOM 242 OXT GLY LA 29 2.168 13.386 3.672 1.00 11.37 FIE
"""

# Vom citi rând cu rând fiecare atom și le vom salva


# coordonate într-un dicționar: coordonate = {}

# Separăm molecula șir prin rupturi de linie


linii = molecule.split(os.linesep)
# Acum repetăm fiecare dintre liniile for în rânduri:
# Dacă linia începe cu ATOM:
if line.startswith( 'ATOM' ):
# Să rămânem cu numărul atomului (211, 212, 214 etc.): fields =
line.split()
# Numărul atomic corespunde celui de-al doilea câmp
# când separăm linia prin spații. precum indicii
# începe de la 0, al doilea corespunde indexului 1: num_atom = fields[1]
imprimare (num_atom)

# Acum obținem coordonatele x, y, z ale atomului # în același mod:


x = float (câmpuri[6])
y = float (câmpuri[7])
z = float (câmpuri[8])

# În cele din urmă, salvăm coordonatele în dicționar pentru numărul


cheie al numărului atomului: coordonate[num_atom] = [x, y, z]

# Afișați dicționarul:
imprimare (coordonate)
211
212
214
215
216
218
220
222
224
226
228
230
232
233
234
235
236
237
238
239
240
241
242
{'211': [4.697, 8.29, -3.031], '212': [5.025, 8.033, -1.616], '214': [4.189, 8.932,
-0.73], '215': [3.774, 10.03, -1.101], '216': [6.509, 8.214, -1.31], '2 18':
[7.406, 7.086, -1.795], '220': [7.951, 6.144, -0.978], '222': [7.674, 6.9 63, -
3.164], '224': [8.752, 5.109, -1.405], '226': [8.455, 5.964, -3.656], '22 8':
[8.99, 5.041, -2.763], '230': [9.803, 4.026, -3.237], '232': [3.977, 8.40 2,
0.487], '233': [3.295, 9.146, 1.517], '234': [4.174, 10.264, 2.053], '235': [5.378,
10.108, 2.202], '236': [2.912, 8.21, 2.68], '237': [1.804, 6.853, 2.19 7], '238':
[3.546, 11.391, 2.43], '239': [4.295, 12.472, 3.049], '240': [3.41 6, 13.524,
3.596], '241': [3.985, 14.574, 4.052], '242': [2.168, 13.386, 3.67 2]}

Exercițiul 7
Pentru următoarea listă de numere, scrieți pe ecran toate cele care sunt impare și câte au fost găsite :
numere [386, 462, 47, 418, 907, 344, 236, 375, 823, 566,
597, 978, 328, 615, 953, 345, 399 , 162, 758, 219,
918, 237, 412, 566, 826, 248, 866 , 950, 626, 949,
687, 217, 815, 67, 104, 58, 512, 24, 892, 894, 767,
553, 81, 379, 843, 831, 445, 742, 717, 958, 743,
527, 345, 221, 200, 456]

În[10]: # Răspunsul
dvs
Exercițiul 8
Scrieți un program care calculează distanța euclidiană dintre două puncte din spațiul 2D. Aceste puncte sunt (x1, y1) și (x2, y2):
În [11 ]: distanță def (x1, y1, x2, y2):
d=0,0

# A termina
întoarcere d

print ( "Distanța dintre (1,2) și (2,4) este: " , distance(1.0, 2.0, 2.0, 4.0))
print ( "Distanța dintre (3,2) și (7,-3) este: " , distanta(3.0, 2.0, 7.0, -3.0))
print ( "Distanta dintre (5,1) si (-2,5) este: " , distanta(5.0, 1.0, -2.0, 5.0))

Distanța dintre (1,2) și (2,4) este: 0,0


Distanța dintre (3,2) și (7,-3) este: 0,0
Distanța dintre (5,1) și (-2,5) este: 0,0

Intrebarea 1
Paradigma de programare orientată pe obiecte este utilizată pe scară largă în majoritatea bibliotecilor care sunt scrise în
Python. Este o modalitate utilă de încapsulare a informațiilor care vor fi tratate de obiectul însuși unde acea informație a fost
definită.

Explicați care sunt următoarele concepte:

• O clasa
• Un obiect
• un atribut
• O metodă
• Un constructor
• O superclasă și o subclasă

Dați un exemplu de definire a unei clase în codul Python și un exemplu de utilizare a aceleiași clase .

Vă puteți baza pe acest material: http://life.bsc.es/pid/brian/ python /#/7 ( http://life.bsc.es/pid/brian/ python /#/7)

Răspuns:

Răspunsul dvs

intrebarea 2
Excepții sunt erorile detectate în timpul execuției. Ele pot și ar trebui să fie gestionate de programator pentru a minimiza riscul
ca un anumit program să eșueze într-un mod necontrolat.

Dați exemple de tipuri de excepții în limbajul Python și cum sunt prinse.

Răspuns:

Răspunsul dvs

S-ar putea să vă placă și