2017-10-10 129 views
0

我试图让一个小程序,生成的文字是这样的:字符串索引超出范围,出现在随机线

M E T A 
E E 
T T 
A  A 

我的代码:

​​

它似乎在技术上的工作,但结果在

Traceback (most recent call last): File "python", line 11, in IndexError: string index out of range

可以出现在根据输入长度不同的线路。另外,如果我什么都不输入,它将会像我输入RUN一样运行,但有时只是。这种怪异行为背后的原因是什么?我在Codeacademy的python课程中运行它,如果这有什么不同。

+0

用你的'i'变量:'打印字[I] + “” *(I * 2-1)+字[ i]','line'的最后一个值是'len(word)' – SatanDmytro

回答

0

如果你已经迭代了字词,你的line var是没用的。这将足以做到这本:

for i in range(len(word)): 
    print word[i] + " " * (i*2-1) + word[i] 

甚至是这样的:

for i, ch in enumerate(word[1:]): 
    print ch + " " * ((i+1)*2-1) + ch 

enumerate这里是内置的功能遍历一些集合(字是收集在这里),并列举(索引)每个元素。因此,每次迭代emumerate都会返回元素i的索引和元素本身chword[1:]是从集合中获取子集元素的操作符。这意味着我们将从指数1中获取所有从价值开始的值。

+0

如果第一行不是必须写每一个字母的特殊情况,枚举才能工作。你可以在循环中使用条件或者使用'range(1,len(word))'和'print(“”.join(word))' – Adirio

+0

你是对的。我误解了问题。 – Grigoriy

0

字符串索引从0变为len(string)-1。变量line在最后一次迭代中的值为len(word),因此表达式变为word[len(word)],该值超过索引1并导致“IndexError:字符串索引超出范围”。

+0

谢谢,我现在修复了这个问题。但是,你能解释为什么IndexError会根据我的输入长度出现在不同的行中吗?用一个简短的词它总是出现在最后,但是当它超过一定的长度时,错误会随机出现。这是为什么?它不应该总是出现在最后一次迭代中吗? – Cheewii

+0

请发布您的修改后的代码,实际的错误消息(堆栈跟踪),并让我们知道您使用的是哪个版本的Python,我很乐意看一看。 –

+0

对不起,我感到困惑。修改为'for i in range(len(word)-1):'它完美的工作,我只是在问如何在旧代码中出现错误信息。无论如何,它似乎都是由于Codeacademy的有问题的IDE,它似乎并没有发生在其他地方。感谢所有的帮助! – Cheewii

0

逻辑也不管用,你需要以下条件:

word = raw_input("Insert a word: ").upper() 

print(" ".join(word)) 
for i in range(1, len(word)): 
    print(word[i] + " " * (i*2-1) + word[i]) 
相关问题