1_Counting DNA Nucleotides
with open('E:/rosalind_dna(1).txt') as f:
a = list(f.read())
print(a.count('A'))
print(a.count('C'))
print(a.count('G'))
print(a.count('T'))
2_Transcribing DNA into RNA
with open('E:/rosalind_dna.txt') as f:
with open('E:/new.txt','w') as f1:
a = f.read()
f1.write(a.replace('T','U'))
# 把DNA文件中的T所有变成RNA中的U,而后写进另一个文件里
3_Complementing a Strand of DNA
with open('E:/rosalind_revc.txt') as f:
strings = f.read()
intab = 'ACGT'
outtab = 'TGCA'
trantab = str.maketrans(intab, outtab)
'''
maketrans() 方法用于建立字符映射的转换表,对于接受两个参数的最简单的调用方式,
第一个参数是字符串,表示须要转换的字符,第二个参数也是字符串表示转换的目标。
两个字符串的长度必须相同,为一一对应的关系。
'''
print(strings[::-1].translate(trantab))
4_Rabbits and Recurrence Relations
def Rabbits(n, k):
if n <= 2: # 这里关系到兔子几个月能够繁衍一代,这里应该假设的是兔子每隔2个月繁衍一代。
return 1
else:
return Rabbits(n-1, k) + k * Rabbits(n-2, k)
print(Rabbits(3, 4))
5_Computing GC Content
def GCcount(strings):
G = strings.count('G')
C = strings.count('C')
GC = float((G + C) / len(strings))
return GC
with open('E:/rosalind_gc.txt') as fh:
a = fh.read().split('>') # 把fasta格式根据'>'从而分开
ID_and_GC = {}
del a[0] # 去除空字符串
for ID_sequence in a:
ID = ID_sequence.split('\n')[0]
sequence = (''.join(ID_sequence.split('\n')[1:])).upper()
GC_content = GCcount(sequence)
ID_and_GC[ID] = GC_content
ID_and_GC_max = max(ID_and_GC.items(), key = lambda x:x[1])
ID_and_GC = sorted(ID_and_GC.items(), key = lambda x:x[1],reverse = True)
# ID_and_GC.items()是返回获得[(键,值)]的列表。是可迭代对象
# key能够指定一个函数,来收集可迭代对象中的每个元素(例如,这里键值对列表,而后对键值对列表应用函数),从而拿应用过函数的元素作排序
print(ID_and_GC_max)
print(ID_and_GC[0])
6_Counting Point Mutations
with open('E:/rosalind_hamm.txt') as f:
a = f.read().split('\n')
a.remove('')
differ = 0
for x, y in zip(a[0], a[1]):# zip函数会把a[0]和a[1]内的每一个值都对应成(x,y)这种形式,变成一个元祖
if x != y:
differ += 1
print(differ)