字符串索引超出范围,以随机行显示

时间:2017-10-10 07:56:20

标签: python

我尝试制作一个生成这样的文字的小程序:

M E T A  
E E  
T   T  
A     A

我的代码:

line = 0
word = raw_input("")

for i in word:
  print i,

print

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

这似乎在技术上有效,但结果是

  

Traceback(最近一次调用最后一次):File" python",第11行,在IndexError中:字符串索引超出范围

根据输入长度可以出现在不同的行中。此外,如果我什么也没输入,它就会像我输入RUN一样,但有时只是输入RUN。这种奇怪行为背后的原因是什么?我在Codeacademy的python课程中运行它,如果这有任何不同。

3 个答案:

答案 0 :(得分: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这里是内置函数,用于迭代某些集合(word is collection here)和枚举(索引)每个元素。因此,在每次迭代emumerate返回元素i和元素本身ch的索引。 word[1:]是从集合中获取子集元素的运算符。这意味着我们将从索引为1的所有值开始。

答案 1 :(得分:0)

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

答案 2 :(得分: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])