【问题标题】:Logical operations逻辑运算
【发布时间】:2017-11-25 21:31:33
【问题描述】:

所以我正在处理一项任务,但在我尝试以下操作之前,我无法让我的代码正常工作: 而不是输入: 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。谢谢!!!

【问题讨论】:

  • 第一个只指定numden不能都为零。虽然这实际上是非常令人困惑的语法。
  • 您能明确说明您的要求吗?您的第二个语句可能仍然无法按您的要求工作。乍一看,我猜是因为and!= 之前执行的优先顺序。如果你想让and 最后执行,你最好像(num != 0) and (den != 0) 一样将它们包裹起来。
  • 我们不知道你想要发生什么,因为我们不知道什么是让你的“代码工作”是什么。
  • 你说的是德摩根定律吗?
  • 抱歉各位,我编辑了这个问题,而且我编程时间不长,也不知道德摩根定律是什么。

标签: python logic logical-operators boolean-logic


【解决方案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)
>>> 

【讨论】:

    【解决方案2】:

    你的代码做了什么:

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

    关于真值/假值:

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

    在我的机器上进行测试时,当 numden 都非零时,(1) 和 (3) 是 True,否则 False。 (2) 当numden 或两者均非零时为True,否则为False

    根据 Nelson 在 cmets 中所说的话,据我所知并且可以测试 != 优先于 and,因此这不会引起问题。

    以上所有内容均在 Python 2.7 上进行了检查。我不能保证它在 Python 3 上同样有效。

    如果您需要更多帮助,您可能需要提供更多关于您的输入和预期输出的信息。

    虽然您的第一种和最后一种方法应该适用于 python 2.7,但由于您报告了第一种方法,但它可能确实与操作优先级有关。您应该能够通过使用来解决此问题

    if (num != 0) and (den != 0):

    当且仅当两者都不为零时才应该执行。

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 2017-09-08
      • 2011-06-25
      • 2011-09-23
      相关资源
      最近更新 更多