【发布时间】:2016-08-22 10:16:57
【问题描述】:
我制作了一个程序来自动应用我开发的加密。在一段特定的代码中,我不断收到“字符串索引超出范围”错误。
这段代码有什么作用?
下面的代码创建了一个数组,d。它将字符串的某些部分附加到数组中。代码的目的是用宽度为5的文本制作一个矩形,意思是如果原始文本是“abcdefghijkl”,那么想法是将其变成
a b c d e
f g h i j
k l X X X
代码的最后一行给出了错误“字符串索引超出范围”为什么?在代码的前面,正如我忘记提到的,我将 X 添加到字符串的末尾,以便它均匀地分成 5。
d = []
for x in range(1,length/5+2):
d.append(string[(x-1)*5:5*x])
d2=str(d).replace('[','').replace(']','').replace("'",'').replace(',','').replace(' ','')
lend2=len(d)
new=''
for i in range(1,lend2):
new += str([l[i-1] for l in d]).replace('[','').replace(']','').replace("'",'').replace(',','').replace(' ','')
完整的错误文本:
new += str([l[i-1] for l in d]).replace('[','').replace(']','').replace("'",'').replace(',','').replace(' ','')
IndexError: string index out of range
【问题讨论】:
-
如果您需要一个文本块是等宽的,标准的解决方案是对其进行代码格式化,即使它不是严格的代码。
-
你真的应该使用
str.join()而不是将list发送到str()并替换所有不需要的字符。 -
我的代码在某些方面确实不干净,但主要关注的是导致该错误的原因。
-
清理代码通常可以帮助您发现错误。
-
@DevilApple227
i - 1对于某些i >=1、i < lend2,大于d元素的长度。正确的变量名称会有所帮助。