好的,下面是我的问题:
这个程序从文件读取,不使用rstrip('\ n')制作一个列表,这是我故意做的。从那里,它打印列表,对其进行排序,再次打印,将新的排序列表保存到文本文件,并允许您在列表中搜索值。
我遇到的问题是:
当我搜索名称时,无论我如何键入它,它都会告诉我它不在列表中。
代码工作直到我改变了我测试变量的方式。这是搜索功能:
def searchNames(nameList):
another = 'y'
while another.lower() == 'y':
search = input("What name are you looking for? (Use 'Lastname, Firstname', including comma: ")
if search in nameList:
print("The name was found at index", nameList.index(search), "in the list.")
another = input("Check another name? Y for yes, anything else for no: ")
else:
print("The name was not found in the list.")
another = input("Check another name? Y for yes, anything else for no: ")
完整代码http://pastebin.com/PMskBtzJ
对于文本文件的内容:http://pastebin.com/dAhmnXfZ
想法?我觉得我应该注意到我已经尝试将(+'\ n')添加到搜索变量
答案 0 :(得分:3)
你说明确没有删除换行符。
因此,您的nameList
是一个字符串列表,如['van Rossum, Guido\n', 'Python, Monty\n']
。
但是您的search
是input
返回的字符串,不会有换行符。所以它不可能匹配列表中的任何字符串。
有几种方法可以解决这个问题。
首先,当然,您可以删除列表中的换行符。
或者,您可以在搜索过程中随意剥离它们:
if search in (name.rstrip() for name in nameList):
或者您甚至可以将它们添加到search
字符串中:
if search+'\n' in nameList:
如果您正在进行大量搜索,我只会进行一次剥离并保留一个剥离名称列表。
作为旁注,搜索列表以查明名称是否在列表中,然后再次搜索以查找索引,有点傻。只需搜索一次:
try:
i = nameList.index(search)
except ValueError:
print("The name was not found in the list.")
else:
print("The name was found at index", i, "in the list.")
another = input("Check another name? Y for yes, anything else for no: ")
答案 1 :(得分:0)
此错误的原因是列表中的任何输入都以“\ n”结尾。例如“john,smith \ n”。您的搜索功能比使用不包含“\ n”的输入。
答案 2 :(得分:-1)
你没有给我们太多的东西继续,但是使用sys.stdin.readline()而不是input()会有帮助吗?我不相信2.x input()会在输入的末尾留下换行符,这会使“in”运算符永远找不到匹配项。 sys.stdin.readline()确实将换行符保留在最后。
与set_中的'string'相比,list_中的'string'也很慢 - 如果你真的不需要索引,你可以使用一个集合,特别是如果你的集合很大。