題目連結:https://rosalind.info/problems/dna/
給一段ATCG序列,分別計算出A、C、G、T各別出現幾次
去氧核糖核酸(DNA) 有四種不同的鹼基(Bases),分別是:
所以從頭到尾數一遍,使用一個dict()
來紀錄出現次數。
最後,因為題目要求的順序依次是A C G T按照字母排序
輸入:
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC
輸出:
20 12 17 21
這是我個人第一次寫生物相關題目
所以一開始,習慣採國高中熟悉的ATCG
順序來命名(在生物課本裡常見「AT、GC 配對」),
但題目要求以ACGT
,所以在印出之前使用sorted()
來排序字母
s = "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC"
counts = {'A': 0, 'T': 0, 'C': 0, 'G': 0}
for i in range(len(s)):
match s[i]:
case 'A':
counts['A'] += 1
case 'T':
counts['T'] += 1
case 'C':
counts['C'] += 1
case 'G':
counts['G'] += 1
for key in sorted(counts):
print(counts[key], end=' ') # 沒去掉最後一個空白字符
# print(" ".join(str(counts[key]) for key in sorted(counts))) # 去掉最後一個空白字符
後來發現主流風格是按字母ACGT
順序
FASTA格式、GenBank等生物資訊數據庫通常都按照 ACGT 排序
符合字母由小到大排序,按照字典序(lexicographic order)排列
s = "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC"
counts = {'A': 0, 'C': 0, 'G': 0, 'T': 0}
for i in range(len(s)):
match s[i]:
case 'A':
counts['A'] += 1
case 'C':
counts['C'] += 1
case 'G':
counts['G'] += 1
case 'T':
counts['T'] += 1
print(" ".join(str(counts[key]) for key in counts)) # 去掉最後一個空白字符
# print(counts['A'], counts['C'], counts['G'], counts['T'])