2017-11-25 335 views
-1

所以我工作的一個任務,我有麻煩我的代碼工作,直到我嘗試這樣做: 而不是鍵入: 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

回答

1

我猜你想要的是一個簡單或聲明

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

您的代碼做什麼:

  • 的第一段代碼檢查,如果價值觀不等於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):

解決這個問題應該執行,當且僅當兩個是非零。