繁体   English   中英

Python:startswith() 未按预期工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM