為什麼 print() 是最誠實的朋友?

當我們寫程式久了,自然就會慢慢發現一件事,寫到你越來越迷惘、越來越不確定發生什麼事時,print() 永遠不會騙你。 結果不會安慰你、更不會鼓勵你、也不會跟你說「你已經很努力了」。它只會把事實攤在你眼前。 而且毫不修飾。 很多新手在程式出錯時,第一個反應是: 「是不是 Python 壞了?」「是不是我電腦有問題?」「是不是這個題目太難了?」 但通常只是,你現在不知道電腦跑程式到哪裡了 所以這時候,print() 反而就像一個願意老實告訴你真相的朋友啦你以為變數裡是 10,結果 print 出來卻是 0 的時候 你以為 if 有進去 Yes 區,但 print 出來卻完全沒出現 你以為 list 裡有資料,print 出來發現它根本是空的 print 出來的時候終於知道事實就是我們有地方寫錯了所以雖然 print()…

Continue Reading

Python 的縮排為什麼這麼重要,為什麼會讓人暴躁?

如果你已經開始學 Python 了,那你大概一定經歷過這種情緒: 「我到底哪裡沒縮?」「怎麼又錯?」「明明看起來都一樣,為什麼它不跑?」 縮排,大概是所有 Python 初學者共同的心靈創傷。 為什麼這麼小的東西會惹怒我們?以 Python 世界來舉例,縮排不是裝飾,是語法。所以我們在別的語言看到這樣的程式碼: if x > 5:print("Hi")頂多覺得醜。但 Python 直接報你錯,毫不留情: IndentationError: expected an indented block它甚至明明知道你想做什麼,卻依然不替你補上縮排。 原因很簡單:Python 比你還在意秩序感。為什麼 Python 要這麼固執?因為 Python 的設計理念是「讓程式碼可讀性更高」 也就是說,它要強迫大家寫出 整齊、乾淨、像白紙一樣平靜的程式碼所以問題就出在我們寫的時候根本沒有這麼機械 不管是多一次縮排、或是少一次,整個程式邏輯就會完全不一樣了。所以 Python 會透過縮排逼你誠實,你的…

Continue Reading

程式不是寫給電腦看的,是寫給未來的自己

一開始學 Python 的時候,我都以為程式是「寫給電腦看的」。但寫久了之後才發現,其實電腦根本不在乎我寫的 code 長怎樣,只要能執行他就會運作。真正會被寫法折磨的,都是我自己。 尤其是「未來看到這個 code 的自己」 還記得剛開始的時候,打出這樣的東西 a=10b=20c=a+bprint(c)最一開始,就是很直覺得用abc當變數,當下可能也覺得反正能跑就好。可是一週後,再回頭看到自己寫的東西時,很可能會陷入一種奇怪的感覺: 「嗯… 這誰寫的?」「a 跟 b 是什麼?代表什麼?」「我為什麼會用這個名字?」「啊…原來這個 a 是餅乾的數量,c 是 total…」硬是把整個邏輯又想了一次。 這時候才慢慢發現,程式不是寫給電腦看的 ——是讓「未來的自己」看懂現在的我在想什麼的。即便電腦雖然非常聰明,但它完全不會干涉我們的邏輯。名字就算亂取?它也不會搭理你。就算縮排亂七八糟,它也是可以跑一跑。邏輯寫得彎彎繞繞?它依然可以跑完他,只是可能會比較久。 所以唯一會被影響的,是未來重新要修改的人。而大多數時間,那個人就是我們自己。也可以想像,寫程式就像寫日記一樣。不是寫給現在的我們,而是留下紀錄給未來的自己。 好的變數命名、好的排版,是未來一眼望去可以找到想要的重點。好的註解,可以提醒自己這裡到底在想什麼。 剛開始可能會覺得,多花了一點時間整理,但一次一次累積後,會突然發現自己寫程式的速度變快了、邏輯變清楚了甚至 Bug 都很好解決了。所以下次在寫程式時,你也可以悄悄問自己一個問題: 「三天後再回來看這段 code,我看得懂嗎?」 如果答案是不太行,那你現在就可以幫未來的你多做一點點, 取好名字、排好結構、清楚註解。…

Continue Reading

🐞 Bug 是怎麼來的?

幾乎每個學寫程式的人,都一定問過自己一句話:「我明明照著打,為什麼還是錯?」 通常你很認真地寫完一段程式,按下執行,信心滿滿地期待結果,結果螢幕c地回你一句 —— Error。 這時候 Bug 出現了。 但有趣的是,Bug 很少是什麼高深莫測的怪物,大多時候,它只是一些非常「日常」的小意外。 常出現的問題少打一個括號 )多打一個空格變數名稱前後不一致(name / Name / names)忘記冒號 :或是,你以為你寫對了,但其實電腦完全照字面理解Bug 從來不是因為我們不夠聰明,而是 Coding 的世界真的非常誠實它不懂「差不多」,只懂「一模一樣」。 因為身為人類,我們會自主思考,補齊每個人說的規則當中缺少的意思,但電腦只會機械地照規則執行。所以我與 Bug 就會有類似下面的劇情:我:「我以為你會懂。」電腦說:「但你沒有叫我這樣做。」有時候 Bug 其實很像一面鏡子。它讓你回頭檢查自己的邏輯、重新釐清思路,也讓你發現:原來問題不在語法,而在理解。 當你終於找到那一個少掉的符號、拼錯的字母,順利跑出結果的那一刻,那種成就感,真的是超級滿足的! 所以在 Debug 的過程,我們會漸漸發現,其實 Bug 不是敵人,而是老師!Bug…

Continue Reading

讀檔(七):從多種檔案中抓取與整合資料

