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)