【问题标题】:Why str[:len(str) / 2] but not str[:len(str) * 0.5]?为什么 str[:len(str) / 2] 而不是 str[:len(str) * 0.5]?
【发布时间】:2017-01-11 22:54:02
【问题描述】:

我正在玩编码蝙蝠和

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.5 返回一个浮点数,并且必须在切片中使用整数。而除以 2(假设 Python 2.x)总是返回一个整数。

标签: python string type-conversion division multiplication


【解决方案1】:

在 Python 2 中:

两个整数相除得到一个整数。

一个整数和一个浮点数相乘得到一个浮点数。

切片必须是整数。

【讨论】:

  • *仅在 Python 2 中
  • 要扩展@juanpa.arrivillaga,在Python 3 中你需要使用// 来获得整数除法,即使两个操作数都是整数。
  • @juanpa.arrivillaga 添加了说明。谢谢。
【解决方案2】:

在 python 中,切片必须是整数(5.0 是错误的,5 是好的)。

在python 2中

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

在 python 3 中

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

【讨论】: