解讀的能力在於,對問題正確理解,對答案的方向有一定的掌握,讀他人的程式碼,等於是看別人直播拆解謎題的經過,當然有時候看不懂還是會讓人想轉臺就是了。
這堂課強調的三個能力之一,就是要讀的懂程式碼,無論是自己或他人寫的。所以有些練習是列出一段代碼,請你寫出這段代碼執行後的結果為何。
其實這對初學者(我)來講不太容易,因為除了腦中一邊了解代碼,知道代碼的結果,還得同時推敲為什麼要採用這種寫法。讀代碼等於是觀看別人的解題過程,而針對同一個問題,可能每個人的解法都不相同,也可能存在著數百種寫法,卻能得到同一種結果。
因此,在真正開始讀之前,應該要先了解,問題是什麼?先稍微想想可以怎麼解決?然後再開始讀代碼。這時候如果真的一樣都看不懂時,可以怎麼做?在這裡分享討論區內一個對初學者十分有用的建議,那就是逐步將代碼翻譯成自然語言。
下段代碼為課堂上的作業:
問題:求出最接近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的情況,因此還沒猜到最保險的條件就是猜測的平方根小於等於某數。只要符合這個條件,就繼續猜。
但一直執行下去,就會開始有一大堆猜測的數字,那要怎麼決定這些數字就是欲求的該平方根?所以這裡也要列出,什麼情況下等於猜到了。
那就是猜測的數字的平方跟某數(欲求得平方根的數字)之間的差很小時。意思就是猜的平方根的平方應該要等於某數。
寫到這裡,大概也就理解了整段代碼,與為何要這樣寫。真是有趣。
沒有留言:
張貼留言