2015-11-05 56 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