逻辑表达式:为什么 "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 个条件:

  1. string1 in string2:这是错误的,因为 string1 是 'hello world' 并且它不存在于 string2 中。如果 string1 将是 'hello' 或 'world' 或 'world hello' 或 ' ' 它将 return True 因为所有这些都存在于 string2.

  2. 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 部分组成:

  1. string1 in string2
  2. or
  3. 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:

然后编码剩下的