2012-12-06 52 views
2

在我的示例代碼中,我試圖以「纂」或「redact_again」更換任何話在「文本」那場比賽。既然它是一個/或場景,我認爲||將被使用。事實證明,&&實際上工作。如果兩者或任何一個匹配,則將它們正確地替換爲「編輯」一詞。如果它找不到匹配項,它只會重新打印「文本」。我只想了解爲什麼使用||無法在任何一種情況下工作?在Ruby中,爲什麼&&在||中工作不在我的示例代碼中?

puts "Tell me a sentence" 
text = gets.chomp.downcase 
puts "Redact this word: " 
redact = gets.chomp.downcase 
puts "And redact another word: " 
redact_another = gets.chomp.downcase 

words = text.split(" ") 
words.each do |x| 
if x != redact && x != redact_another 
print x + " " 
else 
print "REDACTED " 
end 
end 
+0

你有一個蘋果或桔子....不是我不有一個蘋果,我沒有一個橘子。 – Kubee

+0

從未understod爲什麼人們使用否定時,肯定可以使用 – 2012-12-06 06:27:44

+1

更換任何話......有要麼... ...或者是更好地積極的,如果換成== || ==在Salil的答案中。在普通的演講中,我們經常說「如果我沒有這個或不是那個」,並且通過if ... OR ....來翻譯它是一個常見的錯誤。但是在計算機語言中它必須被翻譯爲「不是這個AND不說」,因爲其實我們的意思是:‘如果我沒有(這種或那種)’=>'如果不是(一|| b)'或'如果不是&&不B' – BernardK

回答

0

這是一個boolean condtion導致這種情況發生。

布爾值要麼一個01

  • 當使用&& BOTH變量必須是1true
  • 當使用||無論是變量必須1true

反轉的邏輯意味着下面兩個語句是邏輯正確:

(x == redact || x == redact_another) == (if x != redact && x != redact_another) 

俏皮。

+0

謝謝。我明白使用&&要求兩者都是真實的。令人困惑的部分是爲什麼如果'redact'找到匹配,但'redact_another'不匹配,它會工作。我現在明白了。感謝您的回答! –

+0

有關材料的另一個鏈接:[DeMorgan's Laws](http://en.wikipedia.org/wiki/De_Morgan's_laws) – obfk

1

下面應該工作

if x == redact || x == redact_another 
    print "REDACTED " 
else 
    print x + " " 
end 

OR

print [redact, redact_another].include?(x) ? "REDACTED " : x + " " 
+0

感謝您向我展示如何以不同的方式做到這一點,但我試圖瞭解爲什麼我的樣品的工作方式與我預期的不同。看到做同樣事情的不同方式確實有助於解釋事情。謝謝! –

相關問題