Python 進階應用(第 7 章):檔案處理、例外與數值計算函式庫
檔案輸入與輸出(File I/O) 開啟檔案:open() Python 使用內建函式 open() 來開啟檔案。基本語法: file = open("filename.txt", mode) 常用的開啟模式: 模式 說明 "r" 讀取(預設),檔案不存在則出錯 "w" 寫入,會覆蓋原有內容,不存在則新建 "a" 附加寫入,在檔案末尾追加 "r+" 讀寫模式 with 語句(推薦做法) 使用 with 語句能確保檔案操作完畢後自動關閉,即使發生例外也不例外: # 寫入檔案 with open("hello.txt", "w", encoding="utf-8") as f: f.write("哈囉,Python!\n") f.write("第二行文字\n") f.write("第三行文字\n") # 離開 with 區塊後,檔案自動關閉 # 讀取整個檔案 with open("hello.txt", "r", encoding="utf-8") as f: content = f.read() print(content) # 逐行讀取(處理大型檔案的好方法) with open("hello.txt", "r", encoding="utf-8") as f: for line in f: print(line.strip()) # strip() 移除行尾的換行符 處理 CSV 檔案 CSV(逗號分隔值)是常見的資料交換格式,Python 標準函式庫提供 csv 模組: import csv # 寫入 CSV with open("students.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["姓名", "成績", "等級"]) # 標頭列 writer.writerow(["小明", 88, "B"]) writer.writerow(["小花", 95, "A"]) writer.writerow(["阿強", 72, "C"]) # 讀取 CSV with open("students.csv", "r", encoding="utf-8") as f: reader = csv.DictReader(f) # 每列讀取成字典 for row in reader: print(f"{row['姓名']} 得了 {row['成績']} 分({row['等級']})") 例外處理(Exception Handling) 程式執行時難免遇到錯誤,例如開啟不存在的檔案、除以零等。例外處理讓我們能優雅地應對這些狀況,而不是讓程式直接崩潰。 ...
Python 類別基礎(第 6 章):物件導向程式設計入門
什麼是物件導向程式設計? 在前幾章,我們撰寫的程式主要是一連串的指令或函式。隨著程式規模變大,我們需要一種更好的方式來組織「資料」和「操作資料的行為」。物件導向程式設計(Object-Oriented Programming,OOP) 就是為了解決這個問題而誕生的。 OOP 的核心概念: 概念 說明 類別(Class) 物件的藍圖或模板,定義屬性和行為 物件(Object) 根據類別建立的具體實例 屬性(Attribute) 物件擁有的資料(變數) 方法(Method) 物件能執行的動作(函式) 生活中的比喻:「貓」是一個類別(藍圖),而你家的「小花」就是一個物件(實例)。小花有名字、顏色等屬性,也會叫、會跑等方法。 定義類別 使用 class 關鍵字定義類別: # 定義一個最簡單的類別 class Dog: pass # 暫時沒有內容 # 建立物件(實例化) my_dog = Dog() print(type(my_dog)) # 輸出:<class '__main__.Dog'> __init__ 建構子與 self __init__ 是一個特殊方法,在建立物件時自動被呼叫,用來設定物件的初始狀態。self 代表「物件本身」,是每個方法的第一個參數。 class Dog: # 建構子:每次建立 Dog 物件時自動執行 def __init__(self, name, breed, age): # self.屬性名稱 = 值 → 設定實例屬性 self.name = name # 狗的名字 self.breed = breed # 狗的品種 self.age = age # 狗的年齡 # 建立兩個不同的 Dog 物件 dog1 = Dog("小白", "柴犬", 3) dog2 = Dog("大毛", "黃金獵犬", 5) # 存取屬性 print(dog1.name) # 輸出:小白 print(dog2.breed) # 輸出:黃金獵犬 實例方法 方法就是定義在類別內部的函式,第一個參數固定是 self: ...
Python 函式(第 5 章):使用者自訂函式
為什麼要使用函式? 在寫程式的過程中,我們常常會遇到需要重複執行相同邏輯的情況。如果每次都把同樣的程式碼複製貼上,不但讓程式變得冗長,日後維護時也容易出錯。函式(function) 正是解決這個問題的核心工具。 函式的主要優點: 重用性:同一段邏輯只需寫一次,可以多次呼叫。 模組化:將大問題拆分成小函式,各自負責一件事,程式碼更易讀。 維護性:修改邏輯只需改一個地方,降低出錯風險。 定義與呼叫函式 使用 def 關鍵字定義函式,格式如下: def 函式名稱(參數1, 參數2, ...): # 縮排的程式區塊 執行的動作 最簡單的例子: # 定義一個打招呼的函式 def greet(): print("哈囉,歡迎學習 Python!") # 呼叫函式 greet() # 輸出:哈囉,歡迎學習 Python! greet() # 可以重複呼叫 參數:傳入資料給函式 位置參數(Positional Arguments) 最常見的參數傳遞方式,呼叫時依照順序對應: # 定義有兩個參數的函式 def add(a, b): result = a + b print(f"{a} + {b} = {result}") add(3, 5) # 輸出:3 + 5 = 8 add(10, 20) # 輸出:10 + 20 = 30 關鍵字參數(Keyword Arguments) 呼叫時明確指定參數名稱,順序可以不同: def introduce(name, age): print(f"我叫 {name},今年 {age} 歲。") # 使用關鍵字參數,順序可以和定義時不同 introduce(age=20, name="小明") # 輸出:我叫 小明,今年 20 歲。 預設值參數(Default Values) 定義函式時可以為參數設定預設值,呼叫時若未傳入該參數,則使用預設值: ...
Python 內建型別(第 4 章):Tuple、Dictionary 與物件概念
本文對應三谷純教授《Python ゼロからはじめるプログラミング》第 4 章,介紹 Python 的核心內建資料型別。除了第 2 章學過的 list,Python 還提供 Tuple、Dictionary 與 Set,每種型別各有其適用場景。同時,本章也揭開「物件」與「方法」的概念帷幕,幫助你理解 Python「萬物皆物件」的設計哲學。 1. Tuple(元組) Tuple 和 list 非常相似——兩者都是有序的元素序列——但最大的區別在於 Tuple 建立後無法修改(不可變,immutable)。 建立 Tuple # 使用小括號建立 tuple point = (3, 7) colors = ("紅", "綠", "藍") single = (42,) # 單一元素的 tuple 必須加逗號,否則會被視為普通括號 # 也可以省略括號(但不建議,可讀性較差) coordinates = 10, 20 print(type(coordinates)) # <class 'tuple'> 存取元素 Tuple 的索引方式與 list 完全相同: colors = ("紅", "綠", "藍") print(colors[0]) # 紅 print(colors[-1]) # 藍(負索引從尾端算起) print(colors[1:3]) # ('綠', '藍')(切片) 不可變性 point = (3, 7) # point[0] = 10 # ❌ TypeError:tuple 不支援項目賦值 Tuple 解包(Unpacking) Tuple 最優雅的特性之一是可以一次性將多個值指派給多個變數: # 基本解包 x, y = (10, 20) print(x) # 10 print(y) # 20 # 交換變數值(Python 慣用寫法) a, b = 5, 8 a, b = b, a # 不需要暫存變數! print(a, b) # 8 5 # 函式回傳多個值時,實際上就是回傳 tuple def min_max(numbers): return min(numbers), max(numbers) # 回傳 tuple low, high = min_max([3, 1, 9, 4, 7]) print(f"最小值:{low},最大值:{high}") # 最小值:1,最大值:9 何時用 Tuple,何時用 List? 情況 建議型別 資料不應被修改(如座標、RGB 值) Tuple 需要動態新增或刪除元素 List 函式回傳多個值 Tuple 作為 dictionary 的鍵 Tuple(list 不可作為鍵) 一般資料集合,需要頻繁修改 List 2. Dictionary(字典) Dictionary 以**鍵值對(key-value pair)**的方式儲存資料,透過「鍵」來快速查找對應的「值」,非常適合表達具有命名屬性的資料。 ...
Python 控制流程(第 3 章):條件判斷與迴圈
本章對應《Python ゼロからはじめるプログラミング》第 3 章,帶領你從「程式只能由上往下跑」的限制中突破,學會讓程式根據條件做出判斷、重複執行任務。這正是讓程式真正「活起來」的關鍵技術。 1. 使用者輸入:input() input() 會暫停程式並等待使用者在終端機輸入內容,按下 Enter 後繼續執行。重要:input() 回傳的永遠是字串(str),若要做數值運算,必須手動轉型。 # 取得使用者輸入(回傳值為字串) name = input("請輸入你的名字:") print(f"你好,{name}!") # 轉型為整數後做運算 age_str = input("請輸入你的年齡:") age = int(age_str) # str → int print(f"再過 10 年,你將是 {age + 10} 歲。") # 一行完成輸入與轉型 height = float(input("請輸入身高(公分):")) # str → float print(f"你的身高是 {height} 公分。") 常用型別轉換函式 函式 說明 範例 int(x) 轉為整數 int("42") → 42 float(x) 轉為浮點數 float("3.14") → 3.14 str(x) 轉為字串 str(100) → "100" 2. 條件判斷:if / elif / else 條件判斷讓程式依照不同情況走不同路徑。Python 以**縮排(4 個空格)**來界定程式區塊,這是 Python 語法的核心特色。 比較運算子 運算子 意義 範例(結果) == 等於 5 == 5 → True != 不等於 3 != 4 → True < 小於 2 < 10 → True > 大於 7 > 9 → False <= 小於或等於 5 <= 5 → True >= 大於或等於 8 >= 3 → True score = int(input("輸入成績(0–100):")) if score >= 90: print("優秀!") elif score >= 70: print("良好。") elif score >= 60: print("及格。") else: print("不及格,需要加油!") elif 是 “else if” 的縮寫,可以串接任意多個。else 為所有條件都不成立時的預設分支。 ...
Python 基礎(第 2 章):資料型別、字串與清單
前言 在第 1 章中,我們認識了程式語言的基本概念、如何使用互動式 Shell,以及變數與 print() 的用法。第 2 章將更進一步,深入探索 Python 的核心資料型別——整數、浮點數、字串與清單,並學習如何透過 import 引入模組,擴充 Python 的功能。這些知識構成了幾乎所有 Python 程式的基石,熟練掌握後你將能夠處理更豐富的實際問題。 數值型別與算術運算 Python 原生支援整數(int)與浮點數(float)兩種數值型別,可以直接進行各種數學運算。 整數(int)與浮點數(float) a = 10 # int:沒有小數點 b = 3.5 # float:有小數點 c = 10.0 # float:雖然值等於整數,但有小數點故為 float print(type(a)) # <class 'int'> print(type(b)) # <class 'float'> print(type(c)) # <class 'float'> 整數與浮點數混合運算時,結果自動轉為 float: print(10 + 3.0) # 13.0 (float) print(7 * 2) # 14 (int) print(7 * 2.0) # 14.0 (float) 算術運算子 運算子 意義 範例 結果 + 加法 5 + 3 8 - 減法 10 - 4 6 * 乘法 6 * 7 42 / 除法(結果為 float) 10 / 4 2.5 // 整數除法(商,捨去小數) 10 // 4 2 % 取餘數(模除) 10 % 3 1 ** 次方(幂運算) 2 ** 8 256 # 實際應用範例:計算圓面積 radius = 5 area = 3.14159 * radius ** 2 print("半徑", radius, "的圓面積為", area) # 半徑 5 的圓面積為 78.53975 # 判斷奇偶數(餘數為 0 代表偶數) number = 17 remainder = number % 2 print(number, "是偶數?", remainder == 0) # 17 是偶數? False 整數轉型與型別轉換 x = int(3.9) # 轉為整數,截去小數部分(不四捨五入) y = float(5) # 整數轉浮點數 z = int("42") # 字串轉整數(字串內容必須是合法數字) print(x) # 3 print(y) # 5.0 print(z) # 42 字串(str):文字資料的處理 字串是 Python 中非常重要的型別,用於儲存和操作文字資料。Python 提供了豐富的字串方法,讓文字處理變得相當直觀。 ...
Python 入門(第 1 章):認識程式語言與開始使用 Python
前言 學習程式設計就像學習一門新語言——它有自己的語法規則、表達方式,以及需要一點時間才能習慣的思考邏輯。Python 是目前最適合初學者入門的程式語言之一,語法接近自然英文,且應用範圍涵蓋資料分析、人工智慧、Web 開發等多個領域。本篇文章對應三谷純教授《Python ゼロからはじめるプログラミング》第 1 章,帶你從最基礎的概念出發,一步步踏上 Python 學習之路。 什麼是程式語言? 電腦只能理解 0 和 1 組成的機器語言,直接用機器語言撰寫程式對人類來說極為困難。程式語言的出現,讓我們可以用接近人類語言的方式下達指令,再透過翻譯程式(直譯器或編譯器)將其轉換成電腦能執行的指令。 層次 說明 範例 機器語言 0/1 二進位,電腦直接執行 10110000 01100001 組合語言 機器語言的符號化表示 MOV AL, 61h 高階語言 接近人類語言,需翻譯 print("Hello") Python 屬於直譯式(interpreted)高階語言,程式碼逐行即時翻譯並執行,非常適合互動式學習。 為什麼選擇 Python? 語法簡潔:不需要分號、大括號,縮排本身就是程式結構 資源豐富:擁有龐大的標準函式庫與第三方套件生態系 跨平台:Windows、macOS、Linux 皆可使用 廣泛應用:資料科學、機器學習、自動化腳本、Web 後端 安裝 Python 環境 前往 python.org 下載最新穩定版本(建議 3.10 以上)。安裝完成後,可在終端機確認版本: python3 --version # Python 3.12.0 Windows 使用者也可透過 Microsoft Store 安裝,或使用 Anaconda 等整合環境。安裝時建議勾選「Add Python to PATH」,以便在任何目錄都能直接呼叫 python3 指令。 互動式 Shell 與腳本模式 Python 提供兩種主要使用方式,各有適合的情境。 ...
SUSE SCA SLES 16 備考指南:考試細節、難度、技巧與各主題範例題
認證概覽 SCA in SUSE Linux Enterprise Server 16(考試代碼 sca_sles16)是 SUSE 的入門級系統管理員認證,驗證 Linux 基礎知識以及以標準 sysadmin 水準管理 SLES 16 的能力——Bash、檔案系統、使用者與權限、儲存、網路、SELinux,以及透過 SSH 和 Cockpit 進行遠端管理。 細節 資訊 頒發機構 SUSE 考試代碼 sca_sles16 考試形式 題目作答(選擇題) 題數 70 題 考試時間 90 分鐘 及格分數 70% 費用 美金 $149(SUSE SCA 考試定價——報名時請再確認) 考試方式 線上考試,透過 Questionmark 遠端監考 先決條件 無 補考規定 未通過後需等待 72 小時才能重新報名 對應課程 SLE201v16: SUSE Linux Enterprise Server 16 Operations(非必修) 適合對象: 日常管理 SLES 16 的系統管理員與顧問,以及想把 SUSE 加入技能組合的 RHEL 管理員。 ...
AI 是五層蛋糕:黃仁勳的堆疊理論與資金實際流向(2026 年 5 月)
非投資建議。 這是 2026 年 5 月底 AI 產業堆疊結構與資金流向的分析。股價與估值變動快速。任何依此操作前請自行做功課。所有數據都有出處 — 請見文末 Sources 區。 黃仁勳到底說了什麼 2024–2025 年的多場 GTC 主題演講與投資人會議裡,黃仁勳一直把 AI 描述成「新運算堆疊」 — 各層必須一起發展、任一層才有意義。他在不同場合用過「三層蛋糕」(晶片、系統、軟體)、「AI 工廠」(多個子系統)、或單純「正在一層一層蓋出來的新產業」這些說法。 業界分析師把這些說法整理成現在大部分機構研究在用的 AI 五層堆疊: ┌─────────────────────────────────────┐ │ 5. AI 應用 / 代理人 │ ← 誰付錢 ├─────────────────────────────────────┤ │ 4. AI 平台 / 中介軟體 │ ← 開發者的鏟子與鋤頭 ├─────────────────────────────────────┤ │ 3. Foundation Model 基礎模型 │ ← 「引擎」 ├─────────────────────────────────────┤ │ 2. 運算基礎設施 / 雲 │ ← 資料中心、電力、網路 ├─────────────────────────────────────┤ │ 1. 矽 / 晶片 │ ← 物理基礎 └─────────────────────────────────────┘ 黃仁勳整個重點:上層若沒有下層就不可能存在。沒有 Blackwell 或 Rubin GPU(Layer 1)、沒有數 GW 的資料中心(Layer 2),就訓練不出 frontier model(Layer 3),也就做不出 Claude Code 那種能用的 agent(Layer 5)。把任一層當成全部故事的投資都是錯誤定價。 ...
用 Ansible、OpenSCAP 與 kube-bench 自動化 CIS 合規
為什麼要自動化 一台伺服器用手強化沒問題。整批伺服器用手強化就是退化發生的方式 — 有人加了一台主機、有人 patch 一個服務順便重置了 sysctl、有人「為了測試一下」就把某個設定關掉。一季過後稽核員找出來,你也說不清楚什麼時候壞的。 前兩篇走過實際的控制項: CIS RHEL 9 基準 Level 1 CIS Kubernetes Benchmark Level 1 本文是維運層:怎麼把那些控制項自動套到每台主機跟每個叢集上、偵測漂移、把發現的問題送到 dev 團隊已經在用的工單系統。 目標 pipeline: ┌──────────────┐ ┌────────────────┐ ┌──────────────┐ ┌──────────┐ │ Ansible role │ → │ OpenSCAP 掃描 │ → │ HTML + ARF │ → │ 儀表板 │ │ 套用 CIS │ │ kube-bench Job │ │ XCCDF 結果 │ │ 工單 │ └──────────────┘ └────────────────┘ └──────────────┘ └──────────┘ 每週漂移調和 每天每台主機 GRC 佐證 SecOps 每個叢集 檔案庫 佇列 Part 1:RHEL Level 1 的 Ansible Role 不用從零寫。Red Hat 維護的 ansible-lockdown/RHEL9-CIS role 把每一條 Level 1(跟 Level 2)建議實作成 Ansible task,每個 task 都有變數可以開關。安裝: ...