Число выходных когда-то есть .0 - PullRequest
0 голосов
/ 17 октября 2018

Код:

n = 18
total = 0
while n <=35:
 total += (n/2)
 print(total)
 n += 2 

Выход: `

9.0
19.0
30.0
42.0
55.0
69.0
84.0
100.0
117.0`

Второй код:

n = 40
total = 2
while n >=25:
 total += n
 print(total)
 n -= 3 `

Выход:

42
79
113
144
172
197

Вопрос: Почему первый вывод имеет 0 за целым числом, а второй - нет, хотя 2 кода выглядят одинаково

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Оператор '/' в Python3 возвращает вам число с плавающей точкой, чтобы получить целое число, в результате используйте целочисленное деление '//'.

0 голосов
/ 17 октября 2018

В 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.

0 голосов
/ 17 октября 2018

Оператор деления / всегда приводит к плавающему числу в Python 3. Вместо этого следует использовать оператор целочисленного деления //, если вы уверены, что n всегда четное, или если вам не нужноостаток:

total += n // 2
...