2021-12-10 xty rosalind 1-10

2021-12-10  本文已影响0人  徐添添

Problem1:给定一个DNA字符串s,计算符号“A”、“C”、“G”和“T”在s中的出现次数。

cnts = {c:0 for c in 'ATCG'}                         #创建一个集合,集合里面有四个元素A\T\C\G
for line in open("task1 dna nuclear.txt", 'r'):      #逐行读取文件
  for c in line.rstrip():                            #str.rstrip() 删除字符串末尾的指定字符,默认为空白符,包括空格、换行符、回车符、制表符。
    cnts[c] += 1
print(cnts)

Problem2:将DNA转为RNA。(即用"U"替换"T")

with open('task2 .txt', 'r') as f:
    data = f.read().strip('\n')  # 3种读取文件的方法
                                 # read([size]) 函数:逐个字节或者字符读取文件中的内容;size代表读取的最大字节数
                                 # readline() 函数:逐行读取文件中的内容;
                                 # readlines() 函数:一次性读取文件中多行内容
                                 # str.strip():移除字符串头尾指定的字符(默认为空格或换行符)。如sri.strip(‘0’)。
print(data.replace("T", "U"))    #str.replace(old, new[, max])用new替换str中的old,最大次数为m

Problem3:DNA互补链

    data = f.read().strip('\n')  #逐个字节读取
    st = data.replace('A', 't').replace('T', 'a').replace('C', 'g').replace('G', 'c').upper()[::-1]  #str[::-1]:倒序排列字符串
    print(st)

Problem4:斐波那切数列

k=input("k is:")
fn =[1,1];                  #[]是列表
bool_list=[1,1,0];
for i in range(2,int(n)):   #range(a,b),从a到b-1
    if(bool_list[i]==0):
        fn.append(fn[i-1]+int(k)*fn[i-2]) #():在列表的末尾添加一个元素
        bool_list[i]=1
        bool_list.append(0)
        i+=1;
    else:
        bool_list.append(0)
        i+=1;
print(fn[int(n)-1])

Problem5:C计算GC含量,返回GC含量最多的字符串ID

import re                                                   #加载正则表达式
Seq = {}                                                    #字典,key(序列ID):value(序列)
seqGC = {}                                                  #字典,key(序列ID):value(序列GC个数)
with open('task5.txt','r') as f:
        for line in f:                                       #逐个字符读取
                if re.match(">",line):                       #如果这一行(序列ID)有‘>’
                        SeqName = line[1:]                   #SeqName变成序列ID(从第二个字符开始,不包括>)
                        Seq[SeqName] = ''                    #Seq字典里,定义一个key为序列ID,值为空
                        seqGC[SeqName] = 0                   #SeqGC字典里,定义一个key为序列ID,值为空
                else:                                        #n+1行(序列)没有‘>’
                        line = line.upper()                  #n+1行字符串大写
                        line = line.rstrip()
                        Seq[SeqName] += line                #Seq字典里,添加一个键值对,key(序列ID):value(序列)
                        seqGC[SeqName] += line.count('G')   #SeqGC字典里,添加一个键值对,key(序列ID):value(0+序列字符串里G的个数)
                        seqGC[SeqName] += line.count('C')   #SeqGC字典里,添加一个键值对,key(序列ID):value(序列字符串里G+C的个数)
maxGC = 0
for key,value in Seq.items():                               #遍历seq字典
        if maxGC < float(seqGC[key]/ len(value)*100):       #如果maxGC<a=【seqGC字典里的key的value/seq字典里对应的key的value(序列字符串)的长度】
                maxGC = float(seqGC[key] / len(value)*100)  #maxGC=a
                tmp = key                                   #tmp=序列ID
print ('>'+tmp+Seq[tmp])             #显示> + 序列ID + 序列
print (tmp)                         #显示序列ID
print(float(maxGC))                 #显示最大的GC含量

Problem6:计算点突变个数

lst = []                             #创建空列表lst
for line in fh:                      #遍历行
        print(line)
        lst.append(line.rstrip())    #每一行作为lst的一个元素
hamming_dis = 0
for i in range(len(lst[0])):         #lst[0]代表第一行字符串,1-第一行字符串的长度
        if lst[0][i] == lst[1][i]:   #如果第一行字符串的第一个字符和第二行字符串的第一个字符相等
                continue
        hamming_dis += 1
