CS50 Python DNA作业:如何对比str_test与data字典列表匹配人员
匹配逻辑解决方案
核心逻辑为逐个校验数据库中每条记录的所有STR位点是否和待测样本完全一致,具体修改方式如下:
将你原代码末尾有问题的匹配逻辑段,替换为以下代码即可:
# 匹配逻辑实现 matched = "No match" # 遍历每一条人员记录 for person in data: all_match = True # 遍历所有STR位点做校验 for str_name, count in str_test.items(): # 数据库存储的数值为字符串,需转整数后再比对 if int(person[str_name]) != count: all_match = False # 只要有一个位点不匹配,直接终止当前人员的校验 break if all_match: matched = person["name"] # 找到匹配人员直接终止遍历 break print(matched)
逻辑说明
- 不需要嵌套三层循环,仅需两层循环:外层遍历人员列表,内层遍历STR位点列表即可
- 数据库读取的STR数值为字符串类型,必须转换为整数后和
str_test的数值做比对,否则会因类型不一致导致匹配失败 - 一旦发现某位点不匹配可直接终止当前人员的其余位点校验,提升运行效率
内容的提问来源于stack exchange,提问作者Gidgey
相关产品推荐
相关产品推荐

