Я пытался нормализовать набор чисел от -100 до 0 до диапазона 10-100 и имел проблемы только для того, чтобы заметить, что даже без каких-либо переменных это не оценивает способ, который я ожидал бы это:Python division
>>> (20-10)/(100-10)
0
Float разделение не работает либо:
>>> float((20-10)/(100-10))
0.0
Если какая-либо сторона разделения отливают поплавка он будет работать:
>>> (20-10)/float((100-10))
0.1111111111111111
Каждая сторона в первом примере оценивается как int, что означает, что окончательный ответ будет передан в int. Поскольку 0.111 меньше, чем 0,5, он округляется до 0. Это, по-моему, непрозрачно, но я думаю, что так оно и есть.
Какое объяснение?
См. Также: [Почему это подразделение не работает в python?] (Http://stackoverflow.com/questions/1787249/why-doesnt-this-division-work-in-python/1787255#1787255) – miku
Адам, мне все еще не нравятся ваши объяснения. Первый пример - целочисленное деление, которое просто возвращает 0. Второй пример ошибочно заключен в скобки для желаемого эффекта. –
@GregS Первым примером была проблема. Второй пример пояснительный и был написан после первого вопроса. Все ответы ниже объясняют проблему очень хорошо, особенно @KennyTM. Важно отметить, что моя первоначальная проблема - это только проблема на Python 2.x, а не 3. Это немного смущает, что поведение изменится так, но теперь, когда я знаю, я буду использовать из __future__ import division и использовать 3 .x. Приветствия. –