逻辑运算

逻辑运算

问题描述:

所以我工作的一个任务,我有麻烦我的代码工作,直到我尝试这样做: 而不是键入: 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.谢谢!

+0

第一个只指定'num'和'den'都不能为零。虽然这实际上非常混乱的语法。 –

+0

你能明确指定你的需求吗?您的第二个陈述仍然可能不符合您的要求。从第一眼看,我猜是因为在'!='之前执行'和'的优先顺序。如果你想让'和'最后执行,你最好把它们包装成'(num!= 0)和(den!= 0)'。 –

+1

我们不知道你想要发生什么,因为我们没有什么让你的“代码工作”的概念。 – Sebastian

我猜你想要的是一个简单或声明

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) 
>>> 

您的代码做什么:

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

关于truthy/falsy值:如果它们分别等于0或0.0,

  • 整数和浮点数是falsy。否则,他们是真的。如果它们是空的(即[]{}"",否则truthy
  • 名单,类型的字典和字符串falsy
  • None总是falsy
  • 从我的测试中,函数(实际函数本身 - 。在结果会根据自己的数据类型进行比较)始终是真的。

当我的机器上进行测试时,(1)和(3)是当Truenumden都是非零的,并False否则。 (2)是True,当num,den或两者都非零时,以及False

从纳尔逊在评论中说什么,据我所知,可以测试!=优先于and,所以不应该引起问题。

以上所有内容都在Python 2.7中进行了检查。我不能保证它对于Python 3来说是一样的。

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

虽然你的第一个和最后一个方法应该在python 2.7上工作,但由于你报告的第一个方法并不能确实与操作优先级有关。您应该能够通过使用

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

解决这个问题应该执行,当且仅当两个是非零。