生物信息学Python习题来自ROSALIND。
1. Counting DNA Nucleotides
给定一个DNA序列s=’AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC’,计算这一序列s中四个碱基A、T、C、G的碱基数。
1 2 3 4 5 6 7 8 9 10
| s1 ='AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC'
A = s1.count('A',0,len(s1)) T = s1.count('T',0,len(s1)) C = s1.count('C',0,len(s1)) G = s1.count('G',0,len(s1))
list = [A,T,C,G] for l in list: print(l,end=' ')
|
封装在函数中。
1 2 3 4 5 6 7 8
| def count(string,substring): num = string.count(substring,0,len(s1)) return num
print(count(s1,'A')) print(count(s1,'T')) print(count(s1,'C')) print(count(s1,'G'))
|
2. Transcribing DNA into RNA
给定一个编码链的DNA序列s1=’GATGGAACTTGACTACGTAAATT’,将其转换为RNA序列,即T替换为U。
1 2 3 4 5 6 7 8 9 10
| s1 = 'GATGGAACTTGACTACGTAAATT' s2 = s1.replace('T', 'U') print(s2)
def DNA2RNA(DNAstring): RNAstring = DNAstring.replace('T','U') return RNAstring
print(DNA2RNA(s1))
|
3. Complementing a strand of DNA
给定一个DNA序列s1=’AAAACCCGGT’,得到其反向互补序列。
第一种方法:用字典。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| s1 = 'AAAACCCGGT'
def DNA_Reverse(DNAstring): return DNAstring[::-1]
def DNA_Complement(DNAstring): my_dict = {'A':'T', 'T':'A', 'C':'G', 'G':'C', 'a':'t', 't':'a', 'c':'g', 'g':'c'} DNAstring_list = list(DNAstring) DNA_com_list = [my_dict[base] for base in DNAstring_list] DNA_com = ''.join(DNA_com_list) return DNA_com
def ReverseCom(DNAstring): rev = DNA_Reverse(DNAstring) rev_com = DNA_Complement(rev) return rev_com
print(ReverseCom(s1))
|
第二种方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| s1 = 'AAAACCCGGT'
def DNA_Reverse(DNAstring): return DNAstring[::-1]
def DNA_Complement2(DNAstring): DNAstring = DNAstring.upper() DNAstring = DNAstring.replace('A','t') DNAstring = DNAstring.replace('T','A') DNAstring = DNAstring.replace('C','g') DNAstring = DNAstring.replace('G','C') DNAstring = DNAstring.upper() return DNAstring
def ReverseCom2(DNAstring): rev = DNA_Reverse(DNAstring) rev_com = DNA_Complement2(rev) return rev_com
print(ReverseCom2(s1))
|