2017-01-11 9 views
0

Я играю на кодирования летучей мыши иПочему str [: len (str)/2], но не str [: len (str) * 0.5]?

return str[:len(str)/2] 

работает нормально, но

return str[:len(str) * 0.5] 

возвращает

Error:slice indices must be integers or None or have an __index__ method 

и хотя я вроде предположения о том, почему это я очень заинтересованы в том, чтобы услышать более обоснованное объяснение. Спасибо!

Бонусные баллы: предлагайте тег, который я могу разместить на этом посту, чтобы мы могли его классифицировать хорошо!

+0

умножая на 0,5 возвращает значение с плавающей точкой, и вы должны использовать целые числа в срезах. В то время как деление на 2 (при условии, что Python 2.x) всегда возвращает целое число. – kindall

ответ

2

В Python 2:

Разделив два целых числа результатов в виде целого числа.

Умножение целого числа и поплавка приводит к поплавке.

Ломтики должны быть целыми.

+2

* Только в Python 2 –

+1

Чтобы расширить на @ juanpa.arrivillaga, в Python 3 вам нужно использовать '//' для получения целочисленного деления, даже если оба операнда являются целыми числами. –

+0

@ juanpa.arrivillaga добавлено уточнение. Благодарю. – Javier

0

В python, кусочки must be integers (5.0 неправ, 5 - это хорошо).

В питоне 2

len(str)/5 # => integer 
len(str) * 0.5 # => float 

В питона 3

len(str)/5 # => float 
len(str) // 5 # => integer (equivalent of math.floor(len(str)/5))