# 2024-06-15 中央大學Python基礎班 上課筆記 ## 2024-06-29 #### 學生成績管理系統 ```python= # 存放全部成績 # 存放全部成績 grades = {} def student_system(): load() while True: print('=====================================================') print('= 學生成績股臉系統') print('=') print('= 版本: 0.01') print('= 開發者: Aaron') print('=====================================================') print('1. 管理學生成績') print('2. 查詢學生成績') print('3. 結束') user_input = input('=> ') if user_input == '1': management() elif user_input == '2': query() elif user_input == '3': print('掰掰') break else: print('輸入錯誤,請重新輸入') def management(): while True: print('--------------------------') print('管理學生成績') print('--------------------------') print('1. 新增資料') print('2. 刪除資料') print('3. 回主選單') user_input = input('=> ') if user_input == '1': add_grade() elif user_input == '2': del_grade() elif user_input == '3': break else: print('輸入錯誤,請重新輸入') def query(): while True: print('--------------------------') print('查詢學生成績') print('--------------------------') print('1. 查詢全部資料') print('2. 依姓名查詢資料') print('3. 回主選單') user_input = input('=> ') if user_input == '1': query_all() elif user_input == '2': query_by_name() elif user_input == '3': break else: print('輸入錯誤,請重新輸入') # 新增成績 def add_grade(): name = input('請輸入學生姓名: ') no = input('請輸入學號: ') chinese = input('請輸入國文成績: ') english = input('請輸入英文成績: ') math = input('請輸入數學成績: ') grades[name] = [no, chinese, english, math] save() # 測試用 print(grades) def del_grade(): user_input = input('請輸入學生姓名: ') if user_input in grades: del grades[user_input] else: print('查無資料') save() def save(): with open('student_system.csv', 'w', encoding='utf-8') as file: for k, v in grades.items(): file.write(f'{k},{v[0]},{v[1]},{v[2]},{v[3]}\n') def load(): with open('student_system.csv', 'r', encoding='utf-8') as file: for line in file: print(line) line = line.split(',') grades[line[0]] = [line[1], line[2], line[3], line[4].strip()] # 測試用 print(grades) def query_all(): for k, v in grades.items(): print(f'姓名: {k}: 學號: {v[0]}, 國文: {v[1]}, 英文: {v[2]}, 數學: {v[3]}') def query_by_name(): user_input = input('請輸入姓名: ') for k, v in grades.items(): if user_input in k: print(f'姓名: {k}: 學號: {v[0]}, 國文: {v[1]}, 英文: {v[2]}, 數學: {v[3]}') student_system() ``` #### 不定長度參數2 ```python= def show_me(**argv): print(argv) show_me(name='aaron', age=18, phone='0987654321') ``` #### 不定長度參數 ```python= # def plus(a, b): # return a + b # def plus(a, b, c): # return a + b + c def plus(*argv, ok): print(argv) print(ok) # total = 0 # for i in argv: # total += i # return total # print( plus(1) ) # print( plus(1, 2) ) # print( plus(1, 2, 3, 4, 5) ) plus(1, 2, 3, ok='ok') ``` #### dict ```python= a = {'a': 99, 77: 88, 'abc': 'Hello', True: 7777, 1: 6666, False: 5555, 0: 4444, (2, 3): 2222} print(a['a']) # 讀取 print(a['abc']) a[77] = 88888 # 修改 a[9] = 9 # 新增 del a[77] # 刪除 print(a[(2, 3)]) print(a) ``` #### 模組 my_mod.py ```python= def my_q(x): if x % 2 == 0: return True else: return False a = [12, 37, 55, 98] if __name__ == '__main__': print( list(filter(my_q, a)) ) print('我是模組:', __name__) ``` ncu.py ```python= # import my_mod # print('模組呼叫:', my_mod.my_q(89)) # print('模組變數:', my_mod.a) from my_mod import my_q as abc print(abc(88)) # print(__name__) import random as r r.randint(0, 10) ``` #### 過濾偶數 ```python= def my_q(x): if x % 2 == 0: return True else: return False a = [12, 37, 55, 98] print( list(filter(my_q, a)) ) ``` #### filter #### 高階函式 ```python= # 高階函式 def dosomething(f, a, b): return f(a, b) result = dosomething((lambda i, j: i + j), 3, 4) # 加法運算 print(result) result = dosomething((lambda i, j: i * j), 3, 4) print(result) a = [23, 65, 87, 45, 99] # result = [] # for i in a: # if i < 60: # result.append(i) # print(result) result = list(filter((lambda x: x < 60), a)) print(result) ``` #### 函式指派 ```python= a = (lambda a: a ** 2)(6) print(a) def plus(a, b): return a + b a = plus # 將plus函式本體指派給a變數, a變數也可以進行呼叫 a = plus(1, 2) # 將plus函式呼叫後將結果存放到a變數,a變數會是一個數字 ``` #### 函式名稱其實就是變數 ```python= # def plus(a, b): # return a + b # 建立匿名函式 plus = lambda a, b: a + b print(plus) print(type(plus)) # a = plus # 把函式指派給a t = plus(4, 7) print('你好') a = print print = 4 a('哈囉') ``` #### lambda ```python= # def plus(a, b): # return a + b plus = lambda a, b: a + b t = plus(5, 6) print(t) ``` #### 指定參數 ```python= # 指定參數 def show_me(name, age, phone, address): print(f'名字: {name}, 年齡: {age}, 電話: {phone}, 地址: {address}') show_me('Aaron', 18, '0987654321', '中央大學') show_me(age=18, address='中央大學', name='Aaron', phone='0987654321') ``` #### 聖誕樹 ```python= # for j in range(1, 6): # for i in range(j): # print('*', end='') # print() def star(num): for i in range(num): print('*', end='') print() for i in range(1, 10): star(i) ``` ```python= print( '\n'.join([''.join(['*' for i in range(j)]) for j in range(1, 6)]) ) ``` #### 九九乘法表函示 ```python= # for i in range(2, 9): # for j in range(1, 9): # print(f'{i} x {j} = {i * j}') def nine_nine(a): for i in range(1, 9): print(f'{a} x {i} = {a * i}') for i in range(2, 10): nine_nine(i) ``` #### 參數預設值 ```python= # 參數預設值 def show_me(name, phone, age='無資料', address='無資料'): print(f'名字: {name}, 年齡: {age}, 電話: {phone}, 地址: {address}') show_me('Aaron', 18, '0987654321', '中央大學') show_me('Aaron', 18, '0987654321') # show_me('Aaron') show_me('Aaron', '0987654321') ``` #### 寫一個函式rand3,可以產生3個0~10之間的隨機數,並回傳 ```python= # 寫一個函式rand3,可以產生3個0~10之間的隨機數,並回傳 import random def rand3(): a1 = random.randint(0, 10) a2 = random.randint(0, 10) a3 = random.randint(0, 10) return a1, a2, a3 r1, r2, r3 = rand3() print(r1) print(r2) print(r3) ``` #### 練習 ```python= def say_hello(name): print(f'Hello {name}') say_hello('Aaron') say_hello('Andy') def mux(a, b): return a * b print( mux(3, 4) ) print( mux(345, 412) ) ``` #### return 及格或不及格 ```python= def check(score): if score < 60: return '不及格' else: return '及格' r = check(90) print(r) r = check(50) print(r) ``` #### return ```python= def plus(a, b): # a = 3 # b = 4 total = a + b # print(f'總和為: {total}') return total # 3 + 4 + 5 r = plus(3, 4) m = plus(r, 5) print(f'3 + 4 + 5 = {m}') ``` #### 參數 ```python= def plus(a, b): # a = 3 # b = 4 total = a + b print(f'總和為: {total}') plus(3, 4) plus(5, 7) ``` #### 函式 ```python= def abc(): print('Hello function') abc() # 函式呼叫 call function abc() ``` ## 2024-06-22 #### 變數資料交換 ```python= a = 1 b = 2 a, b = b, a print(a) ``` #### Tuple ```python= a = (1, 2, 3) a = (1, 2, 3,) a = 1, 2, 3 a = 1, 2, 3, a = 1, a = 1, 2, 3, 4, 5, # 打包 pack print(a[3]) print(a[1:3]) print(a) print(type(a)) # a, b, c, d, e = a # 解包unpack # print(c) a1, *a2, a3 = a print(a1) print(a2) print(a3) ``` #### 1A2B ```python= import random a = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] answer = random.sample(a, 4) answer = answer[0] + answer[1] + answer[2] + answer[3] # answer = ''.join(answer) # 另一種把list內資料串接起來的方式 print(f'答案: {answer}') # 次數 count = 0 while True: user = input('請猜一個0~9之間不重覆的數字: ') count += 1 print(f'已經猜了{count}次') # 檢查輸入的是不是數字 try: int(user) except ValueError: print('只能輸入數字,請重新輸入.') continue # if not user.isdigit(): # print('只能輸入數字,請重新輸入.') # continue # 檢查是不是四位數 if len(user) != 4: print('只能輸入四個數字,請重新輸入') continue # 檢查數字有沒有重覆 if len(set(user)) != 4: print('數字不可以重覆,請重新輸入') continue if answer == user: print(f'猜對了,遊戲結束,總共猜了{count}次.') break # 判斷幾個A how_many_A = 0 if answer[0] == user[0]: how_many_A += 1 if answer[1] == user[1]: how_many_A += 1 if answer[2] == user[2]: how_many_A += 1 if answer[3] == user[3]: how_many_A += 1 # 判斷幾個B how_many_B = 0 if user[0] in answer and user[0] != answer[0]: how_many_B += 1 if user[1] in answer and user[1] != answer[1]: how_many_B += 1 if user[2] in answer and user[2] != answer[2]: how_many_B += 1 if user[3] in answer and user[3] != answer[3]: how_many_B += 1 print(f'{how_many_A}A{how_many_B}B') ``` #### 例外 ```python= print('a') try: int('88') [1, 2, 3][3] except ValueError: print('轉型失敗') except IndexError: print('超過索引值了') print('a') print('a') ``` #### 差集、交集、聯集、對稱差集 ```python= employee1 = {'英文', '日語', '粵語', '台語'} employee2 = {'法語', '德語', '中文', '日語', '台語'} print(f'只有員工1號會的語言: {employee1 - employee2}') print(f'只有員工2號會的語言: {employee2 - employee1}') print(f'兩個人都會的語言: {employee1 & employee2}') print(f'兩個人全部會那些語言: {employee1 | employee2}') print(f'只有其中一個人會的語言: {employee1 ^ employee2}') ``` #### 切片 ```python= a = [6, 0, 8, 9, 7, 5, 4, 1, 2, 3] print(a[2]) print(a[1:4]) print(a[:3]) print(a[2:]) print(a[:]) print(a[-5:-1]) print(a[1:-1]) print(a[-3:]) print(a[:3]) print(a[::2]) print(a[-6:-2:3]) print(a[5:2:-1]) print(a[-2:-9:-2]) print(a[::-len(a)+1]) ``` #### 刪除list裡面資料 ```python= a = ['aaron', 'andy', 'apple', 'aaron', 'alan', 'aaron', 'aaron'] while 'aaron' in a: a.remove('aaron') print(a) ``` ```python= a = ['aaron', 'andy', 'apple', 'aaron', 'alan'] a.remove('aaron') print(a) ``` #### while九九乘法表 ```python= for j in range(1, 10): for i in range(2, 10): print(f'{i:2} x {j:2} = {i * j:2}', end=' ') print() j = 1 while j < 10: i = 2 while i < 10: print(f'{i:2} x {j:2} = {i * j:2}', end=' ') i += 1 print() j += 1 ``` #### 猜數字,猜到對為止 ```python= import random pc = random.randint(1, 5) count = 0 while True: user = int(input('猜1~5之間的數字 => ')) count += 1 if user == pc: print(f'猜對了, 總共猜了{count}次') break else: print(f'猜錯了, 已經猜了{count}次') ``` #### while ```python= user = '' while user != 'quit': user = input('(quit=離開)=> ') ``` #### for-else ```python= data = [] for i in range(100000): user = input('請輸入數字(quit=離開): ') if user == 'quit': break data.append(int(user)) print(data) # 一般寫法 hasNum = False # 紀錄有沒有偶數 for i in data: if i % 2 == 0: hasNum = True break if hasNum: print('有偶數') else: print('沒有偶數') # for-else for i in data: if i % 2 == 0: print('有偶數') break else: print('沒有偶數') ``` #### 另一種九九乘法表 ```python= for j in range(1, 10): for i in range(2, 10): print(f'{i:2} x {j:2} = {i * j:2}', end=' ') print() ``` #### 九九乘法表 ```python= for i in range(2, 10): for j in range(1, 10): print(f'{i} x {j} = {i * j}') print() ``` #### 計算偶數加總 ```python= # break # continue a = [23, 45, 6, 2, 97, 4, 8, 77, 6, 27] total = 0 for i in a: if i % 2 == 1: continue total = total + i print(f'總合為: {total}') ``` #### 猜拳遊戲 ```python= import random # 電腦出拳 pc = random.randint(0, 2) # 0=剪刀, 1=石頭, 2=布 print(f'電腦出了: {['剪刀', '石頭', '布'][pc]}') # 玩家出拳 user = int( input('請出拳(0=剪刀, 1=石頭, 2=布): ') ) if pc == 0 and user == 1: print('你贏了') elif pc == 0 and user == 2: print('你輸了') elif pc == 1 and user == 0: print('你輸了') elif pc == 1 and user == 2: print('你贏了') elif pc == 2 and user == 0: print('你贏了') elif pc == 2 and user == 1: print('你輸了') else: print('平手') ``` #### match-case ```python= import random print('----------------------------------') print('今日運勢') print('----------------------------------') # 0~9隨機產生一個數字 a = random.randint(0, 9) if a == 0: print('今天會撿到錢') elif a == 1: print('今天會中發票') elif a == 2: print('今天會加薪') elif a == 3: print('今天會發獎金') elif a == 4: print('今天會中彩卷') else: print('沒事') # match-case match a: case 0: print('今天會撿到錢') case 1: print('今天會中發票') case 2: print('今天會加薪') case 3: print('今天會發獎金') case 4: print('今天會中彩卷') case _: print('沒事') ``` #### 將資料複製到剪貼簿 https://www.delftstack.com/zh-tw/howto/python/python-copy-to-clipboard/ #### 多重分支 ```python= import datetime t = datetime.date.today() w = t.weekday() # 0=星期一,5=星期六 if w == 0: # 星期一 print('今天適合穿藍色') elif w == 1: print('今天適合穿紅色') elif w == 2: print('今天適合穿黃色') elif w == 3: print('今天適合穿綠色') elif w == 4: print('今天適合穿黑色') elif w == 5: print('今天適合穿白色') elif w == 6: print('今天不穿') ``` ## 2024-06-15 #### 練習 ```python= for i in range(1, 101): if i % 2 == 0: print(i, end=' ') print() a = [] for i in range(100000): user = input('請輸入數字(quit=離開): ') if user == 'quit': break else: a.append(int(user)) total = 0 for i in a: total = total + i print(f'總合為: {total}') ``` #### break ```python= a = [] for i in range(10000): user = input('請輸入數字(quit=結束): ') if user == 'quit': break else: a.append(int(user)) print(a) ``` #### Ubike #### 資料欄位說明 |索引|欄位名稱|說明| |-|-|-| |0|sareaen|行政區英文名| |1|sarea|行政區中文名| |2|lng|經度| |3|sna|中文站名| |4|snaen|英文站名| |5|bemp|空位數量| |6|ar|中文地址| |7|act|全站禁用狀態(0:禁用、1:啟用)| |8|sno|站編號| |9|aren|英文地址| |10|tot|場站總停車格| |11|_id|資料編號| |12|sbi|場站目前車輛數量| |13|mday|微笑單車各場站來源資料更新時間| |14|lat|緯度| > **資料來源:** > > https://data.gov.tw/dataset/137993 ```python= import requests import csv # 到桃園市Ubike開放平台抓取csv資料 response = requests.get('https://data.tycg.gov.tw/api/v1/rest/datastore/a1b4714b-3b75-4ff8-a8f2-cc377e4eaa0f?format=csv&limit=999') # 將CSV資料的每一行切開存放到list rows = response.text.splitlines() # 將每一筆站台資料用逗點切開成小list rows = list(csv.reader(rows)) print(f'總共: {len(rows)} Ubike站台') user = input('請輸入站台名稱: ') isFound = False for row in rows: if user in row[3]: print(f'站名: {row[3]}, 地址: {row[6]}') print(f' - 可借: {row[12]}') print(f' - 可還: {row[5]}') print(f' - 總停車格: {row[10]}') print() isFound = True if not isFound: print('查無資料') ``` #### a.csv ``` title,name,age,address ok,aaron,99,XXXXX hello,andy,88,YYYY morning,apple,77,ZZZX ``` #### 讀取csv檔案 ```python= import csv # 打開csv檔案 with open('a.csv') as file: data = file.readlines() c = csv.reader(data) d = list(c) print(d[2][1]) ``` #### range() ```python= # for i in range(20): # print(i) # print( list( range(10) ) ) # print( list( range(5) ) ) for i in range(1, 10): print(f'2 x {i} = {2 * i}') ``` #### for-in ```python= a = ['ok', 99, True, [5, 6], 'i'] count = 1 for b in a: print(b) print(f'第{count}次') count = count + 1 ``` #### list ```python= a = [3, 4, 5] # 建立清單 - list print(type(a)) print(a) # 新增 a.append(999) # 新增一筆資料 a = a + [999] # 新增一筆資料 print(a) # 讀取某一筆資料 print(a[2]) print(a[0]) # 修改 a[1] = 'ok' print(a) # 刪除資料 a.remove(5) # 以資料內容來刪除 del a[0] # 指定位置來刪除 print(a) print( len(a) ) # len()函式可以取得list內有幾筆資料 ``` #### 猜數字遊戲 ```python= import random # 模組 answer = random.randint(1, 5) print(f'答案: {answer}') user = int(input('請猜1~5之間的數字: ')) if answer == user: print('猜對了') else: print('猜錯了') ``` #### in ```python= # jfadkfsf # jasdflkjfd ''' sdfjlskdf sdfjldkfjs dsfjsdlfk ''' a = """ 宜蘭美食、美景豐富,還有知名的溫泉資源,是不少北部人週末旅遊、放鬆的好去處。近日就有網友表示,準備和女友去宜蘭玩,但糾結晚上要去羅東還是宜蘭,好奇詢問大家哪邊比較熱鬧?問題抛出後,不少在地人推薦「1地」,更大讚「去過一次終身難忘」。 一名網友在PTT上發文透露, 8月計畫要和女友去宜蘭玩,不過礙於從來沒去過宜蘭,對當地景點非常不了解,只知道第一天要去礁溪,第二天則考慮要住羅東鎮還是宜蘭市,於是好詢問「哪邊比較熱鬧?」 文章一出,網友紛紛回應,「羅東夜市」、「當然是羅東阿」、「羅東是很密集,宜蘭市是很分散,若徒步玩一定是羅東鎮」、「夜市羅東比較多人,商場就新月廣場」、「比吃的羅東也比宜蘭市多」。 但也有另一派在地人大推冬山的清溝夜市,「要逛夜市可以選禮拜三的清溝夜市,很大」、「我建議你去『清溝夜市』會比羅東夜市深刻」、「清溝值得你週3去,走1次終身難忘」、「清溝夜市逛到哭出來 ,一個小時走不完」、「清溝只有週3,最好下午5點前停好車」、「去清溝前先做好功課,什麼該先排先買」。 """ b = "宜蘭美食、美景豐富,還有知名的溫泉資源,是不少北部人週末旅遊、放鬆的好去處。近日就有網友表示,準備和女友去宜蘭玩,但糾結晚上要去羅東還是宜蘭,好奇詢問大家哪邊比較熱鬧?問題抛出後,不少在地人推薦「1地」,更大讚「去過一次終身難忘」。\ 一名網友在PTT上發文透露, 8月計畫要和女友去宜蘭玩,不過礙於從來沒去過宜蘭,對當地景點非常不了解,只知道第一天要去礁溪,第二天則考慮要住羅東鎮還是宜蘭市,於是好詢問「哪邊比較熱鬧?」 \ 文章一出,網友紛紛回應,「羅東夜市」、「當然是羅東阿」、「羅東是很密集,宜蘭市是很分散,若徒步玩一定是羅東鎮」、「夜市羅東比較多人,商場就新月廣場」、「比吃的羅東也比宜蘭市多」。 \ 但也有另一派在地人大推冬山的清溝夜市,「要逛夜市可以選禮拜三的清溝夜市,很大」、「我建議你去『清溝夜市』會比羅東夜市深刻」、「清溝值得你週3去,走1次終身難忘」、「清溝夜市逛到哭出來 ,一個小時走不完」、「清溝只有週3,最好下午5點前停好車」、「去清溝前先做好功課,什麼該先排先買」。" print('夜市' in a) user = input('請輸入關鍵字: ') if user in a: print('你輸入的', user, '有在新聞出現.') print(f'你輸入的 {user} 有在新聞出現') else: print('你輸入的', user, '沒有在新聞出現.') print(f'你輸入的 {user} 沒有在新聞出現.') ``` #### 奇偶數判斷 ```python= a = int(input('請輸入一個數字: ')) if a % 2 == 0: print('偶數') else: print('奇數') # 單行if print('偶數') if int(input('請輸入一個數字: ')) % 2 == 0 else print('奇數') a = 9 if a < 60: print('不及格') else: print('及格') print('不及格' if a < 60 else '及格') ``` #### if判斷式 ```python= # a = int( input('請輸入一個數字: ') ) # b = int( input('請輸入第二個數字: ') ) # # 算術運算 # print('加法為:', a + b) # print('減法為:', a - b) # print('乘法為:', a * b) # print('除法為:', a / b) # print('為:', a // b) # print('為:', a % b) # print('為:', a ** b) # 比較運算 # print('3 > 4:', 3 > 4) # print('5 < 4:', 5 < 4) # print('9 >= 9:', 9 >= 9) # print('5 <= 2:', 5 <= 2) # print('5 == 5:', 5 == 5) # print('5 != 5:', 5 != 5) score = int(input('請輸入分數: ')) if score < 60: print('不及格') print('Hi') ``` #### 乘法運算 ```python= a = input('請輸入一個數字: ') print(type(a)) b = int(a) # 把a變數的型態轉型成int型態後存放到b變數 print(type(b)) print('平方後為:', b * b) ``` #### input函式 ```python= a = input('請輸入名字: ') print('你剛剛輸入的資料是:', a) ``` #### print函式 ```python= # 蟬意 print("Hello 嗨\n你好 Python1", 99 + 1, '123' + '1', 'aaron', end='\n') print('Hello 嗨你好 Python2') print( type(99) ) print( type('123') ) print( type(7.8) ) print( type(7.8) ) print( type(True) ) print( type(False) ) # Python保留字 import keyword print(keyword.kwlist) # 建立變數a, 並把3存放到變數內 a = 3 hello = 'abc' print(hello) # 將hello變數內的字串顯示到終端機上 print('hello') # 將hello字串顯示到終端機上 ```