Python:startswith()未按预期工作

2024-09-30 14:29:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序,加载一个外部txt文件的电影。这部分工作得很好。然后我有一个函数可以搜索从该文件生成的电影列表。函数应该打印出以搜索字符串开头的所有电影。在

def startsWithSearch(movieList):

    searchString = input("Enter search string: ")

    for movie in movieList:
        if(movie.startswith(searchString) == True):
        print(movie)

但是,当我输入搜索字符串时,不会打印电影,即使列表中有以该字符串开头的电影。在


Tags: 文件函数字符串程序txt列表inputsearch
2条回答

我认为可能是input()函数在末尾返回了一个新行。收集输入数据后,尝试添加searchString = searchString.strip()。 此外,在比较之前,您可能需要尝试将两者都转换为小写。在

同样,行if(movie.startswith(searchString) == True):可以写成if movie.startswith(searchString):

如果给定正确的输入数据,则函数将按预期工作:

def startsWithSearch(movieList):

    searchString = "test4"

    for movie in movieList:
        if(movie.startswith(searchString)):
            print(movie)


startsWithSearch(["test1","testnomatch","test4","test4should","not_test4"])

输出为:

^{pr2}$

所以一切都正确。。。必须是您的输入数据

我知道你想要一个StartWith解决方案,正如你的函数名所说,但实际上搜索电影,这是非常方便的,如果你在字符串中找到任何匹配,那么如果我搜索“mentalist”,我会找到“the 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):

这就足够了:)

相关问题 更多 >