2017-01-11 4 views
0

Je joue sur le codage chauve-souris etPourquoi str [: len (str)/2] mais pas str [: len (str) * 0.5]?

return str[:len(str)/2] 

fonctionne très bien, mais

return str[:len(str) * 0.5] 

retours

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

et bien que je peux sorte de spéculer pourquoi est-ce que je suis intéressé à entendre une explication mieux éclairée. Je vous remercie! Points bonus: Offrez un tag que je peux placer sur ce post afin que nous puissions le classer correctement!

+0

de 0,5 Multiplying renvoie un flotteur, et vous devez utiliser des entiers en tranches. Alors que la division par 2 (en supposant que Python 2.x) renvoie toujours un entier. – kindall

Répondre

2

En Python 2:

divisant deux nombres entiers se traduit par un nombre entier.

La multiplication d'un entier et d'un flottant résulte en un flottement.

Les tranches doivent être des nombres entiers.

+2

* Uniquement en Python 2 –

+1

Pour développer @ juanpa.arrivillaga, en Python 3 vous devez utiliser '//' pour obtenir une division entière, même si les deux opérandes sont des entiers. –

+0

@ juanpa.arrivillaga ajouté des précisions. Merci. – Javier

0

En python, les tranches doivent être être des entiers (5.0 est faux, 5 est bon).

En python 2

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

En python 3

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