我正在尝试学习python并在这里进行了一些研究,但无法将这些信息放在一起......我的导师给了我一个额外的任务,在搜索了在线部分代码后我发现很难完成。 ..实际上我在过去两周学习python。
我有一个名为
的文件dna.txt
以下数据已存储
ACAAGATGCCATTGTCCCCCGGCCTCCTGCTGCTGCTGCTCTCCGGGGCCACGGCCACCGCTGCCCTGCCCCTGGAGGGTGGCCCCACCGGCCGAGACAGCGAGCATATGCAGGAAGCGGCAGGAATAAGGAAAAGCAGCCTCCTGACTTTCCTCGCTTGGTGGTTTGAGTGGACCTCCCAGGCCAGTGCCGGGCCCCTCATAGGAGAGGAAGCTCGGGAGGTGGCCAGGCGGCAGGAAGGCGCACCCCCCCAGCAATCCGCGCGCCGGGACAGAATGCCCTGCAGGAACTTCTTCTGGAAGACCTTCTCCTCCTGCAAATAAAACCTCACCCATGAATGCTCACGCAAGTTTAATTACAGACCTGAA
我有三个男性的细节,如眼睛颜色,头发颜色等...我应该有一个程序运行,将检查存储在txt文件中的数据读取它,并将它与信息进行比较在男性和打印出谁是匹配...
我能够把它放在一起的是:
evidence = open("dna.txt", "r").read()
john= {
"gender": "TGCAGGAACTTC",
"race": "AAAACCTCA",
"color_hair": "TTAGCTATCGC",
"color_eyes": "AAGTAGTGAC",
"type_face": "ACCACAA"
}
matthew = {
"gender": "TGCAGGAACTTC",
"race": "AAAACCTCA",
"color_hair": "CCAGCAATCGC",
"color_eyes": "TTGTGGTGGC",
"type_face": "AGGCCTCA"
}
edward = {
"gender": "TGCAGGAACTTC",
"race": "AAAACCTCA",
"color_hair": "GCCAGTGCCG",
"color_eyes": "GGGAGGTGGC",
"type_face": "GCCACGG"
}
现在我被困在了下一个,
在我之前的“更容易”的任务中没有使用dicts我继续if, and, elif
等...但不确定在这种情况下是否会使用相同的...
我用
做了一些尝试if evidence.find('John') > -1 :
print "john is the thief!"
elif evidence.find('Matthew') > -1 :
print "matthew is the thief!"
elif evidence.find('Edward') > -1 :
print "edward is the thief!"
但不确定这是否正确,尽管代码正在运行但实际上并未打印出该名称。 我以前没有使用python的经验...我可能会完全错过这个解决方案,特别是因为我得到了使用“数组和字典”字典的说明“ - 如果我做对了
感谢大家帮助我...
答案 0 :(得分:0)
在调用evidence.find('Edward')
时,您正在传递一个字符串,因此它正在evidence
中搜索该字符串,而不是。{/ p>
您想在字符串中搜索每个字典的每个元素。这可以通过python的优秀iteritems()
:
matching_fields = 0
for key, value in edward:
if value in example:
matching_fields += 1
这将计算example
字符串中任意位置存在的值的数量。你可以为每个嫌疑人重复这个过程,那个匹配最多的那个应该是你的答案!
免责声明:我不知道DNA是如何工作的,如果gender
和color_hair
等需要在某个地方,你可以使用切片:
matching_fields = 0
for key, value in edward:
if value == example[expected_location:length]:
matching_fields += 1
编辑:这样的事情应该很接近:
evidence = open("dna.txt", "r").read()
john= {
"gender": "TGCAGGAACTTC",
"race": "AAAACCTCA",
"color_hair": "TTAGCTATCGC",
"color_eyes": "AAGTAGTGAC",
"type_face": "ACCACAA"
}
matthew = {
"gender": "TGCAGGAACTTC",
"race": "AAAACCTCA",
"color_hair": "CCAGCAATCGC",
"color_eyes": "TTGTGGTGGC",
"type_face": "AGGCCTCA"
}
edward = {
"gender": "TGCAGGAACTTC",
"race": "AAAACCTCA",
"color_hair": "GCCAGTGCCG",
"color_eyes": "GGGAGGTGGC",
"type_face": "GCCACGG"
}
suspects = [john, matthew, edward]
best_guess = None
highest_similarity = 0
for suspect in suspects: # iterate through potential suspects
matches = 0
for key, value in suspect.iteritems(): # iterate through current suspects attributes
if value in evidence:
matches += 1
if matches > highest_similarity:
highest_similarity = matches
best_guess = suspect
for key, val in list(locals().iteritems()):
if val is best_guess: # NOTE: 'is' for checking identity
suspect_name = key
print suspect_name, " is the culprit!"
在第一个for
循环后,best_guess
是与example
最匹配的字典。有关如何获取可疑字典的名称,请参阅this answer。