我尝试制作一个生成这样的文字的小程序:
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课程中运行它,如果这有任何不同。
答案 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])