В Python 3 деление двух целых чисел с помощью оператора /
дает значения float
, например
>>> 1/2
0.5
... но также
>>> 1/1
1.0
(в Python2, вы получите 0
и 1
!)
На первой итерации вы добавляете int
и float
с total += (n/2)
и двумя float
с на последующих итерациях.Оба этих дополнения производят значения float
.
Конечный .0
выглядит странно только потому, что вы вычисляете исключительно значения, которые могут быть выражены как целые числа.
То, что int_a/int_b
становится float
(в Python 3), даже если результат может быть записан как целое число, просто непротиворечиво.
Было бы странно, если бы делилось несколько целых чиселбудет производить float
значений, а деление некоторых других целых будет производить int
значений.
Во втором фрагменте кода вы только добавляете и вычитаете целые числа друг из друга, что приводит к значениям int
, поэтомуНе вижу завершающего .0
.
Наконец, если вы хотите принудительно использовать целочисленное деление, используйте оператор //
.
>>> 1//2
0
>>> 1//1
1
//
в Python 3 ведет себя как /
сделал в Python 2.