### ch3-1:文字輸入與輸出的技巧 name = input("請問你是? ") print(name + " 你好!") ### ch3-2:文字輸出 >>> print("蘋果", "柳丁", "香蕉", sep = '、', end = "很好吃\n") # sep = '、' 為分隔字串,\n 為換行字元 ### ch3-3:文字的格式化 >>> a, b = 2, 3 >>> print(a, "和", b, "相加的結果是", a + b) # 方法一:字串與輸出變數 >>> print(f"{a} 和 {b} 相加的結果是 {a + b}") # 方法二:字串與輸出變數,在字串前加 f 格式化 >>> print(f"{a} 和 {b} 相乘的結果是 {a * b}") # 方法二:字串與輸出變數,在字串前加 f 格式化 >>> print(f"{a} 和 {b} 相乘的結果是 {a * b:+5.1f}") # + 表示要顯示正負號,5.1 表示長度至少 5 個字元,小數保留 1 位,f 表示以浮點數輸出 ### ch3-4:if 判斷式 a = int(input("Enter an interger: ")) b = 0 if a < 1: a += 1 b = a + 3 print(b) ### ch3-5 a = int(input("Enter an interger: ")) if a < 1: a += 1 # if 的區塊中只有一行程式,合併為一行 print(a) ### ch3-6:if...elif...else a = 70 if a >= 90: grade = 'A' elif a >= 80: grade = 'B' elif a >= 70: grade = 'C' elif a >= 60: grade = 'D' else: grade = 'E' print(f"{a} 分,等第為 {grade}") a = 70 if a >= 90: grade = 'A' elif a >= 80: grade = 'B' elif a >= 70: grade = 'C' elif a >= 60: grade = 'D' else: grade = 'E' print(f"{a} 分,等第為 {grade}") ### ch3-7:多層的 if - 使用 „2 層„ if „檢查輸入字串 # 將輸入的溫度轉成攝氏與華氏間的轉換 s = input("請輸入溫度: ") if s.count('.') > 1: # 判斷是否超過 1 個小數點 print("只能有一個小數點") elif s[1:].replace('.', '').isdigit(): # 判斷除了第一個字元,其餘字元去除小數點之後是否均為數字 if s[0] == '-' or s[0].isdigit(): # 判斷開頭字元是否為負號或數字 temp = float(s) print(f"攝氏 {temp} 度等於華式 {(temp * 9/5) + 32 :+5.1f} 度") print(f"華氏 {temp} 度等於攝式 {(temp - 32) * 9/5 :+5.1f} 度") else: print("只能以數字或負號開頭") else: print("輸入的溫度無法轉換!") ### ch3-8:條件運算式 c = int(input("輸入一個數: ")) if c > 5: a = 1 else: a = 2 print(a) c = int(input("輸入一個數: ")) a = 1 if c > 5 else 2 # if...else 的優先順序是最低的,因此 c > 5 會優先計算 print(a) price = int(input("Enter a price: ")) price = price * 0.8 if price > 99 else price * 0.9 print(price) ### ch3-9:使用 == 做條件運算時,最好不要用浮點數 >>> a = 1.1 * 3 >>> b = 3.3 * 1 >>> a == b >>> a >>> b ### ch3-10:while 迴圈 - 依條件重複執行 # 計算階層,例如:5! = 5 * 4 * 3 * 2 * 1 = 120 n = int(input("請輸入一個正整數: ")) k = n while(n > 1): n = n -1 k = k * n print(k) # 使用逼近法,求平方根 i = float(input("請輸入一個正數: ")) j = 0.0 while j * j < i: j = j + 0.00001 print(f"{i} 的平方根是: {j}") ### ch3-11:while 迴圈 - 使用 break 與 continue # 印出 1 ~ 10,但跳過 5 i = 1 while True: if i == 5: i += 1 continue print(i, end = ' ') if i == 10: break i += 1 print("結束") ### ch3-12:while...else s = '' while s != "喵喵": if s != '': print("不對喔!") s = input("請輸入通關密語: ") if s == "out": break else: print("恭喜你過關了") print("再見!") ### ch3-13:for 迴圈 - 走訪容器的每個元素 s = [0, 1, 2, 3] for i in s: print(i, end = ' ') ### ch3-14:for 迴圈 - 走訪容器的每個元素 # 走訪字串 for a in "abc": print(a, end = ' ') print("in str") # 走訪集合 for a in {0, 1, 2}: print(a, end = ' ') print("in set") # 走訪字典的鍵 for a in {'a': 0, 'b': 1, 'c': 2}: print(a, end = ' ') print("in dict") # 走訪字典的值 d = {'a': 0, 'b': 1, 'c': 2} for a in d.values(): print(a, end = ' ') print("in dict.values") # 走訪字典的鍵與值 d = {'a': 0, 'b': 1, 'c': 2} for a in d.items(): print(a, end = ' ') print("in dict.items") ### ch3-15:for 迴圈 - 用多個變數走訪 # 使用索引 d = {'a': 0, 'b': 1, 'c': 2} for a in d.items(): print(a[0], a[1]) # 使用多變數 d = {'a': 0, 'b': 1, 'c': 2} for key, value in d.items(): print(key, value) ### ch3-16:for 迴圈 - 使用 range() 來走訪數列 # 走訪 0 到 10,不包含 10 for i in range(10): print(i, end = ' ') # 走訪 1 到 11,不包含 11 for i in range(1, 11): print(i, end = ' ') # 走訪 1 ~ 9 的奇數數列 for i in range(1, 10, 2): print(i, end = ' ') # 遞增量為負數時,起始值要大於終止值 for i in range(9, 0, -2): print(i, end = ' ') ### ch3-17:for 迴圈 - 使用 break、continue # 印出 1 ~ 10,但跳過 5 for i in range(1, 20) if i == 5: continue print(i, end = ' ') if i == 10: break print("結束") ### ch3-18:for 迴圈 - 使用 for...else... s = "asxldjf;laszdjf" for c in s: if c == 'k': print("找到 k 了") break; else: print("沒找到 k ") ### ch3-19:for 迴圈 - 多層的 for 迴圈 a = [[1, 4, 3, 2], [5, 3, 6], [4, 7, 3, 8, 3], [8, 3]] cnt = 0 for s in a: for n in s: if n ==3: cnt += 1 print("共有", cnt, "個 3") ### ch3-20:for 迴圈 - 實例:九九乘法表 for i in range(1, 10) for j in range(1, 10) print(f"{j} x {i} = {j * i:2d}", end = ' ') print() ### ch3-21:for 迴圈 - 多變數走訪 person = {22:('張', "天才"), 23:('王', "子帥"), 24:('陳', "美美")} for person_id, (lastname, firstname) in person.items(): print(str(person_id) + "號-" + lastname + firstname) ### ch3-22:用„ enumerate() „產生元素有序號的容器 drinks = ("紅茶", "咖啡", "果汁") print(list(enumerate(drink, 5))) for sn, drink in enumerate(drinks): print(sn, drink, end = ' ') ### ch3-23:用 „zip()„ 同時走訪多個容器 drinks = ("紅茶", "咖啡", "果汁") price = (35, 50, 65) match = ("餅乾", "蛋糕", "三明治", "鬆餅") for drink, price, match in zip(drinks, prices, matchs): print(drink, price, "元, 建議甜點:" + match) ### ch3-24:for 的容器生成式 >>> print([i * i for i in range(1, 6)]) >>> print({i * i for i in range(1, 6)}) >>> print({i: i * i for i in range(1, 6)}) ### ch3-25:for 的容器生成式 >>> a = (i * i for i in range(1, 6)) >>> print(type(a)) >>> print(tuple(a)) >>> print(tuple(a)) ### ch3-26:生成式加上 if 來做篩選 >>> s = [i * i for i in ragne(1, 11) if i%2 == 0] >>> print(s) ### ch3-27:for 的容器生成式 >>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> print([e2 for e1 in a for e2 in e1 if e2 != 4]) a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] b = [] for e1 in a: for e2 in e1: if e2 != 4: b.append(e2) print(b) ### ch3-28:例外處理 s = 'a' try: i = int(s) print("沒發生例外") except: print("發生例外了!") print("程式結束") ### ch3-29:捕捉特定的例外 while True: s = input("請輸入 100 的除數: ") try: i = 100/ float(s) print("100 除", s, '=', i) break except VauleError as e: print("發生 ValueError 例外: ",e) except ZeroDivisionError: print("發生 ZeroDivisionError 例外") except: print("100 除", s, '=', i) break finally: print("其他例外") print("進入下一個迴圈") print("程式正常結束") ### ch3-30:捕捉特定的例外 while True: s = input("請輸入 100 的除數: ") try: i = 100/ float(s) except VauleError: print("發生 ValueError 例外") else: print("100 除", s, '=', i) break finally: print("你輸入的值是", s) print("進入下一個迴圈") print("程式正常結束")