程序语言python循环_Python语言程序设计之一--for循环
最近學(xué)到了Pyhton中循環(huán)這一章。之前也斷斷續(xù)續(xù)學(xué)過(guò),但都只是到了函數(shù)這一章就停下來(lái)了,寫(xiě)過(guò)的代碼雖然保存了下來(lái),但是當(dāng)時(shí)的思路和總結(jié)都沒(méi)有記錄下來(lái),很可惜。這次我開(kāi)通了博客,就是要把這些珍貴的學(xué)習(xí)思考總結(jié)記錄下來(lái)。從現(xiàn)在開(kāi)始。
關(guān)于這一章始終有幾個(gè)難點(diǎn)不懂。第一個(gè)就是每次循環(huán)過(guò)后,其中的累加變量是否要清零?這個(gè)問(wèn)題困擾了我許久。很多次寫(xiě)完代碼運(yùn)行時(shí)發(fā)現(xiàn),計(jì)算結(jié)果和我想要的結(jié)果根本不同。比如在《Python語(yǔ)言程序設(shè)計(jì)》這本書(shū)里,第5章習(xí)題第27題:計(jì)算π的值:π =4 * (1 - 1/3 + 1/5 - 1/7 + 1/9 +?… + (-1)i+1 / (2*i -1)),顯示當(dāng)i=10000, 20000, ,,100000時(shí)π的值
題目不難,按公式寫(xiě)就行了。由于希望顯示i在1萬(wàn)、2萬(wàn),,時(shí),π的值,所以用了兩層for循環(huán)。最開(kāi)始的代碼如下:# 累加變量
sum = 0
for i in range(10000, 100001, 10000):
print('i =', i, '時(shí),π的值為:', end = '')
for j in range(1, i+1):
sum += ((-1) ** (j + 1)) / (2 * j - 1)
pi = 4 * sum
print(pi)
運(yùn)行結(jié)果如下:i = 10000 時(shí),π的值為:3.1414926535900345
i = 20000 時(shí),π的值為:6.283035307179826
i = 30000 時(shí),π的值為:9.42459462743631
i = 40000 時(shí),π的值為:12.566162281026036
i = 50000 時(shí),π的值為:15.707734934615797
i = 60000 時(shí),π的值為:18.849310921538994
i = 70000 時(shí),π的值為:21.990889289414817
i = 80000 時(shí),π的值為:25.13246944300482
i = 90000 時(shí),π的值為:28.27405098548388
i = 100000 時(shí),π的值為:31.415633639074002
很明顯,這個(gè)結(jié)果是錯(cuò)的。只有第一個(gè)結(jié)果是計(jì)算正確的。開(kāi)始我百思不得其解,我的循環(huán)變量感覺(jué)沒(méi)問(wèn)題啊,循環(huán)步長(zhǎng)也沒(méi)錯(cuò),計(jì)算公式也沒(méi)錯(cuò)啊。怎么會(huì)這樣?我想了想,第一個(gè)結(jié)果正確,但是從第二個(gè)結(jié)果就開(kāi)始錯(cuò),那問(wèn)題就出在循環(huán)上面。當(dāng)?shù)谝淮斡?jì)算結(jié)束時(shí),此時(shí)sum 已經(jīng)不再是0,而是有了一個(gè)值,由于sum定義在循環(huán)外部,所以下一次循環(huán)時(shí),sum將帶著第一次循環(huán)后的值進(jìn)入下一次計(jì)算,相當(dāng)于每循環(huán)一次,sum的值都在增加。相應(yīng)的,π的值也在增加,這也就解釋了為什么π的值越算越大。所以我將代碼修改如下,就是進(jìn)行了一步微調(diào):將sum的定義移到第一層for循環(huán)的內(nèi)部,i每循環(huán)一次,sum都要清零!!!
修改后的代碼如下:for i in range(10000, 100001, 10000):
print('i =', i, '時(shí),π的值為:', end = '')
# 下面這句非常重要,每次計(jì)算完后累加變量要清零!
sum = 0
for j in range(i + 1, 0, -1):
sum += ((-1) ** (j + 1)) / (2 * j - 1)
pi = 4 * sum
print(pi)
運(yùn)行結(jié)果如下:i = 10000 時(shí),π的值為:3.1414926535900345
i = 20000 時(shí),π的值為:3.1415426535898248
i = 30000 時(shí),π的值為:3.141559320256462
i = 40000 時(shí),π的值為:3.1415676535897985
i = 50000 時(shí),π的值為:3.1415726535897814
i = 60000 時(shí),π的值為:3.141575986923102
i = 70000 時(shí),π的值為:3.141578367875482
i = 80000 時(shí),π的值為:3.1415801535897496
i = 90000 時(shí),π的值為:3.1415815424786238
i = 100000 時(shí),π的值為:3.1415826535897198
這樣才對(duì)嘛!隨著 i 的增大,計(jì)算結(jié)果只能是在小范圍內(nèi)波動(dòng)。
總結(jié):循環(huán)變量是否要清零要看情況而定,但如果希望每次循環(huán)時(shí),累加變量能以一個(gè)全新的值進(jìn)入下一次循環(huán)那就要清零了。像這樣喜歡在代碼前面定義變量并賦初值的習(xí)慣,是寫(xiě)C留下的。但遇到循環(huán)時(shí)要小心,變量的作用域會(huì)在不知不覺(jué)間讓你犯錯(cuò)。
總結(jié)
以上是生活随笔為你收集整理的程序语言python循环_Python语言程序设计之一--for循环的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: securecrt是什么工具_拥有这些工
- 下一篇: mysql delete exists用