逻辑表达式:为啥“str1 in str2 or str2 not in str1”为我的打印语句返回 True?
Posted
技术标签:
【中文标题】逻辑表达式:为啥“str1 in str2 or str2 not in str1”为我的打印语句返回 True?【英文标题】:Logical Expressions: Why does "str1 in str2 or str2 not in str1" return True for my print statement?逻辑表达式:为什么“str1 in str2 or str2 not in str1”为我的打印语句返回 True? 【发布时间】:2021-02-04 13:12:28 【问题描述】:首先,对于我的帖子中的愚蠢问题或任何错误,我深表歉意! (这是我的第一篇文章!)
其次,我试图在 Stack Overflow 和 RealPython 网站(逻辑表达式)上查找此问题的答案,但我似乎仍然无法理解为什么这段代码返回“True”最后一个(未注释的)函数调用?
我正在尝试回答电子书“使用 Python 进行计算和编程简介”中的以下问题 -
“编写一个函数 isIn,它接受两个字符串作为参数,如果其中一个字符串出现在另一个字符串中,则返回 True,否则返回 False。提示:您可能希望使用内置的 str 操作 in。”
如果有人能解释(用外行的话)为什么下面的代码将“True”返回到最后一个函数调用,我将非常感激 - 再次为这个愚蠢的问题道歉!
def isIn(string1, string2):
"""Input two strings
Returns 'True' if either strings are within each other
"""
if string1 in string2 or string2 not in string1:
return True
else:
return False
# isIn('hello', 'hello') # Prints True
# isIn('hello', 'hello world') # Prints True
isIn('hello world', 'world hello') # Prints True
【问题讨论】:
它返回True
,因为string2
不是in string1
。你的意思是string1 in string2 or string2 in string1
,没有not
?
感谢您的回复。我想包括“不在”表达,以尝试回答电子书中的问题,但我认为我做的不正确 - 道歉!
【参考方案1】:
为什么你的函数返回True
?
if语句if string1 in string2 or string2 not in string1
由3部分组成:
string1 in string2
or
string2 not in string1
你有:
string1 = 'hello world'
string2 = 'world hello'
第 1 部分 (string1 in string2
):
它的计算结果为 False,因为 'hello world' 不在 'world hello' 中
第 3 部分 (string2 not in string1
):
计算结果为True
,因为“hello world”中实际上不存在“world hello”
第二部分,or
:
or
会给你:
True
如果至少有一个表达式计算为 True
False
如果所有表达式的计算结果为 False
所以你得到True
但如果你使用过and
,你会得到False
如果有时您有疑问,请尝试以下打印:
# or:
print(True or True) # True
print(True or False) # True
print(False or False) # False
# and:
print(True and True) # True
print(True and False) # False
print(False and False) # false
回答您的评论:
不,“hello world”不在“world hello”中 那么,“世界你好”是什么?
'world'、'hello'、''(空格)和''(空字符串)。 以及所有可能的子字符串(源中的字符和连续字符 字符串,例如'h'、'he'、'hel'、'wo'等)。请注意,实际上所有项目 'world'、'hello'、'' 和 '' 都是 :-)所以,所有这些都为真:
# string2 = 'world hello'
'world' in string2
'hello' in string2
' ' in string2
'' in string2
'h' in string2
'e' in string2
'llo' in string2
'llo 'wo' in string2
# etc.
在计算机科学中,字符串是一系列字符。 每个子序列都是一个子字符串。
所以现在,您应该对什么是字符串和什么是子字符串有了更好的理解,如果您有兴趣,可以/应该在互联网上搜索一些信息。
那么,in
表达式是什么?
in
表达式,实际上,在处理字符串时,会告诉您您在另一个字符串中搜索的字符串的字符是否是这个 string 的 substring与否。
总之,字符序列“hello world”不在字符序列“world hello”中。
【讨论】:
这是一个非常彻底的解释 - 谢谢你这样分解它!我想更好地理解这部分答案:“第 1 部分(字符串 2 中的字符串 1):它的计算结果为 False,因为 'hello world' 不在 'world hello' 中” - 请原谅我在这里听起来很愚蠢,但字符串' hello world' 和 'world hello' 在我看来是一样的,除了它们是相反的,对吧?我会认为“in”运算符检测到这种反转?再次为我的不理解道歉! 不客气!我将在答案的末尾添加一个示例。 感谢您更新答案并添加示例!我已经修改了我的代码以包含一个“for”循环和“if”语句,即使单词被切换,它似乎也可以工作......我很可能需要对此进行更多实验 - 谢谢你的帮助! 【参考方案2】:您的 If 语句正在检查 2 个条件:
string1 in string2 :这是 False 因为 string1 是 'hello world' 并且它不存在于 string2 中。如果 string1 是 'hello' 或 'world' 或 'world hello' 或 ' ',它将返回 True,因为所有这些都存在于 string2 中。
string2 not in string1 :它将检查 string1 中是否不存在 string2 您的函数由于这种情况而返回 True,字符串 1 中不存在“world hello”
【讨论】:
【参考方案3】:除了@NoobCoder 的答案之外,由于第二个条件,您的程序正在返回 true:
"or string2 not in string1" 返回 TRUE,因为第二个字符串不在第一个字符串中。
那么,根据您的条件:Cond1 OR Cond2,如果其中任何一个返回 TRUE,那么您的最终答案将为 TRUE。
【讨论】:
【参考方案4】:嘿 :D 我认为您可以使用 for 循环来检查 string1 是否包含 string2 中的单词 Idk 如何在此处放置 python 代码,因为我也是新手:\
但整个事情就像
对于 b(字符串、列表等)中的 a(变量):
for c in d:
然后编码其余部分
【讨论】:
for a in d
迭代可迭代的 d。我认为它并不能真正帮助检查 a 是否包含在 d 中。相反,它只是为 d 的每个元素运行循环体。以上是关于逻辑表达式:为啥“str1 in str2 or str2 not in str1”为我的打印语句返回 True?的主要内容,如果未能解决你的问题,请参考以下文章