2014-02-17 3 views
1

У меня есть этот простой код:Целочисленное деление вместо регулярного один в Python

[n/2 for n in range(100, 200)]

Но, как ни странно, он возвращается [50,50,51,51,52,52, и т.д.], так он использует целочисленное деление вместо обычного (мне нужно его выводить [50,50.5,51,51.5 и т. д.]). Почему это происходит?

ответ

3

В Python 2 деление целых чисел всегда будет производить целое число. (В Python 3, вы получите "реальное" деление)

Вы можете переписать код, как:

[n/2.0 for n in range(100, 200)] 

или в том случае, если у вас есть 2 переменные:

[float(n)/othervar for n in range(100, 200)] 

, чтобы получить ожидаемое поведение,

или добавить

from __future__ import division 

в начале файла, чтобы получить поведение Python 3.

Чтобы ответить на вопрос «почему», этот вопрос является продолжением семантики деления C (хотя Python сделал выбор, чтобы всегда выставлять результат вместо округления в сторону 0, так что вы даже не получаете истинный C целочисленное деление.)

+1

Отличный вклад с модулем '__future__'. – hanleyhansen

+0

Да, очевидно, мне нужно использовать n/(переменная + 0.00). Это работает, но это не выглядит хорошо. – RomaValcer

+0

@RomaValcer: отредактировал мой ответ. используйте 'float()' для любой из переменных вместо добавления '0.00', чтобы заставить его быть float. – geoffspear

1

Попробуйте [n/2.0 for n in range(100, 200)], чтобы сделать его поплавковым. Передавая 2 как целое число и все числа в диапазоне как целое число, Python обрабатывает результат как целое число. Вам нужно Floating Point Arithmetic. См. для более подробной информации.

Смежные вопросы