You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CS50 Week6 DNA序列识别程序测试失败,请求错误分析

DNA匹配代码错误详细分析

核心错误:变量名混淆导致逻辑混乱

你在代码里重复使用相似变量名,直接让匹配逻辑完全跑偏:

  • 先定义了存储所有DNA子序列的列表:subsequence = list(database[0].keys())[1:]
  • 遍历子序列时用了for subsequences in subsequence:,这里subsequences变成了单个子序列字符串(比如AGATC)
  • 到匹配用户的循环里,你写了for subsequence in subsequences:,此时subsequences是单个字符串,循环会遍历这个字符串的每个字符,而非遍历所有需要匹配的子序列列表
  • 同时判断条件里的person[subsequences]和result[subsequences],都是在拿单个子序列对应的值,根本没逐个检查所有子序列

匹配逻辑的顺序错误

就算变量名没搞错,你的判断时机也有问题:

  • 每次检查一个子序列后就立刻判断match == len(subsequences),这会导致只要第一个子序列匹配,就直接返回当前用户,完全不验证其他子序列是否匹配
  • 比如sequences/3.txt本应输出No match,但因为Bob的第一个子序列和计算结果匹配,就直接输出Bob了,根本没验证其他子序列

次要错误:命令提示拼写错误

print("Usage: python dna,py data.csv sequence.txt")里的逗号应该是点,正确写法是dna.py

修正后的核心代码片段

理清变量名,调整匹配判断的位置:

# 重命名变量避免混淆,存储所有待匹配的子序列
subseqs = list(database[0].keys())[1:]

result = {}
for subseq in subseqs:
    result[subseq] = longest_match(dna_sequence, subseq)

for person in database:
    match = 0
    # 遍历所有子序列逐个验证
    for subseq in subseqs:
        if int(person[subseq]) == result[subseq]:
            match += 1
    # 所有子序列都匹配后再输出结果
    if match == len(subseqs):
        print(person["name"])
        return

print("No Match")

内容的提问来源于stack exchange,提问作者user25122503

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:37:24