【问题标题】:Why, for x=0, 'not x' is True and 'x' is False in Python? [duplicate]为什么在 Python 中,对于 x=0,'not x' 为 True 而 'x' 为 False? [复制]
【发布时间】:2020-06-21 02:49:11
【问题描述】:

我被 True/Falsexnot x 困住了,

对于x = 0,其中xint,在Python 中。

为什么if not x 允许执行以下语句,为什么不允许if x

请解释一下。

【问题讨论】:

  • ... of the following statement... 我们似乎缺少您想要的代码。您可以使用edit 按钮添加它。

标签: python integer boolean-operations


【解决方案1】:

来自 python 文档:

"默认情况下,一个对象被认为是真,除非它的类定义了一个返回 False 的 bool() 方法或一个返回零的 len() 方法,当用对象调用。1 以下是大多数被认为是错误的内置对象:

  • 定义为假的常量:NoneFalse

  • 任何数字类型的零:00.00jDecimal(0)Fraction(0, 1)

  • 空序列和集合:''()[]{}set()range(0)

https://docs.python.org/3/library/stdtypes.html

也就是说,零是整数,

>>> type(0)
<class 'int'>

但有一个False逻辑值,如''、()、[]...等

【讨论】:

    【解决方案2】:

    因为在python中0被认为是假的,所以当你写(if x)时它只会在x !=0时执行(所以它会被评估为真)。

    【讨论】:

    • 谢谢你教我。很有帮助!
    【解决方案3】:

    如果条件评估为“假”值(如 0、空字符串、False 或空列表/元组),则 If 语句不执行其内容。

    【讨论】:

    • 帮助很大。谢谢!!
    【解决方案4】:

    假设你的意思是

    x = True
    y = 0
    
    if x:
      print('x is true')
    if not y:
      print('your not sure why this prints')
    

    这是因为在 Python 中,0 的计算结果为 False。

    【讨论】:

    • 很遗憾,但我不知道 '0 评估为 False'。谢谢!!
    • 没问题,玩得开心!
    【解决方案5】:

    0subclass boolFalse,而任何不为零的数字都会计算为 True

    x = 0
    if not x
    

    就像说

    x = 0
    if x is False:
    

    条件满足。

    【讨论】:

    • 感谢您的详细解释!这表明我没有完全理解布尔基础知识。
    • 你知道if x: 的意思是if is True,对吧?
    • 我刚学会了。谢谢!!
    【解决方案6】:

    最终:因为语言定义是这样说的。

    Python 选择让几乎所有表达式都可以隐式转换为布尔 (True/False) 值。转换是在语言中定义的。

    对于整数类型,转换为0为False,其他值为True。

    当然,如果表达式X 为假,则not X 为真,通过运算符not 的简单定义。

    【讨论】:

    • 感谢您的友好解释。我不知道“对于整数类型,如果为 False,则转换为 0”。很好的帮助!
    【解决方案7】:

    听起来您需要进行一些布尔检查。 Python 世界中的一切(以及大多数编程)归结为 True 或 False。 让我们以整数为例。 在 python(可能还有大多数语言)中,值 0 为 False,其他一切为 True。 通过使用bool 函数,您可以在python 中获取几乎任何东西的真/假值。试试bool(0)bool(2)

    现在,if 所做的是接受一个表达式(基本上只是一个布尔值),如果为 True,则执行代码块,如果为 False,则跳过它。

    x = 0
    if x:
        print("This will never be printed because x is", x, "and it's Boolean value is", bool(x))
    

    现在,not 所做的是取一个布尔值并使其相反。 not TrueFalsenot FalseTrue。不管not 存在多少次,它都会这样做,所以not not True 将是True

    x = 0
    if not x:
        print("This will print, because x is", 0, "the Boolean value of x is", bool(x), "and the not value of boolean x is", not bool(x))
    

    【讨论】:

    • 感谢您提醒我布尔基础知识。我确实尝试过 bool(0) 和 bool(2)。非常感谢您的 cmets。
    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2019-05-03
    • 2013-08-29
    相关资源
    最近更新 更多