讀懂程式碼 (Introduction to Computer Science and Programming Using Python)


解讀的能力在於,對問題正確理解,對答案的方向有一定的掌握,讀他人的程式碼,等於是看別人直播拆解謎題的經過,當然有時候看不懂還是會讓人想轉臺就是了。



這堂課強調的三個能力之一,就是要讀的懂程式碼,無論是自己或他人寫的。所以有些練習是列出一段代碼,請你寫出這段代碼執行後的結果為何。

其實這對初學者(我)來講不太容易,因為除了腦中一邊了解代碼,知道代碼的結果,還得同時推敲為什麼要採用這種寫法。讀代碼等於是觀看別人的解題過程,而針對同一個問題,可能每個人的解法都不相同,也可能存在著數百種寫法,卻能得到同一種結果。

因此,在真正開始讀之前,應該要先了解,問題是什麼?先稍微想想可以怎麼解決?然後再開始讀代碼。這時候如果真的一樣都看不懂時,可以怎麼做?在這裡分享討論區內一個對初學者十分有用的建議,那就是逐步將代碼翻譯成自然語言。
下段代碼為課堂上的作業:

問題:求出最接近x的平方根

原始代碼如下:

x = 25
epsilon = 0.01
step = 0.1
guess = 0.0

while guess <= x:
    if abs(guess**2 -x) < epsilon:
        break
    else:
        guess += step

if abs(guess**2 - x) >= epsilon:
    print('failed')
else:
    print('succeeded: ' + str(guess))


用上述代碼當例子

x = 某數字
guess = 猜測某數字的平方根

當猜測平方根比某數字(欲求得其平方根的數字)小時
如果猜測平方根的平方和某數字差異很小時(接近答案)
停止
否則
把猜測的數字變大(繼續猜)

如果猜測平方和某數字差異很大時
失敗
否則
成功,並寫出猜測平方根


用自然語言寫出後,在總結一次自己對於這段代碼的解題過程想法如下:

還沒猜到時,持續猜。快猜到時就停止。

這表面上看起來很直覺,但實際上細想下來,得先跟電腦講,什麼情況下是猜到,什麼是還沒猜到。

由於要求取得某數的平方根,而某數的平方根不可能大於某數,但是有可能小於等於某數,如某數等於1的情況,因此還沒猜到最保險的條件就是猜測的平方根小於等於某數。只要符合這個條件,就繼續猜。

但一直執行下去,就會開始有一大堆猜測的數字,那要怎麼決定這些數字就是欲求的該平方根?所以這裡也要列出,什麼情況下等於猜到了。

那就是猜測的數字的平方跟某數(欲求得平方根的數字)之間的差很小時。意思就是猜的平方根的平方應該要等於某數。

寫到這裡,大概也就理解了整段代碼,與為何要這樣寫。真是有趣。







沒有留言:

張貼留言