1 # 'objektumterv' létrehozása --------------------------------2 class mol:3 def __init__(self,lst):4 self.b=lst[0]5 self.C=lst[1]6 self.H=lst[2]7 self.O=lst[3]8 self.N=lst[4]9 self.S=lst[5]10 self.m=self.C*12+self.H*1+self.O*16+self.N*14+self.S*32 # 2. feladat11 12 def darab(self): # objektum saját metódusa: egy szótárt ad, az egyes atomok darabszámával13 return {'C':self.C,'H':self.H,'O':self.O,'N':self.N,'S':self.S}14 15 # ----------------------------------------------------------------------------------16 17 aminosav=dict() # szótár: kulcs az aminosav azonosítója (pl.: Gly)18 # a kulcshoz egy lista tartozik, melyben a maradék 6 adat szerepel19 # ez a szótár kifejezetten a 2. feldathoz kell. Később nem kell...20 print('1. feladat - adatok beolvasása...')21 fbe=open('aminosav.txt','r')22 # minden aminosav 7 adattal rendelkezik23 count=1 # számoljuk, hogy hány sort olvastunk be,24 # és ha megvan a 7 elem, akkor összerakjuk25 # a szótárt...26 for sor in fbe: 27 if count==1:28 kulcs=sor.strip() # az első sorok (hetesével) a kulcsok29 count+=130 lst=[] # kulcshoz tartozó lista31 else:32 if count<7:33 lst.append(sor.strip()) # építjük a listát a többi adatból... 34 count+=135 else:36 lst.append(sor.strip()) # ha megvan minden (7 adat beolvasva), 37 lst[1:]=map(int,lst[1:]) # akkor amit kell azt int-re konvertáljuk38 aminosav[kulcs]=lst # szótárbejegyzés39 count=140 fbe.close()41 # --------------------------------------------------------------------42 43 print('----------------------------------------------------')44 print('2. feladat - megoldva...')45 print('----------------------------------------------------')46 # ---------------------------------------------------------------------47 48 print('----------------------------------------------------')49 print('3. feladat')50 print('----------------------------------------------------')51 fki=open('eredmeny.txt','w')52 print('3. feladat',file=fki)53 # RENDEZZÜK A SZÓTÁRUNKAT(!) molekulatömeg szerint54 # ehhez a mol CLASS-t használjuk55 # rendezés kulcsa: item egy komplett szótárbejegyzés56 # 0 indexű eleme a kulcs, 1 indexű eleme a kulcshoz tartozó lista57 # ezt a listát 'mol' objektumként kezeljük, aminek 'm' mezője a molekulatömeg58 # lásd mol CLASS megvalósítását...59 new=dict(sorted(aminosav.items(),key=lambda item:mol(item[1]).m)) 60 for kulcs,amino in new.items(): # szótár 'bejárása' kulcs és érték szerint egyaránt61 a=mol(amino) # listából 'mol' objektum, így 'a' egy objektum lesz62 print(f'{kulcs} {a.m}')63 print(f'{kulcs} {a.m}',file=fki)64 # eddig volt szükségünk az aminosav szótárra65 # most egy más kulcsú szótár kell, egy olyan, ahol a kulcs az aminosav betűje66 # adatai közé pedig bekerül a hárombetűs azonosító67 # ezt intézi az alábbi ciklus:68 uj_aminosav=dict()69 for kulcs,lista in aminosav.items():70 temp=lista # régi kulcshoz tartozó régi bejegyzés (ez, mint tudjuk egy lista)71 uj_kulcs=temp[0] # új kulcsunk a lista első eleme, a betűjel72 temp.pop(0) # töröljük a listából a betűjelet73 temp.insert(0,kulcs) # és beszúrjuk a helyére a régi kulcsot (pl. Gly)74 uj_aminosav[uj_kulcs]=temp # új szótárunkba egy új bejegyzés (kulcs-lista 'páros')75 76 fbe=open('BSA.txt','r') # a fájl tartalmát egy listába olvassuk be...77 bsa=[]78 for sor in fbe:79 sor=sor.strip()80 bsa.append(sor)81 fbe.close()82 # --------------------------------------------------------------------83 84 print('----------------------------------------------------')85 print('4. feladat')86 print('----------------------------------------------------')87 print('4. feladat',file=fki)88 # kilép H2O (ezt ne felejtsuk majd el)89 # újabb szótár: kulcs az atom, szótárbejegyzés pedig az adott atom összesített száma90 atomok={'C':0,'H':0,'O':0,'N':0,'S':0} # az egyes atomok, mint kulcsok és a számlálók nullára állítva91 for amin in bsa: # veszünk a listából egy aminosavat92 m=mol(uj_aminosav[amin]) # 'm' néven csinálunk belőle egy 'mol' objektumot93 # az objektumnak van egy saját metódusa, 'darab' néven, ami egy szótárt ad :) (megint egy...)94 for k,v in m.darab().items(): # a 'darab' adta szótár bejárása kulcs és érték szerint...95 atomok[k]+=v # a 'darab' és 'atomok' szótárak azonos kulcsú értékének összesítése96 # le kell vonni a kapcsolódásokkor kilépő vízmolekulákban szereplő H és O darabszámait 97 kapcsolodasok=len(bsa)-1 # ennyi kapcsolódás van98 atomok['H']-=2*kapcsolodasok # 2-szeresen levonjuk a H-t99 atomok['O']-=kapcsolodasok # 1-szeresen az O darabszámát100 for atom,tomeg in atomok.items():101 print(atom,tomeg,end=' ')102 print(atom,tomeg,end=' ',file=fki)103 print()104 print(file=fki)105 # --------------------------------------------------------------------106 107 print('----------------------------------------------------')108 print('5. feladat')109 print('----------------------------------------------------')110 print('5. feladat',file=fki)111 # Tirozin (Y), Fenilalanin (W) és a Triptofán (F) után hasít112 hasitas={'Y','W','F'} # ilyen karakterek felbukkanását vizsgáljuk...113 info=[0,0,0] # információk: leghosszabb lánc hossza, kezdete, vége114 kezd=1 # kezdés az elejétől115 for pozicio,amin in enumerate(bsa,start=1): # bsa lista bejárása116 if amin in hasitas: # aktuális karakter benne van a halmazban, akkor117 vege=pozicio # ezen a poticion van hasítás118 if vege-kezd+1>info[0]: # maximumkeresés119 info[0]=vege-kezd+1 # info-ba a megfelelő adatok120 info[1]=kezd121 info[2]=vege122 kezd=pozicio+1 # következő lánc kezdete123 print(f'Leghosszabb lánc hossza: {info[0]}')124 print(f'Kezdete: {info[1]}\nVége: {info[2]}')125 print(f'Leghosszabb lánc hossza: {info[0]}',file=fki)126 print(f'Kezdete: {info[1]}\nVége: {info[2]}',file=fki)127 # --------------------------------------------------------------------128 129 print('----------------------------------------------------') 130 print('6. feladat')131 print('----------------------------------------------------')132 print('6. feladat',file=fki)133 # Arginin (R) után hasít, de csak akkor,134 # ha Alinin (A) vagy Valin (V) követi135 hasitas={'RA','RV'} # ilyen karakterpárokat keresünk136 for i in range(len(bsa)-1): # index alapján megyünk a listán végig137 if bsa[i]+bsa[i+1] in hasitas: # hogy tudjunk a következő elemre hivatkozni (i+1)138 vizsgal=bsa[:i+1] # részlista 'leválasztása' vizsgálatra139 break # csak az első lehasított lánc kell140 141 print('A hasítás során keletkező első fehérjelánc részletben')142 print(f'{vizsgal.count("C")} Cisztein (C) található')143 print('A hasítás során keletkező első fehérjelánc részletben',file=fki)144 print(f'{vizsgal.count("C")} Cisztein (C) található',file=fki) # lista adott értékű elemeinek számlálása (cout) 145 146 fki.close()147