Python:startswith()未按预期工作
我正在编写一个程序,加载电影的外部txt文件。这部分很好用。然后我有一个函数,搜索从文件生成的电影列表。该函数应打印出以搜索字符串开头的所有电影Python:startswith()未按预期工作,python,string,list,Python,String,List,我正在编写一个程序,加载电影的外部txt文件。这部分很好用。然后我有一个函数,搜索从文件生成的电影列表。该函数应打印出以搜索字符串开头的所有电影 def startsWithSearch(movieList): searchString = input("Enter search string: ") for movie in movieList: if(movie.startswith(searchString) == True): prin
def startsWithSearch(movieList):
searchString = input("Enter search string: ")
for movie in movieList:
if(movie.startswith(searchString) == True):
print(movie)
但是,当我输入搜索字符串时,不会打印任何电影,即使列表中有以该字符串开头的电影。如果输入数据正确,则您的功能会按预期工作:
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解决方案,正如你的函数名所说,但实际上搜索电影要方便得多,如果你在字符串中找到任何匹配项,那么如果我搜索“精神主义者”,我会找到“精神主义者”,那么你可以使用:
if searchString in movie:
print(movie)
正如Anna所建议的忽略该案例:
if searchString.lower() in movie.lower():
甚至是正则表达式的爱好者(第一行需要导入re
)
或者,如果您真的只想在名称开头匹配:
if re.match(searchString,movie,re.I):
这应该是足够的选择:)我认为可能是
input()
函数在结尾处返回了一个新行。收集输入数据后,尝试添加searchString=searchString.strip()
。
此外,在比较之前,您可能希望尝试将两者转换为小写
另外,行
if(movie.startswith(searchString)==True):
可以写成if movie.startswith(searchString):
我在读取文件时遇到了相同的问题<由于从文件中读取了换行符,代码>startswith失败。在使用startswith
函数之前,请使用rstrip()
从两个字符串中删除换行符。那么movieList
中到底是什么?如果已经进行了测试,则无需执行==True
,操作。movie.startswith()
要求在字符串开头进行精确匹配(区分大小写!)。如果没有您在movieList
中输入的内容和给出的值的详细信息,我们无法帮助您找出这些值不匹配的地方。使用repr()
或ascii()
生成有助于调试以下问题的输出:print(repr(searchString))
和print(repr(movie))
应能更清楚地显示实际匹配的字符串数量。缩进看起来已损坏,我想“print”语句应该比“if”缩进得更远。你发布了真实的代码吗?这回答了你的问题吗?您可能还需要不区分大小写的搜索;一个简单的方法是检查'if searchString.lower()in movie.lower():…'@Anna添加了您的建议,另一个regex变量input
自动剥离最后的换行符。这不是问题所在。
if re.match(searchString,movie,re.I):