Her*_*hel 1 ruby logic boolean-logic
好的,我在windows x64上使用Ruby 2.26.问题是,我真的只是学习如何编写代码的新手,所以我不确定这是一个真正的错误,还是只是我的错误,因为这个错误非常简单,它有点愚蠢(?)@_ @
'while'和'until'运算符.
我所知道的,
action = gets.chomp
until action == "a" || action == "b"
puts "Answer a or b"
action = gets.chomp
end
puts "The answer: " + action
Run Code Online (Sandbox Code Playgroud)
和
action = gets.chomp
while action != "a" || action != "b"
puts "Answer a or b"
action = gets.chomp
end
puts "The answer: " + action
Run Code Online (Sandbox Code Playgroud)
应该导致同样的事情.但是在这里使用'while'运算符,即使我在powershell上的用户输入上加上"a"或"b",也会让我无限循环.谁能告诉我为什么会这样?或者这真的是一个错误吗?(这是一段时间的耻辱,直到操作员应该是一个非常基本的逻辑运算符吗?)
相反的
action == "a" || action == "b"
Run Code Online (Sandbox Code Playgroud)
是
action != "a" && action != "b"
Run Code Online (Sandbox Code Playgroud)
参见德摩根定律.
action != "a" || action != "b"
Run Code Online (Sandbox Code Playgroud)
总是true:
action是"a",它是false || true,是trueaction是"b",它是true || false,是trueaction不是,那就是true || true,是true所以你的循环真的如此while true.
注意:Ruby肯定存在缺陷,其中一些可能很简单.但这并不意味着你不理解的任何东西都是一个bug.;)
从句子中提取布尔逻辑并不总是那么容易:
"你喜欢猫与狗"
你想知道你是否喜欢animal.为此,您需要检查animal是狗还是猫.
如果你检查那animal是一只狗和一只猫,你肯定不会喜欢这种动物!