前面我们学习了数据类型以及if、for和while语句,下面,我们用刚刚学到的知识来编程序:
一、估计蛋白质的净电荷
在固定的pH值下,可以计算出蛋白质的净电荷和其各个氨基酸的电荷之和。这是一个近似值,因为它没有考虑到氨基酸是否暴露或隐藏在蛋白质结构中。
prot_seq=input('请输入蛋白序列:').upper()
charge=-0.002
aa_charge = {"C":-.045,"D":-.999,"E":-.998,"H":.091,
"K":1,"R":1,"Y":-.001}
for aa in prot_seq:
charge=charge+aa_charge.get(aa,0)
print(charge)
请输入蛋白序列:EDCHYRYHEH
-1.7710000000000001
二、寻找保守区域
为了寻找PCR引物,最好使用退化较少(或更保守)的DNA区域。这个程序的目的是寻找这个区域。
由于一个PCR引物大约有16个核苷酸,为了给引物设计留出空间,搜索空间应该至少有45个核苷酸长。
我们应该在输入序列中找到一个15个氨基酸的区域。
15个氨基酸提供了45个核苷酸的搜索区域(每个氨基酸3个核苷酸)。
prot_seq=input('请输入蛋白序列:').upper()
prot_deg = {'A':4, 'C':2, 'D':2, 'E':2, 'F':2, 'G':4,
'H':2, 'I':3, 'K':2, 'L':6, 'M':1, 'N':2,
'P':4, 'Q':2, 'R':6, 'S':6, 'T':4, 'V':4,
'W':1, 'Y':2}
segs_values=[]
for aa in range(len(prot_seq)):
segment=prot_seq[aa:(aa+15)] #15个氨基酸作为一个切片
degen=0
if len(segment)==15:
for x in segment:
degen+=prot_deg.get(x,3.05) #计算这段蛋白序列的总密码子
segs_values.append(degen)
min_value=min(segs_values) #选最小的即为最保守区域
min_pos=segs_values.index(min_value)
print('保守区域为:{0}'.format(prot_seq[min_pos:(min_pos+15)]))
请输入蛋白序列:ACITSWYQEELTVSTHRRRKY
保守区域为:CITSWYQEELTVSTH
使用while语句
prot_seq=input('请输入蛋白序列:').upper()
prot_deg = {'A':4, 'C':2, 'D':2, 'E':2, 'F':2, 'G':4,
'H':2, 'I':3, 'K':2, 'L':6, 'M':1, 'N':2,
'P':4, 'Q':2, 'R':6, 'S':6, 'T':4, 'V':4,
'W':1, 'Y':2}
segs_values=[]
segs_seqs=[]
segment=prot_seq[:15]
a=0
while len(segment)==15:
degen=0
for x in segment:
degen+=prot_deg.get(x,3.05)
segs_values.append(degen)
segs_seqs.append(segment)
a+=1
segment=prot_seq[a:a+15]
print(segs_seqs[segs_values.index(min(segs_values))])
请输入蛋白序列:ACITSWYQEELTVSTHRRRKY
CITSWYQEELTVSTH