不要用for迴圈一面走訪一面移除list的元素 在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
還真有點生成式藝術的fu 身為頂級藝術細胞缺乏者,總是非常羨慕那些能隨手畫出漂亮圖畫的人。看著自己寫的程式在螢幕上展現出事先無法預期的漂亮圖案,還真是很有成就感,也不免有些興奮地想著:「嘿!看來頂級藝術細胞缺乏者有藥醫了!」
這個圖
一個關於for loop和list的小實驗 「蛤?!居然當機!」瞪著畫面凍結的螢幕,心裡一面嘀嘀咕咕,一面敲著鍵盤,企圖死馬當活馬醫,看看能不能免去重開機的麻煩。
一切的努力都是徒然,這是徹底的當機!滑鼠、鍵盤完全失去作用,只餘關電源強迫關機一條路可走。
在重開機的當兒,一面看著螢幕有沒有顯示異常的訊息,一面開始分析可能的當機原因。
抓到pygame的bug 看來這應該是pygame的bug,而不是自己寫的程式有問題。為了進一步證實這個猜測,重寫了一個單純只畫出圓球的程式,除了畫出不同位置的圓球之外,沒有任何其他作用
老爺車與我(七) 福特嘉年華1.5
我的第一部車
不知道從什麼時候開始,我都叫他老爺車
不知道為什麼,我開始寫下和他之間的一些事
老爺車與我(六) 福特嘉年華1.5
我的第一部車
不知道從什麼時候開始,我都叫他老爺車
不知道為什麼,我開始寫下和他之間的一些事
老爺車與我(五) 福特嘉年華1.5
我的第一部車
不知道從什麼時候開始,我都叫他老爺車
不知道為什麼,我開始寫下和他之間的一些事
老爺車與我(四) 福特嘉年華1.5
我的第一部車
不知道從什麼時候開始,我都叫他老爺車
不知道為什麼,我開始寫下和他之間的一些事
奇妙的愚人節 愚人節真的是一個很特別的節日。
想了老半天,實在想不出來,還有哪個節日是跟愚人節一樣特別的。
愚人節到底有什麼特別的?
老爺車與我(三) 福特嘉年華1.5
我的第一部車
不知道從什麼時候開始,我都叫他老爺車
不知道為什麼,我開始寫下和他之間的一些事
老爺車與我(二) 福特嘉年華1.5
我的第一部車
不知道從什麼時候開始,我都叫他老爺車
不知道為什麼,我開始寫下和他之間的一些事
老爺車與我(一) 福特嘉年華1.5
我的第一部車
不知道從什麼時候開始,我都叫他老爺車
不知道為什麼,我開始寫下和他之間的一些事
那個OOP裡頭class、object、instance間複雜的三角關係 天啊!怎麼這麼混亂!網路上有一卡車的文章在談class、object、instance有什麼不同;在Stack Overflow中,關於object和instance間的差異,也一再有人問起。只是啊只是,看了一大堆的討論、解釋,似乎是懂了,但又總覺得不踏實,就好像漂蕩在太空中,明明目標就在眼前,但無
鴨子打字 在Python官網的Glossary第一次看到「duck typing」這個詞的時候,真的是很疑惑:Python怎麼會跟鴨子扯得上關係?更疑惑的是,那還是隻會打字的鴨子!
來亂一下 利用L-system畫出來的fractal圖案,最大的特色就是,橫看、豎看、左看、右看,全都一個樣,所以感覺總是不自然。就拿畫樹木來說吧,即便樹枝長度可以不一樣長,但是分岔的角度卻都一樣。所以囉,乍看之下,挺像一棵樹的,但仔細看的話,卻總覺得哪裡怪怪的,太人工化了。那怎麼讓它自然一些呢?
向左轉﹡向右轉 構成L-system的,是一串由符號所構成的字串。這字串裡頭的符號,可以是字母或者是任何喜歡的鬼畫符,想要用emoji也可以,只要你喜歡,沒什麼不可以。
揮揮衣袖 唉!本來想說文青一點,瀟灑地揮揮衣袖,不帶走一片雲彩。
纏鬥Git Bash 一直以來都是靠手動的方式來進行檔案的版本管理,也就是自己複製檔案,然後改檔名,加入可以識別的編號。不過,越來越覺得,有必要用版本控制系統來幫忙,因為手動的方式實在很累人,而且當需要查找以前更動的內容時,非常沒有效率。當發現Spyder也有支援Git時,就想著:「好吧!那就試用看看好了。」
這樣寫好嗎? 看到了一段程式碼,一段乍看之下覺得挺詭異,懷疑是不是寫錯,但搞清楚之後卻拍案叫絕,冷靜下來後卻覺得這樣寫不怎麼好的程式碼。
非戰之罪 寫程式最怕碰到的,就是信心滿滿地寫好程式後,發現結果不如預期,而且完全看不出問題出在哪裡。這種慘況可以分成兩種:一種是程式很長、很複雜,想要把心機很重,躲在幽暗深處的臭蟲給抓出來,即使有功能強大的除錯工具,都不是件簡單的事;另一種是程式沒幾行,一切看起來都很清楚正常,臭蟲根本沒地方躲藏,可是結果就是
迷人的fractal圖案 解決了Spyder和turtle之間的不合後,就來畫些漂亮迷人的fractal圖案,也順便練習一下recursive function的寫法。
中秋烤肉記 「他們又在烤肉了,每年這時候都烤肉,怎麼都不會膩喔?」
龜蛛賽跑 龜兔賽跑,第一回合兔子因為太輕敵,在半路上呼呼大睡睡過頭,輸了比賽。
雖然輸了第一回合的比賽,不過兔子並沒有灰心喪志,牠記取教訓,買了個功能齊全的運動手錶來戴,睡覺前先定好鬧鐘時間,這樣就不怕睡過頭而輸了比賽。從此龜兔賽跑,兔子照樣在半路上睡覺補充體力,但再也沒有因為睡過頭而輸了比賽。
純手工做的 「老闆!你不是說這是純手工做的嗎,那怎會被驗出防腐劑?」
幫醜程式整型 「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
關於lambda function的二三事 或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
小小孩 下班後到常去的素食自助餐廳買晚餐。一打開餐廳的門,只見一個年紀約莫三、四歲的小女孩,正張著清澈靈動的一雙大眼睛,好奇地看著我。我對著小小孩笑了一笑,她看著我,害羞地笑了笑,然後一溜煙地鑽進了餐桌底下。
奮戰matplotlib Game of Life的輸出結果,也就是每代演化後universe的長相,程式要怎麼寫呢?現在有個二維list,裡頭放的是一堆0和1,要怎麼樣用西洋棋盤式的方式來顯示呢?這看來勢必得用到別人寫好的module來做,才能省時、省力又漂亮。第一個想到的,當然就是matplotlib這個科學繪圖用的mo
測試抓臭蟲 Game of Life的「核心計算」部分寫好了,短短的沒幾行,畢竟也就那麼幾條判斷規則而已,沒什麼太複雜的東東要處理。說是寫好了,但到底能不能跑、跑出來的結果對不對,那可還是在未定之天哩。
學習的技巧 在學習新事物的時候,如果能善用類比、聯想等小技巧,往往能事半功倍,但也是有可能會碰壁的。
換個角度看問題 寫程式時經常會有卡關的現象,這時候不要一味蠻幹,轉換一下看問題的角度,說不定就能過關。
經驗是一把兩面刃 在Python中,所有東西都是物件。執行程式碼a = 5,會建立5這個物件,然後給a一個reference,這個reference就是告訴a,它的值放在記憶體的哪個位置,要用時,就到那裡去拿。
看到這裡,很直覺的反應是:這不就是C裡頭的pointer嗎?!然後就沒再多想了。
跌跌撞撞製造二維list comprehension應該可說是Python的絕學之一吧。不過既然是絕學,總是會有讓人容易在運氣時一個不小心走錯經脈的地方。現在我需要一個二維的list,利用comprehension來造一個,應該是再好不過的選擇。只是這地方,就是個容易出錯的地方。
咬文嚼字幫變數取名字 寫程式時,很傷腦筋的一件事,就是變數的名稱該怎麼取。其實變數名稱隨便取,並不會影響程式的正確性,但對程式的可讀性,以及後續的維護,那可就影響深遠了。
為什麼是「隨筆」? 呼!寫文章真是比寫程式還要燒腦、燒時間。一開始是沒想到要寫這「隨筆」的,是有天程式寫著寫著,腦海中就冒出這麼個想法來,要把跟Python交往的過程寫下來。
Python程式碼的風格 在看官網文件時,看到一份文件:PEP 8 -- Style Guide for Python Code。這份文件是關於Python程式碼風格的指引和建議。
建立開發環境 讀完文件,接下來就是要動手了。第一步要先安裝Python。爬了些文,最後決定安裝Anaconda。
文件要看不要背 學程式最怕的,就是抱著書猛啃,把書背得滾瓜爛熟,真正要寫的時候,反而一行都寫不出來。