# -*- coding: utf-8 -*- """114暑期AI研習營.ipynb Automatically generated by Colab. Original file is located at https://colab.research.google.com/drive/1ZnTHdDyM9rxXjbD1a_0SsUUMhgNkjh1Z  # **Python程式設計** **程榮祥 教授** **國立勤益科技大學人工智慧應用工程系** **Python 程式語言的優點** * AI 時代的主流語言:最常用於人工智慧、機器學習、資料科學 * 語法簡單易學:比 C/C++ 更接近人類語言,入門門檻低 * 應用範圍廣泛:可用於 AI、網頁、爬蟲、遊戲、機器人、IoT 等 * 就業優勢明確:AI 公司與工程師職缺常要求熟悉 Python * 全球通用資源豐:開源社群大、教材範例多,新手學習快速 **主要授課單元** 1. 基礎資料型態與基本運算 2. 資料的輸入和輸出 3. 結構化程式設計 4. 迴圈控制結構 5. 資料結構:List、Tuple與Dictionary的操作與應用 6. 函式的定義與呼叫 7. 檔案讀寫與CSV操作 8. 類別與物件導向程式設計 9. 網頁資料擷取 10. 資料視覺化 **1. 基礎資料型態與基本運算** 在開始撰寫任何程式前,必須先瞭解資料在程式中的表示方式。不同的資料型態能讓電腦知道我們在處理什麼樣的資訊,例如數字、文字或是布林值。這些型態與運算是所有程式邏輯的基礎,無論是簡單的計算還是複雜的AI推論都會用到。 Python的常用資料型態如下: * 數字:整數(int)、浮點數(float)、布林數(bool) * 文字:字串(string) 基本運算包含加減乘除、關係運算子與邏輯運算子 * 算術運算子:+, -, *, /, //, %, ** * 關係運算子:>, <, ==, >=, <=, != * 邏輯運算子:and, or, not 上述資料型態可與變數搭配使用,可用 type() 函式來檢查變數型態 Python 的第一個入門範例 """ print("Hello Python!") # 輸出歡迎訊息 """變數與基本資料型態""" hp = 100 # 整數變數 pi = 3.14 #浮點數變數 name = "All Might" # 字串變數 print(hp) print(pi) print(name) hp = 100 # 整數變數 pi = 3.5 #浮點數變數 name = "綠谷" # 字串變數 is_pass = True # 布林變數 print("hp:", hp, type(hp)) # ➜ 100 int print("pi:", pi, type(pi).__name__) # ➜ 3.14 float, 加上.__name__屬性後,會顯示簡潔的資料型別名稱 print("name:", name) print("is_pass:", is_pass) """運算子介紹""" a = 5 b = 3 print("加法運算: ", a + b) print("比較運算: ", a > b) print("邏輯運算: ", (a > 2) and (b < 5)) """**2. 資料的輸入和輸出** 與使用者互動是每個程式的基本功能之一,從鍵盤讀入資料、從螢幕輸出結果,是實作互動功能不可或缺的一步。掌握輸入與輸出技巧,能讓你的程式變得更實用與友善。 Python 使用 input() 讀取文字輸入,使用 print() 顯示結果。也可以使用格式化字串來讓輸出的內容更清晰,例如使用**%**運算子、**format()**函数或f-string等。 """ name = input("請輸入你的名字(例如Doraemon):") # Doraemon score = int(input("中午的便當好吃嗎?(0~10):")) print(f"{name} 給的分數是 {score} 分") # f-string 的使用範例, 使用 {} 括號包住變數 """格式化可以讓輸出的文字更加美觀,提高可讀性,讓輸出/入的資料更容易閱讀和理解。 * 用input()輸入的字串,可以使用int(),float()函式將字串轉換為整數或浮點數 * 使用命名引數可以讓程式碼更具可讀性,同時也可以減少出錯機會 **3. 結構化程式設計** 結構化程式設計是一種撰寫程式的基本原則,主要目的在提高程式碼的可讀性、可靠性和可維護性。通過將程式碼分解為小型、可管理的單元,例如模組化、流程控制和資料結構等方式,可以更容易地理解和維護程式碼,有助於減少錯誤和改進程式碼的可靠性。 Python的選擇結構主要是if敘述構成,可根據不同的條件執行不同的程式碼。基本的if敘述語法為: ``` if condition: code to execute ``` if經常和關係運算、邏輯運算搭配使用,再根據測試的結果決定程式的執行流程,例如: """ score = 85 if score >= 60: # 關係運算子:>, <, ==, >=, <=, != print("及格") else: print("不及格") answer = input("老師帥嗎?(yes/no):") if answer == "yes": #關係運算子:>, <, ==, >=, <=, != print("你真有眼光,+10 分!") else: print("請誠實作答!") """**4. 迴圈控制結構(Loops)** 當程式需要重複執行相同動作,例如計算總和或列印多筆資料時,經常會使用迴圈結構。迴圈可以有效率地處理大量資料,並大幅簡化程式碼。 Python 提供 for 迴圈與 while 迴圈,前者適合處理固定次數的重複,後者則適合根據條件執行。也可使用 break 與 continue 控制流程。 for迴圈 * 適合用於已知「重複次數」的情況 * 常見語法 ➔ for i in range(...): """ for i in range(5): # range(5)會產生一個0到4的整數序列 print(i) for i in range(5): # 會產生一個0到4的整數序列 print(i, end=' ') # 指定end參數為空格(預設值為換行符號) total = 0 #建立一個名為total的變數,初始值設為0,用來儲存總和 for i in range(1, 6): # 使用for迴圈讓變數i依序取值1到5 total += i print("1 加到 5 的總和為:", total) """while迴圈 * 適合用於需「依條件反覆執行」的情況(不確定要執行幾次,只知道何時停止) * 常見語法 ➔ while 條件: """ i = 0 while i < 5: print(i) i += 1 # i=i+1, 但如果沒有執行i+1會怎麼樣? """**5. 資料結構:List、Tuple與Dictionary的操作與應用** 資料結構是程式設計中不可或缺的工具,能協助我們以更有效率的方式管理、儲存與查詢資料。選擇合適的資料結構會讓程式更簡潔也更快。 Python 提供多種資料結構,其中 list 可用於儲存可變動的資料集合,tuple 為不可變集合,而 dictionary 則透過鍵值對儲存與查找資料,適用於多種應用場景如學生名單與成績查詢等。 **List**是一種可變序列,可用來存儲一系列有序的元素。list使用方括號 [ ] 儲存元素,多個元素之間用"逗號,"分隔。例如:[1, 2, 3, 4, 5] 是一個包含五個整數的 list。list 中的元素可以是不同的資料型別,也可以是其它的list,可以進行增、刪、改、查等操作。 在Python中,與C++的Array最接近的資料型態應該是List(列表)。List是一種在Python中經常使用的資料型態,它可以儲存一系列的元素,並且可以任意增加、刪除或修改其中的元素,是一種可變的序列資料類型。 與C++的Array不同的是,Python的List可以儲存任意類型的元素,不需要事先指定元素的型態和大小,因此在使用上比C++的Array更加靈活。 """ fruits = ["banana", "apple", "cherry"] # 建立一個字串串列 fruits.sort() # 對串列元素排序(按字母順序) #fruits.append("orange") for i in fruits: #搭配 for 迴圈可以一一處理串列中的元素 print(i) # 逐一印出排序後的水果名稱 """**Tuple**是不可變的序列,使用 () 括號定義""" t1 = (1, 3, 5) print("t1 =", *t1) #星號(*)是unpacking運算子,使用 *t1 代表把tuple的元素「逐一取出」 t1 = (1, 3, 5) print("t1[0] =", t1[0]) # 存取第一個元素 print("t1[1] =", t1[1]) print("t1[2] =", t1[2]) """**Dictionary**是一種key-value的資料結構""" person = ("Tom", 18) # tuple:儲存一組固定且不改變的資料,例如姓名與年齡 scores = {"Amy": 90, "Ben": 85} # Dict:儲存對應關係資料(如名字➜分數),可以新增、刪除、變更 print(person[0], "的年齡:", person[1]) # 取出person中的姓名與年齡並輸出 print("Ben 的分數:", scores["Ben"]) # 查詢Ben的分數並輸出 """**8. 函式的定義與呼叫** 當程式變長、功能變多時,重複的程式碼容易出錯也難維護。學會使用函式(function),能把程式分段管理,讓程式更簡潔、好讀,也方便重複使用,是進階程式設計的基礎能力。 Python以 def 定義函式,支援參數傳遞與回傳值設定,可透過變數範疇控制函式內外的資料存取。 定義並呼叫一個簡單的函式 """ def say_hello(): print("Hello, Python!") say_hello() """函式含有參數""" def greet(name): print("Hello,", name) greet("小傑") """函式傳回值""" def add(x, y): return x + y result = add(3, 5) print("加總結果為", result) """**7. 檔案讀寫與 CSV 操作** 在實務應用中,常需讀取外部檔案或儲存結果。掌握檔案處理能力可應用於資料記錄、報表輸出或讀取開放資料等。 Python提供 open() 進行文字檔讀寫,搭配 csv 模組可處理表格資料,適用於常見的CSV格式。 """ with open("hello.txt", "w", encoding="utf-8") as f: f.write("Hello World") """**with是做什麼的?** 自動處理資源的初始化與釋放,適用於「**暫時使用某個資源**」的情境,例如: * 檔案操作:使用完後自動關閉檔案(免手動 close()) * 網路連線:資料傳輸完成後自動中斷連線 * 資料庫連線:自動進行 commit 或 rollback,確保資料一致性 **簡單的檔案操作** 1. 建立一個名為 sample.txt 的文字檔,並寫入三行資料 2. 提供下載功能,讓使用者可以將文字檔下載到自己的電腦 """ from google.colab import files # 建立並寫入文字檔 with open("sample.txt", "w", encoding="utf-8") as f: f.write("告白氣球\n") f.write("明明就\n") f.write("勤益科大人工智慧應用工程系\n") files.download("sample.txt") """**進階的檔案操作** 1. 建立一個名為 sample.txt 的文字檔,並寫入三行資料 2. 讀取 sample.txt 的檔案內容,逐行顯示在螢幕上 3. 提供下載功能,讓使用者可以將文字檔下載到自己的電腦 """ from google.colab import files # 匯入 Colab 檔案操作工具 # 建立並寫入文字檔 with open("sample.txt", "w", encoding="utf-8") as f: f.write("告白氣球\n") f.write("明明就\n") f.write("勤益科大人工智慧應用工程系\n") # 顯示訊息 print("sample.txt 已建立並寫入完成!") # 讀取並顯示文字檔內容 print("\n📄 檔案內容如下:") with open("sample.txt", "r", encoding="utf-8") as f: for line in f: print(line.strip()) # 去除行尾換行符號 # 提供下載功能(可選) files.download("sample.txt") """資料科學分析實例:台灣空氣品質資料分析實作 主題說明:使用政府開放的 PM2.5 空氣品質資料,進行資料清洗、分析與視覺化。 1. 至政府開放資料平台下載csv資料(例如aqx_p_432.csv): ➜ https://data.gov.tw/dataset/40448 2. 清單項目:觀察資料準備進行資料分析 """ # 匯入常用套件 import pandas as pd #載入pandas套件,並簡寫為pd # pandas是Python中用來處理表格資料(例如Excel表格或CSV檔案)的工具 # 上傳資料檔案(點選執行後手動選檔) from google.colab import files #使用Colab內建工具,上傳CSV檔 uploaded = files.upload() # 取得上傳檔案的檔名 filename = list(uploaded.keys())[0] df = pd.read_csv(filename, encoding='utf-8') #使用pandas讀取CSV檔案 # 顯示前幾筆資料 df.head() """**8. 類別與物件導向程式設計** 透過類別可封裝資料與操作行為,提升程式擴充性與可讀性。適用於模擬現實物件、模組化設計與系統開發等情境。 Python使用 class 定義類別,__init__() 作為建構式建立初始屬性,並可設計成員方法(method)進行功能操作。 定義一個簡單的class並建立物件 """ class Student: def __init__(self, name, score): self.name = name self.score = score def show(self): print(f"{self.name} 的成績是 {self.score} 分") s = Student("Amy", 92) s.show() class Player: def __init__(self, name, age): self.name = name self.age = age player = Player("Gon Freecss", 12) print(player.name, player.age) # 輸出:Gon Freecss, 12 """以"HunterXHunter獵人-貪婪之島"為例,建位玩家和管理者2種類別並產生物件""" class Player: def __init__(self, name, age): self.name = name self.age = age def self_introduction(self): print(f"My name is {self.name} and I am {self.age} years old") class Administrator: def greeting(self, player_name): print(f"Welcome to the GREEDY Island! {player_name}.") player = Player("Gon Freecss", 12) player.self_introduction() admin = Administrator() admin.greeting(player.name) """**9. 網頁資料擷取** 網頁上有大量公開資料可供應用,學習資料擷取技術有助於自動化蒐集資訊、建立即時數據來源與進行後續分析。 Python可使用 requests 發送HTTP請求,搭配 BeautifulSoup 解析HTML結構,快速擷取所需欄位。 """ import requests, re url = "https://www.ncut.edu.tw/p/412-1000-250.php" html = requests.get(url).text titles = re.findall(r"