一、题目:
对于一串氨基酸序列(由字母表前二十个大写字母组成),需要得到每一个氨基酸数目,然后输出到文件夹D:\test\frq.txt,要求用循环和字典实现。
氨基酸序列如下:
ABCDEFGHIJKLMNNLKJIHDCBA
frq.txt的例子如下:
第一行是题目。
第二行是二十个个氨基酸的首字母,中间以'\t'分隔
第三行是每一个氨基酸出现的次数,中间以'\t'分隔
第四行是每一个氨基酸出现的频率,中间以'\t'分隔
二、分析
首先是创建字典。然后每一个字典的值设为0.
然后通过循环遍历,得到每一个字母出现的次数。
然后打开文件(没有这个文件夹或者是文档需要创建)
然后是输出。
三、代码
代码如下:
#如果目录不存在,则创建 import os dirs = 'D:\\test' if not os.path.exists(dirs): os.makedirs(dirs) #创建字典 dirt1={ 'A':0, 'B':0, 'C':0, 'D':0, 'E':0, 'F':0, 'G':0, 'H':0, 'I':0, 'J':0, 'K':0, 'L':0, 'M':0, 'N':0, 'O':0, 'P':0, 'Q':0, 'R':0, 'S':0, 'T':0 } #这里输入检索字符串 str="MNAPERQPQPDGGDAPGHEPGGSPQDELDFSILFDYE\ YLNPNEEEPNAHKVASPPSGPAYPDDVLDYGLKPYSPLASL\ SGEPPGRFGEPDRVGPQKFLSAAKPAGASGLSPRIEITPSHE\ LIQAVGPLRMRDAGLLVEQPPLAGVAASPRFTLPVPGFEGYR\ EPLCLSPASSGSSASFISDTFSPYTSPCVSPNNGGPDDLCPQF\ QNIPAHYSPRTSPIMSPRTSLAEDSCLGRHSPVPRPASRSSSP\ GAKRRHSCAEALVALPPGASPQRSRSPSPQPSSHVAPQDHGSPA\ GYPPVAGSAVIMDALNSLATDSPCGIPPKMWKTSP" #简单测试例子 #str='ABCDEFGH' for x in range(len(str)): if str[x] in dirt1: dirt1[str[x]]+=1 #输出显示结果 #print (dirt1) #输出到文件 data=open('D:\\test\\frq.txt','w') print('氨基酸出现频率',file=data) #输出字母 for x in dirt1: print(x+'\t',end='',file=data) print('',file=data) #输出数目 for x in dirt1: print(dirt1[x],'\t',end='',file=data) print('',file=data) #输出频率,修改round(,4)里面的数字确定保留几位小数 for x in dirt1: print(round(dirt1[x]/len(str),4),'\t',end='',file=data) data.close() print('finish!') print('you can see the result in the D:\\test\\frq.txt.')
四、注意问题
1、如果输出文件夹不存在,我们需要如何创建
#如果目录不存在,则创建 import os dirs = 'D:\\test' if not os.path.exists(dirs): os.makedirs(dirs)
2、文档不存在,如何创建
data=open('D:\\test\\frq.txt','w') //代码会自动实现,如果文档不存在则自动创建
3、如何不换行的输出
data=open('D:\\test\\frq.txt','w')
//file=data, file是关键字,data使我们自己定义的,代表向文件输出
//end='',是关键,代表我们在输出以后末尾加上什么,如果只是''则什么都不加,如果是' '则是存在空格 print('name',end='',file=data)
4、如果实现列与列之间的间距
输出结果加上'\t'就可以
5、如何实现输出小数的小数位数的控制
关键在于round(num, 4)这个函数,num是我们操作数,4代表小数点后四位。
6、如何判断一个键是否是在字典里面。
if x in dirt1 就已经足够判断了