![](/img/trans.png)
[英]Python 3.5 - Startswith() in if statement not working as intended
[英]Python: startswith() not working as intended
我正在编写一个加载外部 txt 电影文件的程序。 这部分工作正常。 然后我有一个函数来搜索从文件生成的电影列表。 该函数应该打印出所有以搜索字符串开头的电影。
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 解决方案,正如你的函数名称所说,但实际上搜索电影,它更方便,如果你在字符串中找到任何匹配项,所以如果我搜索“mentalist”,我会找到“the mindist” ,那么你可以使用:
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):
那应该是足够的替代品:)
我认为可能是input()
函数在末尾返回了一个新行。 收集输入数据后尝试添加searchString = searchString.strip()
。 此外,您可能想在比较之前尝试将两者都转换为小写。
此外, if(movie.startswith(searchString) == True):
也可以像if movie.startswith(searchString):
那样写if movie.startswith(searchString):
当我从文件中读取时,我遇到了同样的问题。 由于从文件中读取换行符, startswith
失败。 在使用startswith
函数之前,使用rstrip()
从两个字符串中删除换行符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.