0
ant=['1']  
round = 30  

while round:  
    ant += '!'  
    next = []  
    start = 0  

    for current in range(len(ant)):  
        if ant[current] != ant[start]:  
            next.append(str(current-start)+ant[start])  
            start = current  
    ant = "".join(next)  

    round-=1  

print len(ant)  

我在博客中获得了这个源代码并尝试在 3.2 上运行它。

(这是关于制作蚂蚁序列的。[1,11,12,1121,&c]

但是在第 10 行,“IndexError : string index out of range”弹出,我几乎不明白为什么。

4

2 回答 2

1

你的代码对我来说运行良好


测试.py:

ant=['1']
round = 30

while round:
    ant += '!'
    next = []
    start = 0

    for current in range(len(ant)):
        if ant[current] != ant[start]:
            next.append(str(current-start)+ant[start])
            start = current
    ant = "".join(next)

    round-=1

print len(ant)

$ python test.py
5808
于 2012-05-29T06:26:33.320 回答
1

你的代码在我的电脑上运行良好。我的python版本是2.7

len(ant)5808

但我认为你的python代码不是很清楚,也不是pythonic。你可以阅读这个链接这个

例如,使用这个

for index, x in enumerate(ant):

代替for current in range(len(ant)):

并且不要使用ant +='!'. 它应该是ant.append('!')

祝你好运

于 2012-05-29T06:38:15.053 回答