2015-11-05 58 views
-1

下面是代码:关于索引while循环的特殊之处是什么?

a = "218916754" 
b = "" 

while len(a) > 1: 
    b = b + a[0] 
    a = a[2:] + a[1] 

b = b + a 
print b 

结果是"281749561"。我的问题是,这是怎么发生的?在这个代码中,没有i,没有i+=1等等,迭代是怎么发生的? while循环有什么特别之处?我的意思是索引函数隐藏在这个while循环中?

+0

您是否试过单步执行算法?如果你不能在你的头上或纸上做,请考虑http://www.pythontutor.com/ – jonrsharpe

回答

0

这条线:

a = a[2:] + a[1] 

导致字符串,它是一个性格比以前更短。一旦这个字符串的长度为1,循环就会退出。

+0

哦,我看到:当你有动作时,你有相应的变量。听起来像禅宗。 –

0

while子句中没有“索引函数”或索引“i”。相反,这样的代码:

while <expression>: 
    <body> 

手段, “重复<body>只要<expression>是真正的”

0

最初,当我们在编程中,我们一直在使用索引(一般 - I,X,Y,T)跟踪循环的迭代。这是因为我们总是有一个循环,我们想要运行一个已知的固定数量的迭代。但是索引不是循环的基础。循环是远不止于此的工具。

一个循环由条件和正文组成。根据条件是True还是False,机体会执行多次。 (条件是布尔条件)。

所以在给定的代码中,条件是len(a)>1。也就是说 - 如果字符串“a”的长度大于1.所以只要条件成立,循环的主体就会执行多次。 (你也可以看到,如果错误地实现,你可能有不会终止的循环)。

要查看此特定程序中究竟发生了什么,可以使用循环内的print语句和一个虚拟变量“iteration_num”,我使用该变量来跟踪迭代。继续并运行以下代码并亲自查看。

a = "218916754" 
b = "" 
iteration_num = 1 
while len(a) > 1: 
    b = b + a[0] 
    a = a[2:] + a[1] 
    print "iteration number: " + str(iteration_num) 
    print "a: " + a 
    print "b: " + b 
    iteration_num = iteration_num + 1 

b = b + a 
print b