Возникла проблема с time.sleep в python 2.7

Я запускаю эту очень простую функцию для тестирования:

import time
def printnum(ang):
    if ang > 0:
        print(ang)
        time.sleep(3 * abs(ang) / 360)
        print("done")
    if ang < 0:
        print(ang)
        time.sleep(3 * abs(ang) / 360)
        print("done")

Когда я запускаю его на Python 3, он работает нормально Однако на Python 2 у меня возникает проблема, когда printnum не работает с широким диапазоном чисел, он не выполняет задержку... На самом деле, пока он работал только с printnum(180) в моих тестах.

Это странно для кода, который так прост. Я тестировал на 2 компьютерах. Это случилось с вами? Есть причина почему? Предложения, чтобы это работало? (Кроме перехода на Python 3, который сложен для оборудования, с которым я работаю)

2 ответа

Поскольку ang вероятно, целое число достаточно мало, то 3 * abs(ang) / 360 является выражением, где одно целое число делит другое.

Деление Python 2 по умолчанию является целочисленным делением, поэтому результат, вероятно, равен 0.

Fix:

3.0 * abs(ang) / 360

На Python 2 / по умолчанию усеченное целочисленное деление при передаче int операнды, а не "истинное деление" (которое производит float Результаты). Вы можете исправить одним из двух способов:

  1. добавлять from __future__ import division в начало файла, чтобы использовать правила деления Python 3 (/ означает истинное деление всегда, где вы используете // если вы действительно имеете в виду деление пола)
  2. Изменить либо 3 или же 360 в float литералы, поэтому математика выполняется floatстиль, например time.sleep(3. * abs(ang) / 360) или же time.sleep(3 * abs(ang) / 360.)
Другие вопросы по тегам