💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
所属专题:[字符串算法](README.md)   ## 问题 DNA序列的GC含量,是序列包含的'C'或'G'碱基的百分比(一般省略百分号,范围0~100)。例如,序列"AGCTATAG"的GC含量为37.5%(或写作37.5)。请注意,任何DNA序列的反向互补序列之间有着同一个GC含量。 DNA序列在归入数据库中时需要做标记。序列标记的常用方法是使用FASTA格式。在该格式中,序列信息开始于以'>'开头连接着的一行注释信息(ID);随后的若干行是序列本身。 **输入:** 遵循FASTA格式的至多10条DNA序列(每条序列最长为1 kb)。 **输出:** GC含量最高的序列ID,下一行是该序列的GC含量值。 **样例数据:** ``` >Rosalind_6404 CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC TCCCACTAATAATTCTGAGG >Rosalind_5959 CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT ATATCCATTTGTCAGCAGACACGC >Rosalind_0808 CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC TGGGAACCTGCGGGCAGTAGGTGGAAT ``` **样例输出:** ``` Rosalind_0808 60.919540 ```   ## 背景知识 该问题涉及DNA序列的GC含量计算,以及对生物信息学常用数据格式FASTA格式的认识。详情请查阅ROSALIND网站上[关于该问题的背景说明](http://rosalind.info/problems/gc/)。   ## 解答 ``` def read_fa(fa): """读入FASTA格式的文件对象fa,将其中的序列用字典结构存储""" seq = {} for line in fa: if line.startswith('>'): seqid = line.replace('>', '').split()[0] seq[seqid] = '' else: seq[seqid] += line.strip() return seq def gc_content(s): """读入DNA序列s,计算s中的GC含量""" gcc = (s.count('C')+s.count('G'))/len(s)*100 return gcc ## --main-- with open("rosalind_gc.txt", 'r') as f1: dna_seq = read_fa(f1) dna_gc = {i:gc_content(j) for i,j in dna_seq.items()} maxgc_value = max(dna_gc.values()) maxgc_id = [] for id,gcvalue in dna_gc.items(): if gcvalue==maxgc_value: maxgc_id.append(id) with open("rosalind_gc_out.txt", 'w') as f2: f2.write(','.join(maxgc_id) + "\n") f2.write(str(maxgc_value)) ```