MS Small Basic第五章: Loops(迴圈)

第四章已經有寫過如何用If語句撰寫+3的遞增數列:

This process of incrementing a variable is very common in programming that programming languages usually provide an easier method of doing this. 什麼method呢? 答案是用For迴圈: ForEndFor is, in programming terms, called a loop (迴圈). It allows you to take a variable, give it an initial and an end value and let the computer increment the variable for you. Every time the computer increments the variable, it runs the statements between For and EndFor (執行For到EndFor之間的語句). 現在我就嚐試以For迴圈改寫上面If的語句:

果然得到一樣的結果, 但程式相對精簡很多, 3行就解決了:

上面例子因為有限定範圍是0到12間, 以+3遞增, 所以程式執行次數很有限, 可以預先知道, 就只有0, 3, 6, 9, 12五個. 但有時我們並無法(或是不容易)預先知道程式執行的次數, 這時候就要使用While迴圈: Whereas a For loop runs for a pre-defined number of times, the While loop runs until a given condition is true. In the example below, we’re halving a number until the result is greater than 0 (在以下範例中, 我們把一個很大的數字切切切, 切到它非常逼近我們指定的一個數):

這個程式的意思是: 以100為起點, 每次都對切(除以2), 只要除以2後的數大於1, 就繼續切, 盡可能的逼近1. 因為100這個數實在太漂亮, 容易整除, 所以改個可能會出現無窮循環小數 (infinite decimal) 的數字看看:

以1為起點開始切, 只要除以3之後的數還大於0, 就繼續切, 直到非常逼近0為止:

其實畫面還沒結束, 因為怕太長, 所以只截取部分畫面.

值得注意的是, 每個While迴圈都可以拆成一組If…Then的語句: It will be interesting to note that every While loop can be unwrapped into an If…Then statement. For instance, the program above can be rewritten as follows, without affecting the end result:

所得結果與用While迴圈寫是一樣的:

其實這並不意外, 人類的自然語言可以用很多種不同方式表達同一種意思, 雖然語用層面可能會有點小差異, 但大體來說意思是一樣的. 電腦程式語言也是這樣, 可以用不同寫法做同一件事, 只是在程式語言撰寫的哲學或美學上有些許差異. 這讓我想起中文維基百科裡對Python作為程式語言的設計哲學與定位:

“Python的設計哲學是「優雅」、「明確」、「簡單」。因此,Perl語言中「總有多種方法來做同一件事」的理念在Python開發者中通常是難以忍受的。Python開發者的哲學是「用一種方法,最好是只有一種方法來做一件事」。在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。由於這種設計觀念的差異,Python原始碼通常認為比Perl具備更好的可讀性,並且能夠支撐大規模的軟體開發。這些準則被稱為Python格言。在Python直譯器內執行 import this 可以獲得完整的列表。" (引用自中文維基百科)

“While offering choice in coding methodology, the Python philosophy rejects exuberant syntax, such as in Perl, in favor of a sparser, less-cluttered grammar. Python’s developers expressly promote a particular “culture" or ideology based on what they want the language to be, favoring language forms they see as “beautiful" , “explicit" and “simple" . As Alex Martelli put it in his Python Cookbook (2nd ed., p. 230): “To describe something as clever is NOT considered a compliment in the Python culture." Python’s philosophy rejects the Perl “there is more than one way to do it" approach to language design in favor of “there should be one—and preferably only one—obvious way to do it"."        (引用自英文維基百科)

後記(postscript):

Exuberant是重要GRE單字啊!!所以請別再說GRE單字冷僻了, 生活中無意間還是常常看到. 走筆至此(其實是走鍵盤至此), 終於把第一章到第六章, 包含接觸程式語言的動機都寫完了. 寫作順序有點跳, 因為剛好唸完Small Basic第六章(圖形Graphics)時萌生寫網誌整理重點的意念, 所以就從時間點最近的第六章寫起, 再回頭從第一章Small Basic簡介, 第二章, 第三章…慢慢寫到第五章. 第七章的內容是畫烏龜(turtle), 當初學Python的時候也有畫過烏龜. 連續三天都沉浸在Microsoft Small Basic裡面, 開始累了, 倦了, 所以接下來兩三天應該會換別的事做, 可能讀讀英文文章, 背背單字之類. 休息去吧~孩子~

廣告

About leeoxygen

吱吱喳喳,嚕嚕啦啦,嗯嗯啊啊.
本篇發表於 我的Small Basic學習記錄 並標籤為 , 。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s