import sys
def main():
global dna
dna = {}
chromo = []
position = []
parseFile(sys.argv[1], dna, chromo, position)
def parseFile(raw_file, dna, chromo, position):
raw_filename = raw_file
raw_file = open(raw_filename, 'r')
raw_lines = raw_file.readlines()
raw_file.close()
for line in raw_lines:
dna_info = line.split('\t') # splitting by tab
dna_info[-1] = dna_info[-1][:-1] # getting rid of new line
rsid = dna_info[0]
genotype = dna_info[3]
dna[rsid] = dna_info[3]
checkType2Diabetes(dna_info, rsid, genotype)
**def checkType2Diabetes(dna_info, rsid, genotype):
for item in rsid:
if "rs7754840" in rsid:
print ("Key Found")
break
else:
print("No Key Found")**
包含整个代码,def checkType2Diabetes(等等)中的问题 我希望代码只打印一次,但对于它检查的每个密钥,如果找不到密钥则打印。其中,当我运行一个充满rsid #s的文件时,输出为:
No Key Found
No Key Found
No Key Found
No Key Found
(继续txt中的所有行)
但如果找不到,我想要的只是
No Key Found
答案 0 :(得分:0)
我们需要清楚地描述数据和功能。我认为你的问题是滥用for迭代,但我无法确定。
看起来rsid是每条记录的一个字段,包含一个ID字符串。但是,你的最后一个for循环假定它是要分开的东西。例如,如果rsid的输入行的值为“rs7754840”,则for循环遍历各个字符:'r','s','7','7'等。
在这种情况下,循环底部需要的是这样的模式:
rsid = dna_info[0]
genotype = dna_info[3]
dna[rsid] = dna_info[3]
if "rs7754840" in rsid:
print ("Key Found")
break
else:
print("No Key Found")
请注意一点:其他位于 for 循环,而不是 if 。你遇到的逻辑问题是,如果ID在某个地方的记录中,你就会在找到它时立即知道。如果不是,你就不知道,直到你退出循环。你试图一次性完成所有这一切,这就是为什么你反复打印“找不到钥匙”的原因。
这会让你感动吗?