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!