# wk08_1026_元組_字典_陳姿頴 ## 課程進度 - ch5 - 串列排序(.sort由大到小/.reverse順序反轉/sorted排序並新另一個list) - 串列常用的方法列表 - 元組(Tuple) - ch6 6.1 字典基本操作 - 建立字典 ({鍵:值,鍵:值,...}/鍵不可重複) - 字典取值 (dict[鍵]) - 字典維護 6.2 字典進階操作 - 字典進階功能整理 - in 功能 - keys 及 values方法 - items 方法 - setdefault 方法 ## [inclass practice] ## ch5 ### {綜合演練} 實作2. 輸入喜歡的水果,直到Enter鍵結束,找尋fruits = ["香蕉","蘋果","橘子","鳳梨","西瓜"]水果串列是否包含此水果,並顯示該水果是串列中的第幾項。 ```python fruits = ["香蕉","蘋果","橘子","鳳梨","西瓜"] fruit = input("輸入喜歡的水果:") i = 0 if fruits.count(fruit) > 0: #確認是否有此水果 i = fruits.index(fruit) print("水果串列包含此水果, 在第", i+1, "位,索引值為", i) else: print("水果串列不包含此水果") ``` 輸入喜歡的水果:西瓜 水果串列包含此水果, 在第 5 位,索引值為 4 實作6. 西元2021年是牛年。請你開發一個程式: 當使用者輸入他的出生西元年之後,畫面會顯示這個西元年的生肖。 ```python 生肖 = ['鼠','牛','虎','兔','龍','蛇','馬','羊','猴','雞','狗','豬'] x = int(input("輸入出生西元年份:")) a = x - 2020 # 以第一個生肖(鼠--2020)為基礎 b = a % 12 # a除12的餘數 # c = a // 12 # a除12的商數 print("生肖 = ", 生肖[b]) ``` 輸入出生西元年份:2019 生肖 = 豬 ```python divmod(a,12) # 輸出商數、餘數 ``` (-86, 11) ### {範例} 1. 成績由大到小排序 \<sorted> 2. 刪除指定串列元素 \<remove> ```python # 成績由大到小排序 \<sorted> scores = [21,63,91,20] scores.sort(reverse = False) # 由大到小排序後不反轉 print(scores) ``` [91, 63, 21, 20] ```python scores = [21,63,91,20] scores_sorted = sorted(scores) print(scores_sorted) ``` [20, 21, 63, 91] ```python scores = [21,63,91,20] scores = sorted(scores) print(scores) ``` [20, 21, 63, 91] ```python # 刪除指定串列元素 \<remove> fruits = ["香蕉","蘋果","橘子","鳳梨","西瓜"] while True: #一定要定義甚麼時候 break fruit = input("你不喜歡甚麼水果?輸入enter以結束") if fruit == "": break if fruits.count(fruit) > 0: # 確認是否有此水果 fruits.remove(fruit) # 移除某項水果 print(fruits) else: print("水果串列不包含此水果") ``` 你不喜歡甚麼水果?輸入enter以結束西瓜 ['香蕉', '蘋果', '橘子', '鳳梨'] 你不喜歡甚麼水果?輸入enter以結束芭樂 水果串列不包含此水果 你不喜歡甚麼水果?輸入enter以結束 ### {補充} list + while 練習 1. 計算總和:編寫一個程式,使用迴圈計算一個整數串列的所有元素的總和。 2. 找出最大值:編寫一個程式,在一個整數串列中查找並返回最大的數字。 3. 偶數過濾:編寫一個程式,接受一個整數串列,然後返回一個只包含偶數的新串列。 4. 反轉串列:編寫一個程式,將一個字元串列反轉,例如,將['a', 'b', 'c']轉換為['c', 'b', 'a']。 5. 查找元素:編寫一個程式,接受一個整數串列和一個目標數字,返回目標數字在串列中的索引,如果它不存在,返回-1。 ```python # 2. 找出最大值:編寫一個程式,在一個整數串列中查找並返回最大的數字。 list2 = [21,63,91,20] themax = list2[0] for n in list2: if n > themax: themax = n print(themax,max(list2)) ``` 91 91 ```python # 找出最小值 list2 = [21,63,91,20] themin = list2[0] for n in list2: if n < themin: themin = n print(themin,min(list2)) ``` 20 20 ```python # 4. 反轉串列:編寫一個程式,將一個字元串列反轉,例如,將['a', 'b', 'c']轉換為['c', 'b', 'a']。 list1 = ["香蕉","蘋果","橘子","鳳梨","西瓜"] list1.reverse() print(list1) # list1[0:5:1] ``` ['西瓜', '鳳梨', '橘子', '蘋果', '香蕉'] ## ch6 ```python dict1 = {"香蕉":20,"蘋果":30,"橘子":15,"鳳梨":10,"西瓜":50,"香蕉":100} #定義水果價錢,重複的會被後面的覆蓋 print(dict1) ``` {'香蕉': 100, '蘋果': 30, '橘子': 15, '鳳梨': 10, '西瓜': 50} ```python # 血型個性查詢 \<dictget> 血型_個性 = {"A":"內向穩重", "B":"聰明自然" ,"O":"積極樂觀", "AB":"天真單純"} blood = input("輸入血型:") result = 血型_個性[blood] print("查詢結果:",result) ``` 輸入血型:A 查詢結果: 內向穩重 ## [afterclass practice] 1. 綜合演練 選擇題1-10 (需抄題在markdown cell ; 有程式碼的題目要有code cell ) 2. 教學影音 : 新手入門#8Dictionary ##### ( B ) 1. 關於字典,下列何者敘述是錯誤的? (A)以「鍵-值」對方式儲存 (B)資料依序排列 (C)可由「鍵」取得「值」 (D)資料隨機排列 ##### ( D ) 2. d={"香蕉":20, "蘋果":50},print(d[0]) 的結果為何? (A)香蕉 (B)20 (C)50 (D)產生錯誤 ```python d={"香蕉":20, "蘋果":50} print(d[0]) ``` ---------------------------------------------------------------- KeyError Traceback (most recent call last) Cell In[4], line 2 1 d={"香蕉":20, "蘋果":50} ----> 2 print(d[0]) KeyError: 0 ##### ( B ) 3. d={"香蕉":20, "蘋果":50},print(d["香蕉"]) 的結果為何? (A)香蕉 (B)20 (C)50 (D)產生錯誤 ```python d={"香蕉":20, "蘋果":50} print(d["香蕉"]) ``` 20 ##### ( C ) 4. d={"香蕉":20, "蘋果":50},print(d.get("巴樂", 60)) 的結果為何? (A)20 (B)50 (C)60 (D)None ```python d={"香蕉":20, "蘋果":50} print(d.get("巴樂", 60)) ``` 60 ##### ( A ) 5. d={"香蕉":20, "蘋果":50},程式「d["巴樂"]=60」的作用為: (A)新增資料 (B)修改資料 (C)取得資料 (D)刪除資料 ##### ( A ) 6. d={"香蕉":20, "蘋果":50},程式「d.clear()」的作用為: (A)刪除所有元素 (B)刪除一個元素 (C)刪除字典 (D)以上皆非 ##### ( C ) 7. d={"香蕉":20, "蘋果":50},print("香蕉" in d) 的結果為何? (A)20 (B)50 (C)True (D)False ```python d={"香蕉":20, "蘋果":50} print("香蕉" in d) ``` True ##### ( C ) 8. 下列哪一個功能可取得字典中所有「值」? (A)in (B)keys (C)values (D)items ##### ( D ) 9. 下列哪一個功能可取得字典中所有「鍵」及所有「值」? (A)in (B)keys (C)values (D)items ##### ( B ) 10. d={"香蕉":20},print(d.setdefault("巴樂")) 的結果為何? (A)20 (B)None (C)巴樂 (D)產生錯誤 ```python d={"香蕉":20} print(d.setdefault("巴樂")) ``` None ## [selfpractice] ```python # 1. 計算總和:編寫一個程式,使用迴圈計算一個整數串列的所有元素的總和。 values = [1, 2, 3, 4] value = list ttl = 0 n = len(values) for value in values: ttl = ttl + value n = n + 1 print("total = %.f " % (ttl)) ``` total = 10 ```python # 3. 偶數過濾:編寫一個程式,接受一個整數串列,然後返回一個只包含偶數的新串列。 values = [1, 2, 3, 4] even = [] for n in values: if n % 2 == 0: even.append(n) print(even) ``` [2, 4] ```python # 5. 查找元素:編寫一個程式,接受一個整數串列和一個目標數字,返回目標數字在串列中的索引,如果它不存在,返回-1。 values = [] target_value = 2 a = input("輸入數字:") values = [int(x) for x in a.split(",")] i = -1 if target_value in values: i = values.index(target_value) print("數字串列包含此數字, 在第", i+1, "位,索引值為", i) else: print("-1") ``` 輸入數字:1,2,3,4,1,2,1 數字串列包含此數字, 在第 2 位,索引值為 1 實作5: 目前台幣對美金、日幣和人民幣的兌換匯率分別是 美金:28.02、日幣:0.2513、人民幣:4.24。 請設計此匯率兌換程式,輸入台幣金額後計算可以兌換多少的美金、日幣和人民幣。 ```python d = {"美金":"28.02","日幣":"0.2513","人民幣":"4.24"} a = float(input("台幣金額")) x = a / 28.02 y = a / 0.2513 z = a / 4.24 print(f"美金 = {x:.1f}, 日幣 = {y:.1f}, 人民幣 = {z:.1f}") ``` 台幣金額100 美金 = 3.6, 日幣 = 397.9, 人民幣 = 23.6