Python:startswith()未按预期工作

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

我正在编写一个程序,加载电影的外部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解决方案,正如你的函数名所说,但实际上搜索电影要方便得多,如果你在字符串中找到任何匹配项,那么如果我搜索“精神主义者”,我会找到“精神主义者”,那么你可以使用:

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):