题解 | DNA序列
DNA序列
https://www.nowcoder.com/practice/e8480ed7501640709354db1cc4ffd42a
import sys
def select_dna(sequence, length):
dna = sequence.strip()
if len(dna) < length:
return ""
cg_max = -1
sub_dna_max = ""
for i in range(len(dna) - length + 1):
sub_dna = dna[i:i + length]
cg_count = sub_dna.count("G") + sub_dna.count('C')
if cg_count > cg_max:
cg_max = cg_count
sub_dna_max = sub_dna
return sub_dna_max
if __name__ == "__main__":
# 从标准输入读取
lines = sys.stdin.read().strip().split('\n')
if len(lines) >= 2:
input_seq = lines[0]
num = int(lines[1])
result = select_dna(input_seq, num)
print(result)
我是纯新手~
整个解题思路是这样:
- 分析问题:需要有输入的dna序列sequence以及需要确定的子序列长度length
- 定义一个函数,接收这两个输入def select_dna(sequence, length):
- 先判断输入序列的总的长度,确定未来子序列的取值范围
- dna = sequence.strip()
- if len(dna) < length:
- 直接结束程序:return ''
- 合理就进入下一步
- 定义一个cg含量cg_max = -1; 一个字序列sub_dna_max = ""
- 之后开始滑动遍历,寻找最大值:
- for i in range(len(dna)-length+1): #滑动窗口问题一定记得最后窗口是要➕1的,因为range函数雇头不顾尾。
- sub_dna = dna[i:i+length]
- cg_count = sub_dna.count('g')+sub_dna.count('c')
- if cg_count > cg_max:
- cg_max = cg_count
- sub_dna_max = sub_dna
- return sub_dna_max #但是这种写法有点问题,最好是函数都返回出来,不要留着
- 这里重点是main函数的书写:
- if __name__ == "__main__":
- result = select_dna(seqence, length)
但是这里有个命令行的运行问题
题目要求命令行来运行,所以要用到sys模块
- 用到sys.stdin.read()读取数据流,随后sys.stdin.read().scrip()去除首尾,随后sys.stdin.read().scrip().split('\n')#\\\\\lines = sys.stdin.read().strip().split('\n')
- 现在得到的就是一个列表list,按行分别
- 随后读取,sequence = lines[0]; num = int(lins[1])
查看17道真题和解析