Странная логика с bool - PullRequest
3 голосов
/ 17 июля 2010

Я не могу понять одну вещь с логикой в ​​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 ]

4 голосов
/ 17 июля 2010

Чтобы исправить ваш код, попробуйте это:

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 голос
/ 17 июля 2010

Проблема, кажется, в этой строке:

topPos = someClass.get_element_pos('element')

Скорее всего, строка topPos будет назначена вместо числовой переменной. Вам нужно преобразовать эту строку в числовую переменную, чтобы вы могли сравнить ее с числовым значением.

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

В противном случае, например, в реализации CPython v2.7 любая int всегда будет сравнивать меньше, чем любая строка.

Похожие вопросы

...