Возникла проблема с 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
Результаты). Вы можете исправить одним из двух способов:
- добавлять
from __future__ import division
в начало файла, чтобы использовать правила деления Python 3 (/
означает истинное деление всегда, где вы используете//
если вы действительно имеете в виду деление пола) - Изменить либо
3
или же360
вfloat
литералы, поэтому математика выполняетсяfloat
стиль, напримерtime.sleep(3. * abs(ang) / 360)
или жеtime.sleep(3 * abs(ang) / 360.)