【问题标题】:What's the logical value of "string" in Python? [duplicate]Python中“字符串”的逻辑值是什么? [复制]
【发布时间】:2011-05-30 17:29:17
【问题描述】:

我错误地用 Python 编写了这段代码:

name = input("what is your name?")
if name == "Kamran" or "Samaneh":
    print("That is a nice name")
else:
    print("You have a boring name ;)")

即使输入既不是“Kamran”也不是“Samaneh”,它也总是打印出“That is a nice name”。

我是否正确地说它认为“Samaneh”是真实的?为什么?

顺便说一句,我已经注意到我的错误了。正确的形式是:

if name == "Kamran" or name == "Samaneh":

【问题讨论】:

    标签: python string casting boolean


    【解决方案1】:

    Python(和大多数其他语言)中的任何非空字符串都为真,所有非零数字和非空列表、字典、集合和元组也是如此。1

    做你想做的更好的方法是:

    name = input("what is your name?")
    if name in ("Kamran", "Samaneh"):
        print("That is a nice name")
    else:
        print("You have a boring name ;)")
    

    这将创建一个包含您想要的名称的元组并执行成员资格测试。

    1 正如 delnan 在 cmets 中指出的那样,这适用于所有编写良好的集合。即如果你实现了一个自定义的集合类,确保它为空时为false。

    【讨论】:

    • 不仅是列表、字典和元组——所有个空集合(如果写得好)。
    • @delnan,我试图想出一个好的说法,所以我坚持使用内置插件并忘记了设置。
    • 大多数对象,无论是集合还是其他,都是真实的;只有那些明确定义的不是。如果你只是用class C(): pass 定义一个类,实例将测试为True
    【解决方案2】:

    除了空字符串'',字符串都将计算为True(参见this page for a full list of values of all types that evaluate to False。这遵循许多其他编程语言的逻辑(除了一些也计算字符串,如'0''false'、等到False)。具体做什么决定有点武断,但所做的选择可以解释为允许使用强制转换作为测试空(默认或未填充)字符串的简单方法。

    您始终可以使用bool() 函数将任何类型的强制转换为bool

    >>> bool('')
    False
    >>> bool('non-empty string')
    True
    >>> bool('0')
    True
    >>> bool('False')
    True
    >>> bool('false')
    True
    

    【讨论】:

      【解决方案3】:

      http://docs.python.org/library/stdtypes.html#truth-value-testing

      "....所有其他值都被认为是真的——所以许多类型的对象总是真的。"

      【讨论】:

        【解决方案4】:

        在 Python 中,空字符串被视为 False,否则为 True

        您可以使用in 运算符:

        if name in ("Kamran","Samaneh"):
            print("That is a nice name")
        else:
            print("You have a boring name ;)")
        

        【讨论】:

          【解决方案5】:

          一个非空字符串是True,是的。空的为 False。这个超级好用。

          【讨论】:

            【解决方案6】:

            显然,它必须是:

            name = raw_input("what is your name?")
            

            不是

            name = input("what is your name?")
            

            .

            你写的是这样的:

            if (name == "Kamran" or "Samaneh")
            

            另外一个很好的表达方式是:

            if name == ("Kamran" or "Samaneh")
            

            但我也更喜欢已经显示的(“Kamran”或“Samaneh”)中的名称

            .

            顺便可以写成:

            print("That is a nice name" if raw_input("what is your name?") in ("Kamran","Samaneh")
                  else "You have a boring name ;)")
            

            【讨论】:

            • Python3 中没有raw_inputif name == ("Kamran" or "Samaneh")if (name == "Kamran" or "Samaneh") 一样是错误的。
            • 我测试了 name == ("Kamran" 或 "Samaneh")。当我输入“Samaneh”时,它给了我“你的名字很无聊;)”这是不正确的。
            • 我完全不明白为什么我发布了如此错误和愚蠢的答案。尽管我前段时间研究过在 Python 中将链视为布尔值的问题,并且我认为我已经很好地理解了这件事,但我完全搞砸了。
            • 通常,我总是在发布之前测试脚本。在这里,似乎我没有,因为表达式 name == ("Kamran" or "Samaneh") 仅在名称为“Kamran”时才给出 True,因此不能用于检测 name 何时具有值“Samaneh” .
            • PS 我只在一个块中发布此评论时遇到了问题。不知道是不是因为我的操作系统过时了,页面显示很奇怪,还是stackoverflow正常工作。操作系统还是 SO? :)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-03-05
            • 2020-06-12
            • 2020-08-24
            • 2014-12-10
            • 2017-10-11
            • 1970-01-01
            • 2017-10-17
            相关资源
            最近更新 更多