我刚刚开始使用rails,但这种逻辑似乎与我相反。
weight = 70
num_pallets = 25
while weight < 100 and num_pallets <=30
weight += 1
num_pallets += 1
puts weight
end
我觉得既然循环应该在满足两个标准的情况下运行,那么输出的重量应该高达100。 无论其...
When I use and the output is 70 71 72 73 74 75, 76
when I use "or" in place of "and" the output is 70, 71 ... 100
任何人都可以解释为什么会这样吗?
答案 0 :(得分:2)
while weight < 100 and num_pallets <=30
将一直运行到weight >= 100
或num_pallets > 30
,因为这会使语句为false
while weight < 100 or num_pallets <=30
将运行,直到weight >= 100
和num_pallets > 30
都为真,因为这会使语句为false。
答案 1 :(得分:1)
分析这个有一个技巧。
while weight < 100 and num_pallets <=30
weight += 1
num_pallets += 1
puts weight
end
最后,情况正好相反。
weight >= 100 or num_pallets > 30
许多人反过来做这种逻辑。
写下循环结束时应该是什么。
记下该条件的逻辑反转。
使用while
的反向条件。
除此之外还有更多,但它应该让你开始。
答案 2 :(得分:0)
and
返回true。
在您的情况下,经过6次迭代后,num_pallets
为31
,导致错误的第二个表达式,因此整个表达式返回false
。
or
返回true。在前6次迭代中,两个表达式都为真(weight
低于100且num_pallets低于或等于30)。在第七次迭代中,num_pallets
为31,因此第二个表达式为false,但weight
仍然低于100,因此循环运行直到weight
大于100。
答案 3 :(得分:0)
当符合两个标准时,循环应该运行 - 正确。
所以,如果其中一个标准失败,循环就会停止。
答案 4 :(得分:0)
如上所述,此循环仅执行5次,因为您的while
语句当前需要 BOTH 语句为真。因此,因为num_pallets
从25开始并在30结束,所以此循环仅执行5次。但是,如果将行更改为:
weight, num_pallets = 70, 25
while weight < 100 || num_pallets <=30 #Changed to "OR"
weight, num_pallets = weight + 1, num_pallets + 1
puts weight
end
......它将运行30次。请注意,上面唯一有意义的更改是while
行中从AND到OR的更改。