透過前幾週的分享,我們已經學會了 Python 中三種最常見的讀檔方式:txt:純文字檔csv:表格型資料json:巢狀結構資料在真實的工作或專案中,我們常常需要同時處理不同格式的資料,然後把它們「整合」成一份完整報告。今天就讓我們一起實際整合看看吧~ 實戰情境:整合學生成績資料假設我們現在在做一個「學生成績整合系統」。有三個不同來源的檔案: students.txt:學生名單score.csv:各科分數meta.json:課程資訊students.txtJerrySallyMomoscore.csvname,math,englishJerry,95,88Sally,87,90Momo,100,93meta.json{        "course": "stanCode SC101",        "teacher": "Jerry Liao",        "semester": "2025 Spring"}以上是我們目前有的檔案及內容Step 1:讀取文字檔with open('students.txt', 'r') as f:     …

Continue Reading

讀檔(六):解析 JSON 檔與巢狀資料結構

前面幾篇我們學會了如何用 Python 讀取 .txt 與 .csv 檔案,知道了文字資料與表格資料的處理方法。 但在 AI、資料分析、網站開發、或串接 API(應用程式介面)時,最常遇到的檔案格式其實是—— .json。 今天就讓我們一起學習,如何用 Python 讀取、理解並操作這種「巢狀結構資料」吧!🌳 什麼是 JSON?JSON(JavaScript Object Notation)是一種用來儲存與交換資料的格式。它長得有點像 Python 的 Dictionary(字典),也常被用在網路 API、AI 模型設定檔、甚至各種應用程式的資料儲存中。 看起來像這樣👇{        "course": "stanCode SC001", …

Continue Reading

讀檔(五):處理 CSV 檔與資料分析的第一步

前面幾篇我們學會了如何用 Python 讀取文字檔、寫入與追加內容等等但一般我們在做資料分析時,我們使用的檔案通常不是 .txt而是 .csv.csv 是一種以逗號分隔資料的「表格檔案」。 今天就讓我們來看看怎麼用 Python 處理 CSV 檔案這可是邁向資料分析、AI、商業應用的第一步 🚀 什麼是 CSV?CSV(Comma-Separated Values)是最常見的資料格式之一。每一行代表一筆資料,每一格用逗號分開我們有個檔案 score.csv,顯示如下👇name,scoreJerry,95Sally,88Momo,100這看起來很類似 Excel 的表格,只是少了漂亮的格線那為什麼不用 Excel 就好,因為我們在讀取檔案的時候,經常會發現格式出問題,打開後要自己調整很多地方,但 .csv 它可以完整且正常的被 Python、Excel、Google Sheets、R、SQL…等各種工具輕鬆讀取!首先我們來用最基本的 open 系列讀取 CSVwith open('score.csv', 'r') as…

Continue Reading

讀檔(四):寫入與追加資料 write() & append()

前幾篇我們都在學「讀檔」,讓程式能夠從電腦裡拿出資料來使用。 那今天,換我們反過來操作——讓程式「把資料寫回去」吧! 這篇我們要介紹兩個超常用的方法:👉 write()(寫入)和 append()(追加) 為什麼要「寫檔」?「寫檔」就是讓我們的程式在電腦裡建立或修改一個檔案。當我們想要把執行的結果、數據分析或任意資料都儲存下來時,就是使用寫入功能的時候了! 寫入的基本語法和讀檔幾乎一樣,只是「模式」從 'r' 改成 'w' 而已with open('檔案名稱', 'w') as f:        f.write('要寫進去的內容')這樣,Python 就會幫我們把文字寫入指定的檔案裡,使用的檔案名稱如果原本不存在,它會幫忙自動建立新檔案,然後把資料寫進去,反之如果檔案已經存在,那原本的內容就會被新資料覆蓋過去。with open('SC001.txt', 'w') as f:        f.write("This is StanCode's…

Continue Reading

讀檔(三):with open() 自動幫你關檔!

上一篇我們學會了用 open() 來讀取檔案,可是每次打開後都要記得 close(),是不是有點麻煩? 而且!如果我們跑 Code 跑到一半,發生錯誤或者是強制關閉,close() 的關閉檔案可能根本沒有執行,結果檔案就會一直保持開啟狀態,可能會導致「檔案被鎖住」、「資料沒存好」或「記憶體被占用」等等的問題。 所以為了解決這個狀況,今天來討論 Python 中另一個更聰明的方法吧!那就是 with open() 為什麼要用 with open()?with open() 是 Python 中專門用來「自動管理檔案資源」的絕招,只要我們用 with open() 打開檔案,程式會在使用完後自動幫我們把檔案關閉,所以即使中途發生錯誤,他也會自動乖乖關上檔案,非常安全!with open('檔案名稱', '模式') as f:# 在這裡操作檔案       …

Continue Reading

讀檔(二):讀檔的基本語法 open()

上一篇我們知道「讀檔」其實就是程式把資料從硬碟載入記憶體(RAM)裡,讓我們能更快地操作資料。那這一篇,我們來看看第一種讀檔的方法「 open() 」吧! open() 是什麼?open() 是 Python 內建的「開啟檔案」工具。就像你雙擊電腦裡的檔案一樣,只是這次不是用滑鼠點,而是讓程式幫你打開! 基本語法是這樣file = open('檔案名稱', '模式')其中有兩個重要參數:'檔案名稱':你要開啟的檔案名,例如 'SC001.txt'。'模式':要以什麼方式開啟它。⚙️ 模式(Mode)有哪些? 'r' read 讀取檔案(預設值)'w' write 覆蓋舊內容寫入新資料'a' append 追加新資料到檔尾'rb' / 'wb' binary mode 讀/寫二進位檔,如圖片、音訊 假設我們有一個 SC001.txt 檔案,內容如下: This is…

Continue Reading
Close Menu