并且和逻辑在基本while循环中反转

时间:2011-06-21 19:00:12

标签: ruby while-loop boolean-logic

我刚刚开始使用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

任何人都可以解释为什么会这样吗?

5 个答案:

答案 0 :(得分:2)

while weight < 100 and num_pallets <=30

将一直运行到weight >= 100num_pallets > 30,因为这会使语句为false

while weight < 100 or num_pallets <=30

将运行,直到weight >= 100num_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

许多人反过来做这种逻辑。

  1. 写下循环结束时应该是什么。

  2. 记下该条件的逻辑反转。

  3. 使用while的反向条件。

  4. 除此之外还有更多,但它应该让你开始。

答案 2 :(得分:0)

如果两个操作数均为真,则

and返回true。

在您的情况下,经过6次迭代后,num_pallets31,导致错误的第二个表达式,因此整个表达式返回false

如果任一操作数为true,则

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的更改。