题目:统计DNA序列中4种核苷酸的个数和频率
ATGAAACGCATTAGCACCACCATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGA
要求:
将个数和频率输出到名为D:frq.txt的文本文件中,且文件的第一行必须是标题行,包含4列,每一列为对应核苷酸的单字母符号,列间用Tab键’t’分割
编码:
第一种方法:用循环实现
求数量
DNAstr = 'ATGAAACGCATTAGCACCACCATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGA'
A_num = C_num = G_num = T_num = 0 #设置初始值
for i in range(len(DNAstr)): #循环遍历 字符串是序列(有序):可以建立索引
if DNAstr[i]=='A':
A_num = A_num + 1
elif DNAstr[i]=='C':
C_num = C_num + 1
elif DNAstr[i]=='G':
G_num += 1 #another way
elif DNAstr[i]=='T':
T_num += 1 #another way
print('A_num =', A_num)
print('C_num =', C_num)
print('G_num =', G_num)
print('T_num =', T_num)
输出结果:
A_num = 21
C_num = 22
G_num = 12
T_num = 11
求频率:
total_num = len(DNAstr)
#total_num = float(total_num)
print('A_frq =', A_num/total_num)
print('C_frq =', C_num/total_num)
print('G_frq =', G_num/total_num)
print('T_frq =', T_num/total_num)
输出结果:
A_frq = 0.3181818181818182
C_frq = 0.3333333333333333
G_frq = 0.18181818181818182
T_frq = 0.16666666666666666
第二种方式:用字典实现
求数量
dna_dic = {'A': 0, 'C': 0, 'G': 0, 'T': 0} #the dict for DNA numbers
for n in DNAstr:
dna_dic[n] += 1
print(dna_dic) #print out the DNA numbers in a dict format
输出结果:
{'A': 21, 'C': 22, 'G': 12, 'T': 11}
求频率:
dna_frq_dic = {} #空字典
DNAs = 'ACGT' #4种核苷酸
for d in DNAs: #循环序列
dna_frq_dic[d] = dna_dic[d]/total_num
print(dna_frq_dic)
输出结果:
{'A': 0.3181818181818182, 'C': 0.3333333333333333, 'G': 0.18181818181818182, 'T': 0.16666666666666666}
写入文件:
写入核苷酸(A、G、C、T):
oflname = 'D:/frq.txt' #文件的位置
ofl = open(oflname, 'wt') #打开文件并可读写成txt文本
ostr = 't'.join(DNAs) #用t分割不同的核苷酸字母
ofl.write(ostr + 'n') #第一行写入后n换行
写入出现的数量:
ostr = '' #创建一个字符串
for d in DNAs:
ostr += str(dna_dic[d]) + 't'
ostr = ostr.strip()
ostr += 'n'
ofl.write(ostr)
写入频率:
olst = [] #创建一个DNA序列的list
for d in DNAs:
olst.append(str(dna_frq_dic[d])) #list用append来增加元素
ostr = 't'.join(olst) + 'n'
ofl.write(ostr)
ofl.close() #记得把打开的文件关闭
通过这个例子希望大家能够体会
- 字符串、列表和字典的使用
- 循环和判断
- 文件的输入和输出
根据上面的案例,给大家留一个小作业
统计下面蛋白序列中20种氨基酸的个数和频率:
MNAPERQPQPDGGDAPGHEPGGSPQDELDFSILFDYEYLNPNEEEPNAHKVASPPSGPAYPDDVLDYGLKPYSPLASLSGEPPGRFGEPDRVGPQKFLSAAKPAGASGLSPRIEITPSHELIQAVGPLRMRDAGLLVEQPPLAGVAASPRFTLPVPGFEGYREPLCLSPASSGSSASFISDTFSPYTSPCVSPNNGGPDDLCPQFQNIPAHYSPRTSPIMSPRTSLAEDSCLGRHSPVPRPASRSSSPGAKRRHSCAEALVALPPGASPQRSRSPSPQPSSHVAPQDHGSPAGYPPVAGSAVIMDALNSLATDSPCGIPPKMWK
要求和本问一致~完成的可以在评论区留1,可以私信我与我进行讨论,下周一我会发布答案