# 2024-04-27 中央大學Python基礎班 上課筆記 ## 2024-05-18 #### 函式 ```python= def say_hello(): print('say') print('hello') print('say hello') # 不屬於函式 say_hello() # 呼叫 say_hello函式 say_hello() # 呼叫 say_hello函式 ``` #### 加法函式 ```python= def plus(): a = 3 b = 4 print(f'{a} + {b} = {a + b}') def plus2(): a = 5 b = 7 print(f'{a} + {b} = {a + b}') def plusV2(a, b): # 參數在函式呼叫的時候,呼叫方必須提供對應數量的參數 print(a) print(b) print(f'{a} + {b} = {a + b}') plus() plus2() plusV2(6, 8) plusV2(16, 18) plusV2(163, 181) ``` ```python= def mux(a, b, c): print(f'{a} x {b} x {c} = {a * b * c}') def test(a): print(f'{a}的平方為: {a * a}') mux(2, 3, 4) test(5) test(8) ``` ```python= def mux(a, b, c): # print(f'{a} x {b} x {c} = {a * b * c}') return a * b * c # 函式內的return關鍵字會讓韓式直接結束 a = mux(2, 3, 4) b = mux(12, 13, 14) print(f'a={a}') print(f'{a + b}') ``` ```python= import random def rnd(): return random.randint(1, 10) a = rnd() print(a) ``` ```python= import random def rnd(): return random.randint(1, 10) a = rnd() print(a) # 產生三次1~10的隨機數並總和後當成猜數字遊戲的答案 a = rnd() + rnd() + rnd() print(f'產生三次1~10的隨機數並總和: {a}') ``` #### 參數預設值 ```python= # 有參數預設值的參數,其右邊所有參數都需要提供預設值 def show_me(name, age, address='無', phone='無', birth='無'): print(f'姓名: {name}') print(f'年齡: {age}') print(f'地址: {address}') print(f'電話: {phone}') print(f'生日: {birth}') show_me('Aaron', '99', '0987654321', '00-00-00') ``` #### 指定參數 ```python= # 有參數預設值的參數,其右邊所有參數都需要提供預設值 def show_me(name, age, address='無', phone='無', birth='無'): print(f'姓名: {name}') print(f'年齡: {age}') print(f'地址: {address}') print(f'電話: {phone}') print(f'生日: {birth}') show_me('Aaron', '99', '0987654321', '00-00-00') show_me(age=99, name='Aaron', phone='0987654321', address='XXXXXXX', birth='00-00-00') ``` #### 打包跟解包 ```python= a = 3 b = 5 a, b = b, a print(a) print(b) ``` #### 九九乘法表函式 ```python= def nine_nice(a): for i in range(1, 10): print(f'{a} x {i} = {a * i}') nine_nice(4) nine_nice(11) nine_nice(8) ``` #### 聖誕樹 ```python= def tree(a): for i in range(1, a + 1): # 輸出每一層的星星 for j in range(1, i + 1): print('*', end='') print() # 每一層的換行 tree(4) ``` #### 聖誕樹另一種寫法 ```python= def tree_layer(a): for i in range(1, a + 1): print('*', end='') print() def tree(a): for i in range(1, a + 1): tree_layer(i) tree(4) #### 一級函式 ```python= def swap(a, b): return b, a a, b = swap(3, 4) c = swap aaron = c a, b = c(5, 6) aaron = 9 a, b = aaron(7, 8) print(a, b) ``` ```python= a = [1, 2, 3, 4, 5] def b(b): return 999 sum = b total = sum(a) print(total) ``` #### lambda ```python= # def swap(a, b): # return b, a # 匿名 a, b = (lambda a, b: (b, a))(5, 6) # a, b = swap(5, 6) print(a) print(b) ``` #### h4 ```python= # a = 80 # # if a < 60: # # a = a + 10 # # else: # # a = a # a = a + 10 if a < 60 else a # print(a) a = [1, 2, 3, 4, 5] # b = [] # for i in a: # b.append(i + 10) b = [i + 10 for i in a] print(b) ``` ```python= a = [33, 44, 55, 66, 77] a1 = [57, 34, 75, 86, 17] # def ok(a): # score = [] # for i in a: # if i < 60: # score.append(i + 10) # else: # score.append(i) # return score newok = lambda a: [i + 10 if i < 60 else i for i in a] b = newok(a) print(b) b = newok(a1) print(b) ``` #### ```ptyhon= def do_something(a, b, func): return func(a, b) result = do_something(6, 7, lambda a, b: a + b) print(result) result = do_something(6, 7, lambda a, b: a * b) print(result) ``` #### mymodule.py ``` def show(): print('This is a module') if __name__ == '__main__': print('My module') show() print(__name__) ``` #### 20240518.py ```python= import mymodule # mymodule.show() ``` #### 字典 ```python= a = { 'ok': 1 , 'a': 2, 99: 'hello'} # dict, 無序 a[99] = 'Hello2' # 修改 a['happy'] = 8888 # 指派資料給不存在的happy這個key, 即為新增資料 print( a['ok'] ) print( a[99] ) del a['a'] # 刪除 print(a, type(a)) # 判斷key是否存在字典 if 99 in a: print(a[99]) # 判斷值是否存在字典 if 1 in a.values(): print('found') ``` #### 不定長度參數 ```python= def show(a, b, c): print(a) print(b) print(c) def show2(a, b, c, d): print(a) print(b) print(c) def show_all1(*args): print(args) def show_all2(**args): print(args) show_all1(1, 2) show_all1(1, 2, 4) show_all1(1, 2, 4, 8) show_all2(a=1, b=2) show_all2(aa=1, bb=2, cc=4) show_all2(hh=1, rr=2, ww=4, nn=8) ``` #### 套件 ```python= import abc123.ok # 呼叫方式: abc123.ok.show_ok() from abc123 import ok # 呼叫方式: ok.show_ok() from abc123.ok import show_ok # 呼叫方式: show_ok() ``` #### 讀寫檔案 ```python= with open('python.txt', 'a', encoding='utf-8') as file2: file.write('Hello Python\n') a = 4 print(f'寫入檔案 {a}\n', file=file2) with open('python.txt', 'r', encoding='utf-8', newline='') as file2: for l in file2.readlines(): print(l, end='') ``` #### 檔案參數 |參數|說明| |-|-| |'r'、'r+'|只讀或讀寫,並不建立檔案| |'w'、'w+'|寫入檔案,若檔案不存在會新建檔案| |'a'、'a+'|已增加的方式寫入檔案,若檔案不存在會新建檔案。| |'w'、'w+'|只寫或讀寫,兩者都等同新建一個檔案,故會把原內容清除。| |'w+'、'r+'的區別|'r+'只能使用在文件存在情況,不存在報Error| #### 學生成績管理系統 ```python= import csv grades = {} # 存放全部資料的字典 def student_system(): # 載入資料 load() while True: 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': break else: print('輸入錯誤,請重新輸入!') def management(): while True: print('============================================') print('管理學生成績') print('============================================') print('1. 新增資料') print('2. 刪除資料') print('3. 回主選單') user_input2 = input('=> ') if user_input2 == '1': add_grade() elif user_input2 == '2': del_grade() elif user_input2 == '3': break else: print('輸入錯誤,請重新輸入!') def del_grade(): name = input('請輸入要刪除資料的姓名: ') if name in grades: del grades[name] print(f'{name} 已刪除') else: print(f'查無此人') save() # 新增成績 def add_grade(): name = input('輸入姓名: ') no = input('輸入學號: ') chinese = input('輸入國文成績: ') english = input('輸入英文成績: ') math = input('輸入數學成績: ') grades[name] = [no, chinese, english, math] save() # 測試用 print(grades) def save(): with open('student_system.csv', 'w', encoding='utf-8', newline='') as csvfile: writer = csv.writer(csvfile) # 建立csv writer # 寫入標題 writer.writerow(['姓名', '學號', '國文', '英文', '數學']) for key in grades: # 將字典的一筆資料攤平成list a = [key, grades[key][0], grades[key][1], grades[key][2], grades[key][3]] writer.writerow(a) def load(): with open('student_system.csv', 'r', encoding='utf-8', newline='') as csvfile: reader = csv.reader(csvfile) # 跳過csv標題 next(reader) for row in reader: grades[row[0]] = [row[1], row[2], row[3], row[4]] print(grades) def query(): while True: print('============================================') print('查詢學生成績') print('============================================') print('1. 查詢全部資料') print('2. 依姓名查詢資料') print('3. 回主選單') user_input2 = input('=> ') if user_input2 == '1': query_all() elif user_input2 == '2': query_by_name() elif user_input2 == '3': break else: print('輸入錯誤,請重新輸入!') def query_all(): for key in grades: print(f'姓名: {key}({grades[key][0]}): 國文={grades[key][1]}, 英文={grades[key][2]}, 數學={grades[key][3]}') def query_by_name(): name = input('請輸入姓名: ') for key in grades: if name in key: print(f'姓名: {key}({grades[key][0]}): 國文={grades[key][1]}, 英文={grades[key][2]}, 數學={grades[key][3]}') student_system() ``` ## 2024-05-11 #### 數字加總 ```python= a1 = int( input('請輸入第1個數字:') ) a2 = int( input('請輸入第2個數字:') ) a3 = int( input('請輸入第3個數字:') ) total = a1 + a2 + a3 print( type(total) ) print('加總後為: ' + str( total ) ) ``` #### 查保留字 ```python= import keyword print(keyword.kwlist) ``` #### range() ```python= a1 = list(range(3)) a2 = list(range(2, 8)) a3 = list(range(5, 10, 2)) print(a1) print(a2) print(a3) print(list(range(-1, -4, -1))) print(list(range(8, 5, -1))) ``` #### 用迴圈輸入3個整數 ```python= total = 0 for a in range(3): user = int( input('請輸入第' + str(a + 1) + '個數字: ') ) total += user print('加總後為: ' + str(total)) ``` #### 輸入任意個整數後加總 ```python= total = 0 for a in range(10000): user = input('請輸入第' + str(a + 1) + '個數字(輸入quit=離開): ') if user == 'quit': break # 跳離迴圈 else: total += int(user) print('加總後為: ' + str(total)) ``` #### 只加總偶數 ```python= total = 0 for a in range(10000): user = input('請輸入第' + str(a + 1) + '個數字(輸入quit=離開): ') # 判斷是不是輸入quit if user == 'quit': break # 跳離迴圈 user = int(user) # 判斷如果是奇數就不做加總 if user % 2 == 1: continue total += int(user) print('加總後為: ' + str(total)) ``` #### 另一種寫法 ```python= total = 0 all_num = [] for a in range(10000): user = input('請輸入第' + str(a + 1) + '個數字(輸入quit=離開): ') # 判斷是不是輸入quit if user == 'quit': break # 跳離迴圈 else: user = int(user) if user % 2 == 0: all_num.append(user) print('加總後為: ' + str(sum(all_num))) ``` #### while ```python= a = 0 while a < 3: print(a) a += 1 ``` ```python= a = 3 while a < 8: print(a) a += 2 ``` ```python= a = 1 while True: print(a) a += 1 ``` #### ```python= total = 0 count = 1 while True: user = input(f'請輸入第{count}個數字(輸入quit=離開): ') if user == 'quit': break # 跳離迴圈 else: total += int(user) count += 1 print(f'加總後為: {total}') ``` #### `elif` ```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('星期六: 今天適合穿白色') else: print('星期日: 今天適合穿彩色') ``` #### 抽籤 ```python= import random 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` ```python= match a: case 0: print('今天會撿到錢') case 1: print('今天中彩卷') case 2: print('今天會加薪') case 3: print('今天發獎金') case 4: print('今天中統一發票') case _: print('沒中') ``` #### 剪刀石頭布 ```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('平手') ``` #### 切片 ```python= a = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(a[2::2]) print(a[-6:8:3]) print(a[-1:-6:-1]) print(a[8::-1]) print(a[3:-1:3]) print(a[::-3]) print(a[-2:-8:-2]) print(a[4:7:-1]) ``` #### 例外捕捉 ```python= a = [1, 2, 3, 4, 5, 6, 7, 8, 9] try: print(a[10]) except IndexError: print('Oh~No~') print('Hello') print('Hello') print('Hello') print('Hello') print('Hello') print('Hello') print('Hello') ``` #### 練習 幫忙加上例外捕捉: ```python= while True: user = input('請輸入一個數字: ') user = int(user) print(f'你輸入的數字是: {user}') ``` 參考答案: ```python= while True: user = input('請輸入一個數字: ') try: user = int(user) print(f'你輸入的數字是: {user}') except ValueError: print(f'你輸入的不是數字,請重新輸入') ``` #### set ```python= a = {1, 2, 3} a.add(6) a.add(2) a.add(2) a.add(2) a.add(2) print(f'set: {a} 有{len(a)}筆資料') for i in a: print(i) ``` #### 差集, 交集, 聯集, 對稱差集 ```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}') ``` #### `tuple` ```python= # tuple 元組 # set集合 # list清單(array陣列) # 跟list一樣, 唯一差別tuple是唯讀的,一經建立,內容就不改變 # pack跟unpack a = (1, 2, 3,) a = 1, 2, 3 a = 1, 2, 3, a = 3, a = 5, 6, 7, 8, 9 print(a, type(a)) a1, a2, a3, a4, a5 = a print(a1, type(a1)) print(a2, type(a2)) print(a3, type(a3)) print(a4, type(a4)) print(a5, type(a5)) a1, a2, *a3 = a print(a1, type(a1)) print(a2, type(a2)) print(a3, type(a3)) ``` #### 猜數字遊戲 ```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) print(f'答案: {answer}') guess_count = 0 # 紀錄猜測的次數 while True: user = input('請猜0~9之間的四位數字(不可重覆): ') guess_count += 1 # 次數加1 print(f'已經猜了{guess_count}次') # 檢查使用者輸入的是不是數字 try: int(user) except ValueError: print('只能輸入數字,請重新輸入.') continue # 檢查是不是四個數字 if len(user) != 4: print('只能輸入四個數字,請重新輸入.') continue # 檢查數字有沒有重複 if len(set(user)) != 4: print('數字不可以重覆,請重新輸入.') continue # 猜對了,遊戲結束 if answer == user: print(f'猜對了,總共猜了{guess_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') ``` ## 2024-04-27 #### basic ```python= print('Hello Python') # 字串string print('今天天氣很好') a = 3 # assign 指派 print(a) # 變數 b = "你好" print(b) a = 3 a = 9 b = '3' print(1 + 1) print(a + 1) print(b + '1') ``` ```python= print('123', '456', '你好') print(3+4) print(6-2) print(6*2) print(6/2) print(7 / 2) print(6 ** 2) print(7 // 2) print(7 % 2) print(999 % 2) a = 98 b = 2 print(a * b) ``` #### input函式與轉型 ```python= a = input('請隨意輸入:') b = int(a) print('a型態: ', type(a)) print('b型態: ', type(b)) print('你輸入的是:', a * 2) print('你輸入的是:', b * 2) ``` #### if ```python= if False: # 裡面的程式碼 print('a1') print('a2') print('a3') ``` ```python= # 比較運算子,運算結果為True或是False print( 3 > 4 ) print( 8 >= 4 ) print( 5 == 5 ) print( 5 != 5 ) a = 9 b = 8 print(a <= b) ``` ```python= score = input('請輸入分數:') score = int(score) # 轉型 if score < 60: print('不及格') else: print('及格') ``` #### 判斷奇偶數 ```python= user = input('請輸入一個數字:') user = int(user) result = user % 2 # 除以2之後取餘數 if result == 0: print('偶數') else: print('奇數') ``` ##### 單行寫法 ```python= print('偶數' if int( input('請輸入一個數字:') ) % 2 == 0 else '奇數') ``` #### f-string ```python= s = '李李仁跟陶晶瑩4月送女兒荳荳赴美國念書, 女兒5月底即將畢業,正考慮要在新加坡還是美國繼續升大學,兒子小龍今年1月已赴新加坡念書,陶子透露學費表示:「非常合理也便宜,在美國念1年大學的錢可以在新加坡念6年。」陶晶瑩兒女都留學(圖/記者楊澍攝)陶晶瑩兒女都留學(圖/記者楊澍攝)陶晶瑩透露她今飛回台灣,有網友說今天雨下太大了,導致天空塞機,陶晶瑩則說她降落的時候雨還沒下,進一步透露:「我朋友剛剛在桃機落地、根本沒有下雨!但是他們已經等半個小時沒有停機坪⋯⋯⋯」。更多三立新聞網報導50歲謝金燕痛哭!自封「閩南語歌手」 投奔中國《浪姐5》爆內幕《全明星》女神見習婚禮 相識多年男伴首曝光!鬆口想凍卵生子鄭靚歆同志婚落淚 「謝謝妳給我滿滿高潮」!生父卻意外缺席鄭靚歆女女戀婚禮 美魔女媽媽胡文英辣翻了!「網狀透視裝」震撼登場' user = input('請輸文字:') if user in s: print('您輸入的字:', user, '有在新聞出現過') print(f'您輸入的字: {user} 有在新聞出現過') else: print('您輸入的字:', user, '沒有在新聞出現過') print(f'您輸入的字: {user} 沒有在新聞出現過') ``` #### list ```python= a = [1, 2, 3, 4, 5] print(type(a)) print(a) print(a[2]) print(a[5]) ``` ```python= a = [0, 2, 3, 'aa', 'q', True, [1, 2, 3]] a[4] = 'Q' print( len(a) ) print( a[6][1] ) print(a) ``` #### list的CRUD ```python= a = [0, 2, 3, 'aa', 'q', True, [1, 2, 3], 'aa', 'aa'] a[4] = 'Q' a[6][0] = '99' print( len(a) ) print( a[6][1] ) if 'aa2' in a: a.remove('aa2') # 刪除aa del a[0] a.append(999) a.insert(0, 888) print(a) a[6].insert(2, 'OK') print(a) ``` > **備註:** > list裡面的子list也可以被remove方法移除 #### 指派運算子 ```python= a = 3 a = a + 2 a += 2 a **= 3 a %= 2 # 這是註解 # +=, -=. *=, /=, **=, //=, %= print(a) ``` #### 計算加總 ```python= a = [11, 32, 43, 65, 77] total = 0 for t in a: print(t) total = total + t print(total) ``` #### ```python= a = ['Aaron', 'Andy', 'Apple', 'Amber', 'Astrid'] #----------------------------------------------- # Hello, Aaron # Hello, Andy # Hello, Apple # Hello, Amber # Hello, Astrid for name in a: print(f'Hello, {name}') ``` #### 桃園ubike ```python= import requests import csv url = 'http://data.tycg.gov.tw/api/v1/rest/datastore/a1b4714b-3b75-4ff8-a8f2-cc377e4eaa0f?format=csv' resp = requests.get(url) # 去該網址爬資料下來 print(resp.text) rows = resp.text.splitlines() # 透過csv套件, 將資料傳成兩層list data = list( csv.reader(rows) ) user = input('請數入站名: ') for row in data: if user in row[3]: print(f'站名: {row[3]}, 地址: {row[6]}') print(f' - 可借: {row[12]}') print(f' - 可還: {row[5]}') print() ```