Python:startswith()不按预期工作
我在写一个加载电影的外部txt文件的程序。这部分工作正常。然后我有一个功能,可以搜索从文件生成的电影列表。该功能应打印出以搜索字符串开头的所有电影。Python:startswith()不按预期工作
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)
而安娜的建议忽略大小写:
if searchString.lower() in movie.lower():
甚至用正则表达式票友(需要import re
在第一行):
if re.match(".*" + searchString,movie,re.I):
,或者如果你真的只是想匹配名字的开头:
if re.match(searchString,movie,re.I):
,应该是足够的选择:)
您可能还需要不区分大小写的搜索;一个简单的方法就是检查'movie.lower()中的searchString.lower():''' – Gretchen 2015-04-03 22:30:36
@Anna增加了你的建议,另一个正则表达式变体 – 2015-04-03 22:46:43
我认为这可能是该input()
功能,并在最后一个新行返回。收集输入数据后尝试添加searchString = searchString.strip()
。 也可以在比较之前尝试将两者都转换为小写。
还行if(movie.startswith(searchString) == True):
正好可以写为if movie.startswith(searchString):
'input'自己去掉最后的换行符。这不是问题。 – 2015-04-03 23:19:10
那么,什么是'正是movieList'?你不需要做'== True','if'*已经*测试了。 – 2015-04-03 21:05:57
'movie.startswith()'需要在字符串开始时进行精确(区分大小写!)匹配。没有关于你输入什么的细节以及你在'movieList'中给出了什么值,我们无法帮助你找出值不匹配的地方。使用'repr()'或'ascii()'产生的输出可以帮助你调试像这样的问题:'print(repr(searchString))'和'print(repr(movie))'应该使它更加可见多少字符串确实匹配。 – 2015-04-03 21:08:19
缩进看起来破损,我想'print'语句应该比'if'缩进得更远。你发布了实际的代码吗? – 2015-04-03 21:18:31