【Python生信编程笔记】if、for以及while语句小例子

前面我们学习了数据类型以及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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容