2016-02-27 147 views
-1

我试图复制Adam Calhoun's experiment将经典小说减少为标点并将其呈现在海报中。Python - 索引错误:字符串索引超出范围

使用his code,我能够进入标点符号阶段,但是当我试图在海报中进行转换时,出现“symb = txt [”中的“IndexError:string index out of range” jj + ii * symbolsPerLine]“一行。

for ii in range(linesOfText): 
    for jj in range(symbolsPerLine): 
     symb = txt[jj + ii * symbolsPerLine] 
     if (symb == "."): 
      draw.text((trim + jj * deltaW, trim + ii * deltaH - round(font2size/4)), symb, fill=endSentenceFill, 
         font=font2) 
     elif (symb == ','): 
      draw.text((trim + jj * deltaW, trim + ii * deltaH - round(font2size/4)), symb, fill=transitionFill, 
         font=font2) 
     elif (symb == '!') or (symb == '?'): 
      draw.text((trim + jj * deltaW, trim + ii * deltaH), symb, fill=endSentenceFill, font=font2) 
     elif (symb == '"') or (symb == '\'') or (symb == '(') or (symb == ')') or (symb == '[') or (symb == ']'): 
      draw.text((trim + jj * deltaW, trim + ii * deltaH), symb, fill=parentheticalFill, font=font2) 
     elif (symb == ';') or (symb == '-') or (symb == ':'): 
      draw.text((trim + jj * deltaW, trim + ii * deltaH), symb, fill=transitionFill, font=font2) 
     else: 
      draw.text((trim + jj * deltaW, trim + ii * deltaH), symb, fill="green", font=font2) 

代码有什么问题?

+0

很难不知道该说些值,例如'symbolsPerLine'或'linesOfText',因为这是一个范围问题。我不熟悉你引用的github源代码中嵌入的代码。不过,这个问题一般听起来很有趣,请详细说明一下! – MathBio

+0

如果不知道'txt'是什么,我们就无法回答。这是一个行列表吗?为什么要乘以符号PerLine? 'txt [ii] [jj]'会更有意义吗? – tdelaney

+0

我编辑了原始代码,直接与小说的标点符号版本一起工作。这里是'txt'代表: 'file = open(“grandeC_pont.txt”,“r”) txt = file.read() file.close()' –

回答

0
symb = punct[jj + ii*symbolsPerLine] 
+0

在这个例子中,我编辑了代码直接读取小说的标点符号版本。但是,当我试图运行原始代码(使用'punct'而不是'txt')时,出现了同样的问题。 –

+0

然后你需要看看你是如何改变'getPunctuation'函数的,你需要确保你的输入文件每行70个字符和70行(假设你正在使用这些默认值) – HenryM

+0

我能够修复。编辑代码时,我无意中删除了一个负责此计数的功能。现在它可以工作。谢谢! –

0

也许这

for ii in range(len(linesOfText)): 
    for jj in range(len(symbolsPerLine)): 

比方说,TXT为2长,但如果是Ⅱ+ JJ * symbolsPerLine是3它将返回索引超出范围

symb = txt[jj + ii * symbolsPerLine]