我正在编写一个加载电影的外部txt文件的程序。这部分工作正常。然后我有一个功能,搜索从文件生成的电影列表。该函数应打印出以搜索字符串开头的所有电影。
def startsWithSearch(movieList):
searchString = input("Enter search string: ")
for movie in movieList:
if(movie.startswith(searchString) == True):
print(movie)
但是,当我输入搜索字符串时,即使列表中的电影以该字符串开头,也不会打印电影。
答案 0 :(得分:1)
如果给出正确的输入数据,您的功能可以按预期工作:
def startsWithSearch(movieList):
searchString = "test4"
for movie in movieList:
if(movie.startswith(searchString)):
print(movie)
startsWithSearch(["test1","testnomatch","test4","test4should","not_test4"])
输出是:
test4
test4should
所以所有正确的...必须是您的输入数据
我知道你想要一个StartsWith解决方案,正如你的功能名称所说,但实际上搜索电影,它更方便,如果你在字符串中找到任何匹配,所以如果我搜索“mentalist”我会找到“心理学家“,那么你可以使用:
if searchString in movie:
print(movie)
正如安娜所建议的那样忽视案例:
if searchString.lower() in movie.lower():
甚至是有正则表达式的爱好者(在第一行需要import re
):
if re.match(".*" + searchString,movie,re.I):
或者如果你真的只想在名字的开头匹配:
if re.match(searchString,movie,re.I):
应该是足够的替代品:))
答案 1 :(得分:0)
我认为input()
函数可能会在最后返回一个新行。收集输入数据后尝试添加searchString = searchString.strip()
。
您也可以尝试在比较之前将两者都转换为小写。
此外,if(movie.startswith(searchString) == True):
行也可以写成if movie.startswith(searchString):
答案 2 :(得分:0)
当我从文件中读取时,我遇到了同样的问题。 startswith
由于从文件中读取换行符而失败。在使用rstrip()
函数之前,请先使用startswith
从两个字符串中删除换行符。