布尔奇怪的逻辑

时间:2010-07-17 07:16:46

标签: python boolean

我无法理解python中的逻辑。这是代码:

maxCounter = 1500
localCounter = 0

while True:
   print str(localCounter) + ' >= ' + str(maxCounter)
   print localCounter >= maxCounter

   if localCounter >= maxCounter:
      break

   localCounter += 30

结果输出:

...
1440 >= 1500
False
1470 >= 1500
False
1500 >= 1500
False
1530 >= 1500
False
1560 >= 1500
False
...

我在那里有无限循环。为什么呢?


topPos = someClass.get_element_pos('element')
scrolledHeight = 0

while True:
    print str(scrolledHeight) + ' >= ' + str(topPos)
    print scrolledHeight >= topPos
    if scrolledHeight >= topPos:
        print 'break'
        break

    someClass.run_javascript("window.scrollBy(0, 30)")
    scrolledHeight += 30
    print scrolledHeight

    time.sleep(0.1)

2 个答案:

答案 0 :(得分:4)

要修复您的代码,请尝试以下操作:

topPos = int(someClass.get_element_pos('element'))

<强>为什么吗

当我复制并粘贴原始代码时,我得到了这个:

...
1440 >= 1500
False
1470 >= 1500
False
1500 >= 1500
True

我可以找到一个小的更改,让您的代码重现您所看到的行为是将第一行更改为:

maxCounter = '1500'  # string instead of integer

进行此更改后,我还可以看到您获得的输出:

1410 >= 1500
False
1440 >= 1500
False
1470 >= 1500
False
1500 >= 1500
False
1530 >= 1500
False
etc..

答案 1 :(得分:1)

问题似乎出现在这一行:

topPos = someClass.get_element_pos('element')

这可能会将字符串分配给topPos,而不是数字变量。您需要将此字符串转换为数字变量,以便对其进行数字比较。

topPos = int(someClass.get_element_pos('element'))

否则,例如在CPython v2.7的实现中,任何int总是要比任何字符串都要少。

相关问题