为啥python说一个字符串与另一个字符串不匹配[重复]
Posted
技术标签:
【中文标题】为啥python说一个字符串与另一个字符串不匹配[重复]【英文标题】:Why is python saying that a string doesn't match the other when it does [duplicate]为什么python说一个字符串与另一个字符串不匹配[重复] 【发布时间】:2020-03-21 01:44:16 【问题描述】:所以我有一个名为 words.txt
的文本文件,它包含 3 个单词:
apple
ship
door
而我要做的是让用户输入一个单词,然后搜索文件以查看是否有这样的单词,如果没有则添加:
def search(word):
file = open("words.txt", "r+")
for line in file:
if line == word:
return False
file.write(word + "\n")
return True
然后我使用该函数检查并打印结果,但问题是当我输入单词 ship 或列表中的任何其他单词时,它应该说它不存在是的。
【问题讨论】:
正如其中一个答案所说,您未能定义预期的返回值是什么。如所写,在匹配的情况下返回 False,在不匹配的情况下返回 True(但文件已更新)。这似乎不是您所期望的。首先编写一个描述结果的文档字符串,然后您可以检查代码是否实现了这些结果(最好通过编写测试用例:)) 这可能是错误的两种方式:1)它无法返回False
,因为您正在比较"ship"
和"ship\n"
,而不是"ship"
和"ship"
,或者2 ) 当"ship"
与"ship"
进行比较时,它无法返回True
。需要明确的是,绝对您不承认line
将以换行符结尾是一个问题,但您也可能交换了返回值。
【参考方案1】:
你可能需要做 line=line[0:-1] 您拥有的 line 变量也有尾随的换行符 '\n'。
【讨论】:
解决这个问题的方法是使用line.strip()
,而不是扔掉最后一个字符。
@JanChristophTerasa line.strip()
会丢弃所有尾随和前导空格。 line.rstrip('\n')
将是删除 just 单个换行符的更惯用方式。由于根据定义,最后一个字符是换行符,因此切片仍然有效。
确实如此,但在给出的示例代码中应该是等价的。
您的建议充其量相当于这个答案。一般来说,客观上是更糟。
我明白你的意思。但我仍然认为使用索引删除空格是不好的做法,并且一般而言这比使用strip
或rstrip
更糟糕,因为您必须在代码中添加条件.对于这个问题,这无关紧要(因为使用strip
或rstrip('\n')
无关紧要)。【参考方案2】:
迭代文本文件时,行终止符\n
保留在循环索引中。您需要在比较之前将其删除:
def search(word):
file = open("words.txt", "r+")
for line in file:
if line.rstrip('\n') == word:
return False
file.write(word + "\n")
return True
如果文件中的任何前导和尾随空格不重要,您可以将line.rstrip('\n')
简化为line.strip()
。
>>> " foo \n".rstrip('\n')
" foo "
>>> " foo \n".strip()
"foo"
【讨论】:
line.rstrip('\n')
显然是唯一正确的答案,as we have discussed。包括strip()
解决方案似乎毫无意义。以上是关于为啥python说一个字符串与另一个字符串不匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章
当字符串周围的引号不匹配时,为啥 Python 不给出任何错误?
为啥 re.sub() 在 Python 中默认添加不匹配的字符串?
Bash - 获取命令(字符串)的值并查看它是不是与另一个字符串匹配