下面是我正在制作的游戏中的一些代码,它会扰乱随机单词的字母以供玩家猜测。我想知道为什么当我把我的字母变量(将我的单词库中的一个单词中的一个随机字母分配给变量字母)放在我的while word:
语句之上时,会出现字符串索引错误但是如果我放了它while语句中的变量:语句没有错误。
我知道在字符串koala
中,k
为0
,a
为4
。为什么会在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):]
为什么?
答案 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):]
超出范围。