Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我会得到一个“;“字符串索引超出范围”;上面的字母变量出错,而word:语句不在下面?_Python_Python 3.x - Fatal编程技术网

Python 为什么我会得到一个“;“字符串索引超出范围”;上面的字母变量出错,而word:语句不在下面?

Python 为什么我会得到一个“;“字符串索引超出范围”;上面的字母变量出错,而word:语句不在下面?,python,python-3.x,Python,Python 3.x,下面是我正在创建的一个游戏中的一些代码,它将一个随机单词的字母拼凑起来,供玩家猜测。我想知道为什么在while word:语句上方放置字母变量(它将单词库中的一个单词中的随机字母分配给变量字母)时会出现字符串索引错误,但如果在while word:语句中放置相同的变量,则不会出现错误 我知道在字符串koala中,例如,k是0,a是4。为什么在while语句中会发生变化?还是有别的事情发生了 这项工作: while word: letter = random.randrange(len

下面是我正在创建的一个游戏中的一些代码,它将一个随机单词的字母拼凑起来,供玩家猜测。我想知道为什么在
while word:
语句上方放置字母变量(它将单词库中的一个单词中的随机字母分配给变量字母)时会出现字符串索引错误,但如果在while word:语句中放置相同的变量,则不会出现错误

我知道在字符串
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):]

为什么?

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

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

每次迭代

while word:
    scrambled_word += word[letter]
    word = word[:letter] + word[(letter+1):]
单词
缩短一个字母:

>>> "koala"[:3]
'koa'
>>> "koala"[4:]
'a'
因此,
word[letter]
最终会尝试访问一个不再存在的字母

如果要对单词进行加扰,则有一个内置函数:

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

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

如果你不是Python程序员,为什么要回答?>>xs=list(范围(10))>>>>xs[:10][0,1,2,3,4,5,6,7,8,9]>>>xs[(10+1):]来自Python文档:退化的切片索引被优雅地处理:太大的索引被字符串大小替换,因为算法化的逻辑在所有级别3编程语言中都是相同的。当然,有些编译器/解释器确实会在上面添加自己的函数,但这不会改变正在发生的事情。您应该在发布答案之前测试答案,或者非常了解Python。你的回答/陈述是错误的。请参阅上面我的baldy格式的交互式REPL会话。几乎所有语言都允许子字符串的起始索引为字符串的长度,返回空字符串。请您向我们展示这一错误所在的回溯。谢谢欢迎来到Word Scramble 2.0!说明很简单。。。你将有5次机会解读一个单词,总共得7分。第一次猜测之后的每一次猜测都将花费你1分。你也可以要求一个提示,但这将花费你2分。祝你好运点击回车键获取您的第一个单词!回溯(最后一次调用):文件“C:/Users/Walter/Documents/Python For初学者/Chapter 4/word\u scramble\u 2.py”,第28行,在scrambled\u word+=word[letter]索引器中:字符串索引出range@brabbit274... 下次请将回溯(即从
回溯(most…
)开始)复制到您的问题中,格式为代码。否则就很难读了。我希望这是你需要的。正如我所说,我是一个非常新的,所以外行的条款将是一个很大的帮助。谢谢你关注这个问题,詹姆斯@巴库留,好吧-回溯(最后一次调用):文件“C:/Users/Walter/Documents/Python For初学者/Chapter 4/word\u scramble\u 2.py”,第28行,在scrambled\u word+=word[letter]indexer中:字符串索引超出范围hm,但这正是我想要的。我想在加扰的单词字符串中添加一个随机字母,直到不再有字母,while语句循环将关闭?好的,那么您需要在每次迭代中选择一个新的
字母
,确保传递给
randrange()
的参数每次减少一个。哈哈!现在我明白了!我“需要在每次迭代中选择一个新字母”。我现在明白了!谢谢Tim Pietzcker!