print (hamming_dis)

Problem7:孟德尔第一定律

#一个群体中有三种基因型的生物:k,显性纯合子;m,杂合子;n,隐性纯合子。
# 假设这对形状由一对等位基因控制,且群体中随机选取的任何两个个体都能交配,求随机选取两个个体交配后,子代拥有显性等位基因的概率。
k =22
m = 25
n = 16

num = int(k + m + n)
choice = num*(num-1)/2.0
p = 1 - (n*(n-1)/2 + 0.25*m*(m-1)/2 + m*n*0.5)/choice
print(p)

Problem8:RNA翻译为蛋白质

def translate_rna(sequence):
   codonTable = {              #创建一个字典,key是密码子,value是蛋白质
   'AUA':'I', 'AUC':'I', 'AUU':'I', 'AUG':'M',
   'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACU':'T',
   'AAC':'N', 'AAU':'N', 'AAA':'K', 'AAG':'K',
   'AGC':'S', 'AGU':'S', 'AGA':'R', 'AGG':'R',
   'CUA':'L', 'CUC':'L', 'CUG':'L', 'CUU':'L',
   'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCU':'P',
   'CAC':'H', 'CAU':'H', 'CAA':'Q', 'CAG':'Q',
   'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGU':'R',
   'GUA':'V', 'GUC':'V', 'GUG':'V', 'GUU':'V',
   'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCU':'A',
   'GAC':'D', 'GAU':'D', 'GAA':'E', 'GAG':'E',
   'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGU':'G',
   'UCA':'S', 'UCC':'S', 'UCG':'S', 'UCU':'S',
   'UUC':'F', 'UUU':'F', 'UUA':'L', 'UUG':'L',
   'UAC':'Y', 'UAU':'Y', 'UAA':'', 'UAG':'',
   'UGC':'C', 'UGU':'C', 'UGA':'', 'UGG':'W',
   }
   proteinsequence = ''#蛋白质序列先设定为空字符串
   for n in range(0,len(sequence),3):           #[0,stop),步长为3.左闭右开
       if sequence[n:n+3] in codonTable.keys(): #如果RNA序列的第[n,n+3)字符串在密码子转换表的key中
           proteinsequence += codonTable[sequence[n:n+3]] #蛋白质序列字符串添加key对应的value
   return proteinsequence

protein_fh = open('task8 protein.txt','w')
with open('task8.txt','r') as f:
       for line in f:
               protein_fh.write(translate_rna(line.strip('\n')))

Problem9:DNA中找结构域

seq = 'GATATATGCATATACTT'
motif = 'ATAT'
motif_len = len(motif)  #结构域的长度
position = [] #创建一个存放位置的列表
for i in range(len(seq)-motif_len): #0~seq长度减去motif长度
        if seq[i:i+motif_len] == motif: #seq字符串中第i+1~第i+motif位置的字符串如果等于motif
                position.append(i+1)  #位置列表中添加元素i+1
print(position)

Problem10:consensus和profile

example.png

prodile:每一列ACGT出现的次数
consensus:每一列出现次数最多的碱基

a=open('task10.txt','r')
seq_list = []
for line in a.readlines():
   if not line.startswith('>'):
        seq = list(line.rstrip())
        seq_list.append(seq)
tt=[]
for base in 'ACGT': #遍历字符串,从碱基A开始
        base_total = []             #碱基A每一列出现的次数存放在base_total列表中
        for sit in range(len(seq_list[0])): #对应序列第1-8列,从第一列开始
                        col = [x[sit] for x in seq_list] #col集合存放第一列的碱基
                        num = col.count(base) #数第一列A出现的次数
                        base_total.append(num)#将第一列A出现的次数放在base_total列表
        print(base,base_total) #循环完后,将1-8列A出现的次数放在base_total列表
        tt.append(base_total)
common = ''
a=tt[0]
c=tt[1]
g=tt[2]
t=tt[3]
for i in range(8):
    if max(a[i], c[i], g[i], t[i]) == a[i]:
        common += 'A'
    elif max(a[i], c[i], g[i], t[i]) == c[i]:
        common += 'C'
    elif max(a[i], c[i], g[i], t[i]) == g[i]:
        common += 'G'
    elif max(a[i], c[i], g[i], t[i]) == t[i]:
        common += 'T'
print(common)
上一篇 下一篇

猜你喜欢

热点阅读