逻辑表达式:为什么 "str1 in str2 or str2 not in str1" return 对我的打印语句为真?
Logical Expressions: Why does "str1 in str2 or str2 not in str1" return True for my print statement?
首先,对于愚蠢的问题或我 post 中的任何错误,我深表歉意! (这是我的第一个post!)
其次,我试图在 Stack Overflow 和 RealPython 网站(逻辑表达式)上查找这个问题的答案,但我似乎仍然无法理解为什么这一段代码 returns 最后一个(未注释的)函数调用的“真”?
我正在尝试回答电子书“使用 Python 计算和编程简介”中的以下问题 -
"写一个函数 isIn,它接受两个字符串作为参数,returns 如果其中一个字符串出现在另一个字符串的任何地方则为 True,否则为 False。提示:你可能想在中使用内置的 str 操作."
如果有人能解释(通俗易懂)为什么下面的代码将“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
您的 If 语句正在检查 2 个条件:
string1 in string2:这是错误的,因为 string1 是 'hello world' 并且它不存在于 string2 中。如果 string1 将是 'hello' 或 'world' 或 'world hello' 或 ' ' 它将 return True 因为所有这些都存在于 string2.
string2 不在 string1 中:它将检查 string1 中是否不存在 string2 您的函数是 returning True 因为这种情况,'world hello' 不存在于 string1 中
添加到@NoobCoder 的答案中,由于第二个条件,您的程序 return 为真:
"or string2 not in string1" which is returning TRUE, as the second string IS NOT in first string.
然后,根据您的条件:Cond1 OR Cond2,如果其中任何一项 return 为真,则您的最终答案将为真。
为什么你的函数 returns 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
,因为 'world hello' 实际上不存在于 'hello world'
中
第 2 部分,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' 中有什么?
- 'world'、'hello'、' ' (space) 和 ''(空字符串)。
- 以及所有可能的子串(源中的字符和连续字符
字符串,例如 '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.
在计算机科学中,字符串是字符序列。
每个子序列都是一个子串。
所以现在,你应该对什么是字符串,什么是子字符串有了更好的理解,如果你有兴趣,你could/should可以在互联网上搜索一些信息。
那么,in
表达式是什么?
in
表达式,实际上,在处理字符串时,会告诉您您在另一个字符串中搜索的字符串的字符是否是此 [=70] 的 substring =]string or not.
总之,字符序列 'hello world' 不在字符序列 'world hello' 中。
嘿 :D 我认为您可以使用 for 循环来检查 string1 是否包含 string2 中的单词 不知道如何在此处放置 python 代码,因为我也是新手 :\
但整件事就像
对于 b(字符串、列表等)中的 a(变量):
for c in d:
然后编码剩下的
首先,对于愚蠢的问题或我 post 中的任何错误,我深表歉意! (这是我的第一个post!)
其次,我试图在 Stack Overflow 和 RealPython 网站(逻辑表达式)上查找这个问题的答案,但我似乎仍然无法理解为什么这一段代码 returns 最后一个(未注释的)函数调用的“真”?
我正在尝试回答电子书“使用 Python 计算和编程简介”中的以下问题 -
"写一个函数 isIn,它接受两个字符串作为参数,returns 如果其中一个字符串出现在另一个字符串的任何地方则为 True,否则为 False。提示:你可能想在中使用内置的 str 操作."
如果有人能解释(通俗易懂)为什么下面的代码将“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
您的 If 语句正在检查 2 个条件:
string1 in string2:这是错误的,因为 string1 是 'hello world' 并且它不存在于 string2 中。如果 string1 将是 'hello' 或 'world' 或 'world hello' 或 ' ' 它将 return True 因为所有这些都存在于 string2.
string2 不在 string1 中:它将检查 string1 中是否不存在 string2 您的函数是 returning True 因为这种情况,'world hello' 不存在于 string1 中
添加到@NoobCoder 的答案中,由于第二个条件,您的程序 return 为真:
"or string2 not in string1" which is returning TRUE, as the second string IS NOT in first string.
然后,根据您的条件:Cond1 OR Cond2,如果其中任何一项 return 为真,则您的最终答案将为真。
为什么你的函数 returns 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
,因为 'world hello' 实际上不存在于 'hello world'第 2 部分,
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' 中有什么?
- 'world'、'hello'、' ' (space) 和 ''(空字符串)。
- 以及所有可能的子串(源中的字符和连续字符 字符串,例如 '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.
在计算机科学中,字符串是字符序列。 每个子序列都是一个子串。
所以现在,你应该对什么是字符串,什么是子字符串有了更好的理解,如果你有兴趣,你could/should可以在互联网上搜索一些信息。
那么,in
表达式是什么?
in
表达式,实际上,在处理字符串时,会告诉您您在另一个字符串中搜索的字符串的字符是否是此 [=70] 的 substring =]string or not.
总之,字符序列 'hello world' 不在字符序列 'world hello' 中。
嘿 :D 我认为您可以使用 for 循环来检查 string1 是否包含 string2 中的单词 不知道如何在此处放置 python 代码,因为我也是新手 :\
但整件事就像
对于 b(字符串、列表等)中的 a(变量):
for c in d:
然后编码剩下的