为什么我得到一个“字符串索引超出范围”错误,字母变量高于word:语句但不低于?

时间:2013-12-13 06:43:54

标签: python python-3.x

下面是我正在制作的游戏中的一些代码,它会扰乱随机单词的字母以供玩家猜测。我想知道为什么当我把我的字母变量(将我的单词库中的一个单词中的一个随机字母分配给变量字母)放在我的while word:语句之上时,会出现字符串索引错误但是如果我放了它while语句中的变量:语句没有错误。

我知道在字符串koala中,k0a4。为什么会在while语句中发生变化?或者还有其他事情发生了吗?

这有效:

 while word:
     letter = random.randrange(len(word))
     scrambled_word += word[letter]
     word = word[:letter] + word[(letter+1):]

这不起作用:

 scrambled_word = ''
 letter = random.randrange(len(word))

 while word:
     scrambled_word += word[letter]
     word = word[:letter] + word[(letter+1):]

为什么?

2 个答案:

答案 0 :(得分:3)

每次迭代

while word:
    scrambled_word += word[letter]
    word = word[:letter] + word[(letter+1):]

word缩写为一个字母:

>>> "koala"[:3]
'koa'
>>> "koala"[4:]
'a'

所以最终word[letter]将尝试访问不再存在的字母。

如果你想加扰一个单词,那么就有一个内置函数:

>>> word = "koala"
>>> l = list(word)
>>> random.shuffle(l)
>>> word = "".join(l)
>>> word
'oklaa'

(通过列表对象绕道而行,因为字符串本身是不可变的,不能直接洗牌)。

答案 1 :(得分:-2)

我不是python程序员,但这可能是错误的:

word = word[:letter] + word[(letter+1):]

您需要检查字母是否是最后一个,否则word[(letter+1):]超出范围。