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

CS50 DNA匹配问题:字典用==比较为何无匹配结果?

问题原因与解决方法

你的代码返回“No Match”的核心问题是数据类型不匹配:

  • 从CSV文件读取的数据库中,STR对应的次数是字符串类型(比如"AGATC": "5")
  • 而longest_match函数返回的是整数类型,你直接存入了match字典(比如"AGATC": 5)

字典用==比较时,会严格检查每个键对应的值的类型和内容,类型不同即使数值一样也会判定不相等,所以你的匹配逻辑永远不会触发。

解决办法(二选一即可)

方法1:读取数据库时转换类型

在处理copy_database的时候,把每个STR的值转换成整数:

for i in range(len(copy_database)):
    del copy_database[i]["name"]
    # 新增:把所有STR值转成整数
    for k in copy_database[i]:
        copy_database[i][k] = int(copy_database[i][k])

方法2:存储match时转成字符串

在给match字典赋值时,把整数转成字符串:

match[remove_dup[i]] = str(longest_match(sequence, remove_dup[i]))

额外优化建议

你获取STR列表的方式有点绕,可以直接用csv.DictReader的fieldnames属性来提取,不需要去重(因为数据库里的列是固定的):

# 替换原来的key和remove_dup相关代码
reader = csv.DictReader(d)
str_list = [field for field in reader.fieldnames if field != "name"]

这样更简洁,也不会因为set打乱顺序(虽然顺序不影响字典比较,但可读性更好)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:44:57