逻辑运算

时间:2017-11-25 21:31:33

标签: python logic logical-operators boolean-logic

所以我正在完成一项任务,在尝试此操作之前,我无法让代码工作: 而不是输入: if (num != 0 and den != 0): 至: if not(num == 0 and den == 0) 我也试过这个: if not ((num and den ) == 0): 我不明白这些陈述之间的区别是什么。第二个声明让它做我想做的事,但我不知道为什么。谢谢!

编辑:抱歉模糊,这里的第一个计时器。 所以我想做的是: 人们可以证明:

(iii)如果num!= 0且den!= 0,则两条线不平行,因此在一条线上相交 点。

如果线段相交,则返回True。

我从我正在为我班级使用的教科书中得到了这个。基本上有一个具有分子和分母的等式,这些是为它们做出的陈述。如果这仍然太模糊,请告诉我。另外,我正在使用python 3.谢谢!!!

2 个答案:

答案 0 :(得分:1)

我猜你想要的是一个简单的OR语句

if num or den:

与您选择的陈述的真实性相符。

>>> def test(num, den):
...     print(bool(num or den), 'num or den')
...     print(bool(not(num == 0 and den == 0)), 'not(num == 0 and den == 0)')
...     print(bool(num != 0 and den != 0), '(num != 0 and den != 0)')
...     print(bool(not ((num and den ) == 0)), 'not ((num and den ) == 0)')
... 
>>> 
>>> test(0, 0)
False num or den
False not(num == 0 and den == 0)
False (num != 0 and den != 0)
False not ((num and den ) == 0)
>>> 
>>> test(0, 1)
True num or den
True not(num == 0 and den == 0)
False (num != 0 and den != 0)
False not ((num and den ) == 0)
>>> 
>>> test(1, 0)
True num or den
True not(num == 0 and den == 0)
False (num != 0 and den != 0)
False not ((num and den ) == 0)
>>> 
>>> test(1, 1)
True num or den
True not(num == 0 and den == 0)
True (num != 0 and den != 0)
True not ((num and den ) == 0)
>>> 

答案 1 :(得分:1)

您的代码的作用:

  • 第一段代码检查两个值是否不等于0.如果是,则运行。
  • 第二个检查两个值是否等于0,然后反转它。换句话说,当numden中至少有一个不等于0时,它会运行,但另一个可能仍为0。
  • 第三个比较numden的真值(见下文)。然后将其逻辑AND与0进行比较,然后进行反转。换句话说,当numden都有一个truthy值时会运行,这应该导致与第一段代码相同的行为。由于这取决于truthy / falsy值而不是显式比较,我不建议这样做 - 它可能会对某些数据类型产生一些意想不到的结果。

关于truthy / falsy值:

  • 如果整数和浮点数分别等于0或0.0,则它们是假的。否则,他们是真的。
  • 如果列表,字符串和字符串为空(例如[]{}"",则为虚假,否则为真。
  • None总是假的。
  • 从我的测试中,函数(实际函数本身 - 结果根据自己的数据类型进行比较)总是很简单。

在我的机器上进行测试时,TruenumdenFalse都为非零时为True,否则为num。 (2)当denFalse或两者都不为零时为!=,否则为and

根据尼尔森在评论中所说的,据我所知,可以测试if (num != 0) and (den != 0):优先于__init__,因此不会导致问题。

以上所有内容都在Python 2.7上进行了检查。我不能保证Python 3的工作方式是一样的。

如果您想获得更多帮助,可能需要提供一些有关您的输入和预期输出的更多信息。

虽然你的第一个也是最后一个方法应该适用于python 2.7,因为你报告的第一个方法不是,它可能确实与操作优先级有关。您应该可以使用

解决此问题

__init__

当且仅当两者都非零时才应执行。