以下是有问题的代码:
def search():
name = enter.get()
print(name)
name = name.lower()
data = open("moredata.txt")
found = False
results = str()
for line in data:
record = line.split("|")
record[0] = str(record[0])
print("'" + name + "'" "---" + "'" + record[0] + "'")
if record[0] == name:
found = True
line = str(line)
results += line
results = str(results).lstrip(' ')
continue
else:
found = False
continue
if not found:
print("No results found")
else:
print("These items match your search query:\n")
print(results)
# print(results)
print('\n---------------------------------\n')
在我正在使用的文本文件中,信息由' |'分隔。并且函数将每个片段拆分成一个数组(我想?)并将第一个值与我在搜索栏中放置的值进行比较。
我使用了具有相同精确功能的其他文本文件,它工作正常:它验证两个字符串是否相等然后显示对应于我想要的文本文件的整行。但是,当我搜索" a"它应该注册为等于" a"从我的文本文件中的a | a | a | a | a | a行,它没有。我知道如果我不能弄清楚并继续前进,因为它在某些情况下有效,我会想要咬我。
该行
print("'" + name + "'" "---" + "'" + record[0] + "'")
结果
'a'---'a'
'a'---'a'
'a'---'b'
与行
比较a|a|a|a|a|a
a|a|a|a|a|a
b|b|b|b|b|b
结果之间没有空行,两个变量类型都是str()。
答案 0 :(得分:1)
循环中if语句中的continue
是造成问题的原因,因为它应该是break
。
你的程序正在找到它,但它会被最后一次迭代覆盖。一旦你的程序找到了,你应该永远不要将found
设置为假,或者最好完全停止迭代。
我会打赌你已经测试过的所有其他文件都是你正在寻找的名字,而且这个文件引起了问题,因为你所寻找的名字并不是结束。
此外,虽然技术上不是问题,但for循环中else下的其他continue
是不必要的。
答案 1 :(得分:1)
在循环的每次迭代中都会覆盖您的found
变量。
因此,如果 last 结果匹配,则只有True
。
您根本不需要found
变量。如果有结果,您的results
变量中会包含数据,您可以对其进行测试。