逐行分解:def accountReader():
while True:
chargeInput = (raw_input ("Enter a charge account to be validated: "))
if chargeInput == '':
break
sys.exit
好吧,到目前为止还不错。您已经创建了一个循环,该循环反复请求用户输入,当用户什么都不输入时会中断。在
^{pr2}$
这就是你开始遇到问题的地方。readline从chargeAccount读取一行并将其存储在line中。这意味着你只能测试一行!在while line != '':
if chargeInput == line:
print chargeInput, 'was found in list.'
这进一步加剧了你的问题。如果chargeInput == line,那么这将打印一条消息,然后循环重复。由于循环中没有什么可以中断的,这将导致一个无限循环,不断测试文件中的一行。另外,由于文件中的每一行都以新行(\n)结尾,chargeInput == line将始终生成false(感谢Steven Rumbalski提醒我这一点)。使用.strip()(如matchw的答案中所建议的),或者,如果您可以容忍部分匹配,那么可以使用Python的简单子字符串匹配功能:if chargeInput in line。在else:
print chargeInput, 'not found in list.'
break
chargeFile.close
在这里,正如sarnold所指出的,您错误地命名了您的文件;而且,它位于完全不同的代码块中,这意味着您反复打开chargeAccount文件,而没有关闭任何文件。在
正如你从matchw的帖子中看到的,有一种更简单的方法来做你想做的事情。但我认为你最好能找出如何用你选择的风格正确地编写这段代码。我给你一个提示:在最里面的while循环中应该有一个line = chargeAccount.readline()。你知道为什么吗?另外,当您成功找到匹配项时,您可能应该退出循环,而不是失败时。然后,您应该考虑一种方法,在最里面的循环完成后测试搜索是否成功。在