---
# System prepended metadata

title: 'wk08_1026 字典 '
tags: [python]

---

{%hackmd @themes/orangeheart %}
## wk08_1026_字典 
### 醫放三 B1003210 應雨岑

CH6 
1. 串列的使用
2. 使用 for迴圈讀取串列
3. 串列搜尋與計次
4. 串列元素新增與刪除
5. 串列排序
6. 串列常用的方法列表
7. 元組(Tuple)

- 6.1  字典基本操作
  - 建立字典
  - 字典取值
  - 字典維護
- 6.2  字典進階操作
  - 字典進階功能整理
  - in 功能
    - keys 及 values方法
    - items 方法
  - setdefault 方法

## 今日課程內容
<pre>
1. 5.5 串列排序

2. 5.6 串列常用的方法列表

3. 5.7 元組(Tuple)

4. 6.1  字典基本操作
</pre>
## NOTE
<pre>
divmod(7,3)   #答案為(2,1) 表示(商,餘數)
元組內的元素不能修改，但可以轉換成串列
字典是以大括號呈現{}
由小排到大 score.sort()
由大排到小 score.sort(reverse=True)
反轉是錯誤的則不用反轉，由小排到大 score.sort(reverse=False)
    
</pre>
## [ INCLASS PRACTICE ]
* 實作6
```python
"""
西元2021年是牛年。請你開發一個程式:
當使用者輸入他的出生西元年之後，畫面會顯示這個西元年的生肖。
"""
生肖=["鼠","牛","虎","兔","龍","蛇","馬","羊","猴","雞","狗","豬"]
x=int(input("請輸入西元出生年分"))
a=x-2020
b=a%12
print("生肖是",生肖[b])
```

    請輸入西元出生年分2000
    生肖是 龍
    


```python
divmod(7,3)
#答案為(2,1) 表示(商,餘數)
```




    (2, 1)


* 成績由小排到大

```python
score=[21,63,100,91]
score.sort()
print(score)
#由大排到小
score.sort(reverse=True)
print(score)
#反轉是錯誤的，則不用反轉，由小排到大
score.sort(reverse=False)    
print(score)
#內建的排序功能
score=sorted(score)
print(score)
```

    [21, 63, 91, 100]
    [100, 91, 63, 21]
    [21, 63, 91, 100]
    [21, 63, 91, 100]
    


```python
fruits=["banana","apple","orange","pineapple","watermelon"]

fruit="cherry"
i=1
if fruits.count(fruit)>0:
    i=fruits.index(fruit)
    print("找到%s了，在第%d個" % (fruit,i+1))
else:
    print("沒有找到%s" %fruit)
```

    沒有找到cherry
    
* 刪除指定串列元素

```python
put=[]
putin=1

while (putin!="0"):
    putin=str(input("請輸入水果，若輸入結束請按0"))
    if (putin!="0"):
        put.append(putin)   
print(put)

no=input("請輸入不要的水果名稱")
b=put.count(no)
if b!=0:
    number=put.index(no)
    del put[number]
    print("刪除%s成功" % no)
    print(put)
else:
    print("沒有找到%s" %no)
```

    請輸入水果，若輸入結束請按0a
    請輸入水果，若輸入結束請按0s
    請輸入水果，若輸入結束請按0d
    請輸入水果，若輸入結束請按0f
    請輸入水果，若輸入結束請按0g
    請輸入水果，若輸入結束請按00
    ['a', 's', 'd', 'f', 'g']
    請輸入不要的水果名稱s
    刪除s成功
    ['a', 'd', 'f', 'g']
    

* 刪除指定串列元素2
```python
put=[]
putin=1

while (putin!="0"):
    putin=str(input("請輸入水果，若輸入結束請按0"))
    if (putin!="0"):
        put.append(putin)   
print(put)

while True:
    no=input("請輸入不要的水果名稱")
    if no=="0":
        break
    if put.count(no)!=0:
        number=put.index(no)
        del put[number]
        print("刪除%s成功" % no)
        print(put)
    else:
        print("沒有找到%s" %no)
```

    請輸入水果，若輸入結束請按0a
    請輸入水果，若輸入結束請按0s
    請輸入水果，若輸入結束請按0d
    請輸入水果，若輸入結束請按0f
    請輸入水果，若輸入結束請按0g
    請輸入水果，若輸入結束請按00
    ['a', 's', 'd', 'f', 'g']
    請輸入不要的水果名稱w
    沒有找到w
    請輸入不要的水果名稱a
    刪除a成功
    ['s', 'd', 'f', 'g']
    請輸入不要的水果名稱0
    
* 反轉串列：

```python
#list +  while 練習: 編寫一個程式，將一個字元串列反轉，例如，將['a', 'b', 'c']轉換為['c', 'b', 'a']。

list1=["a","b","c","d","e"]
#list1.reverse()
#print(list1)

list1[0:5:1]     
print(list1)
```

    ['a', 'b', 'c', 'd', 'e']
    
* 找出最大值：

```python
#list +  while 練習: 編寫一個程式，在一個整數串列中查找並返回最大的數字。

list2=[21,63,91,20]
themax=list2[0]

for n in list2:
    if n>themax:
        themax=n

print(themax,max(list2))
```

    91 91
    
* 找出最小值

```python
#list +  while 練習: 

list2=[21,63,91,20]
themin=list2[0]

for n in list2:
    if n<themin:
        themin=n

print(themin,min(list2))
```

    20 20
    


```python
dict={"a":20,"b":50,"c":50,"d":18,"e":50,"a":120}

print(dict)

```

    {'a': 120, 'b': 50, 'c': 50, 'd': 18, 'e': 50}
    




    <function print(*args, sep=' ', end='\n', file=None, flush=False)>


* 血型個性查詢

```python
血型_個性={"A":"內向穩重","B":"開朗樂觀","O":"堅強自信","AB":"聰明自然"}
blood="A"

result= 血型_個性[blood]

print("查詢結果:",result)
```

    查詢結果: 內向穩重
    

## 全部的note
<pre>

W1
計算符號之間可以加空白鍵 <br>
** : 幾次方<br>
sep="." : 分隔符號為.
end="/" : 結束用/結束

在print內寫入%d : 放入參數答案  (最後在答案要加%)
            %s : 放入的答案為字串
            %f : 放入的答案包含全部小數點
            %.1f :        包含 1位小數點
            %.3f :        包含 3位小數點
寫法如下- print("身高為%d cm，體重為%d kg，BMI為%.1f " % (height,weight,bmi))
                  
print("顯示的文字",參數名字)<br>
my_height = input("請輸入身高(cm)") : 可以輸入文字進去對話框
使用者輸入的文字要轉換成"int"  ()<br>

W2
print("姓名  成績")
print("%3s %3d"%(name1,score1))   #按照字元數進行規則排列出一格表格格式

W3
**次方
//整除的數
/除以
%餘數
and 放在兩個運算子中間，判斷True or False，當兩個都為True才會是True
or 放在兩個運算子中間，判斷True or False，當兩個都為False才會是False

W4
if,else,elif需使用冒號:還有縮排來寫code
.upper可以讓程式不用判斷大小寫

W5
串列list用中括弧括起來
for和其他語法一樣，他同樣也是需要用到:還有縮排來寫程式

W6
break會跳出這個迴圈
continue跳出執行這個code 繼續執行下一個i的程式
None 為一個什麼都沒有的數字，但是他可以做加減乘除的運算

W7
串列名稱=[1,2,3,...]  #可以放字串、數字等等的
另外也可以宣告空的串列list=[]
多為變數的宣告
    list=[["1"],["1,2"],["1,2,3"]]
    如果想要顯示第二個串列的第一個內容:print(list[1][0]))    
    # 0表示第一個資料，1表示第二個-意思是程式計算的方式是由0開始數
若想檢索特定的元素可以使用list[起始索引,終止索引,間隔]的方式進行
也可以索引-值，表示從最後一個開始數list[-1]
len(list)可以計算元素數量
max(list)可以找到元素內最大值
list.index(...)可以找...在清單中第幾個
    .count     可以數...出現幾次
    .append    插入一個元素在最後
    .insert(3,8)插入8某一個位置(第三個)
    .pop       移除最後一個元素


</pre>

## [ 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)產生錯誤

#### 因為字典的資料沒有排序功能，所以他不知道第0個是什麼


```python
#會顯示錯誤
d={"香蕉":20, "蘋果":50}
print(d[0])
```


    ---------------------------------------------------------------------------

    KeyError                                  Traceback (most recent call last)

    Cell In[4], line 3
          1 #會顯示錯誤
          2 d={"香蕉":20, "蘋果":50}
    ----> 3 print(d[0])
    

    KeyError: 0


### ( B ) 3. d={"香蕉":20, "蘋果":50}，print(d["香蕉"]) 的結果為何？

(A)香蕉 (B)20 (C)50 (D)產生錯誤

#### 因為會由香蕉這個鍵找到所對應的值，即為20


```python
d={"香蕉":20, "蘋果":50}
print(d["香蕉"])
```

    20
    

### ( C ) 4. d={"香蕉":20, "蘋果":50}，print(d.get("巴樂", 60)) 的結果為何？

(A)20 (B)50 (C)60 (D)None

#### 雖然沒有所對應到的鍵(芭樂)，但是有傳入一個值，因此就將芭樂的值設為60，引自查詢字典時找的到


```python
d={"香蕉":20, "蘋果":50}
print(d.get("巴樂", 60))
```

    60
    

### ( A ) 5. d={"香蕉":20, "蘋果":50}，程式「d["巴樂"]=60」的作用為：

(A)新增資料 (B)修改資料 (C)取得資料 (D)刪除資料

#### 因為這是一個增加字典資料的方法


```python
d={"香蕉":20, "蘋果":50}
print(d)
d["巴樂"]=60
print(d)
```

    {'香蕉': 20, '蘋果': 50}
    {'香蕉': 20, '蘋果': 50, '巴樂': 60}
    

### ( A ) 6. d={"香蕉":20, "蘋果":50}，程式「d.clear()」的作用為：

(A)刪除所有元素 (B)刪除一個元素 (C)刪除字典 (D)以上皆非

#### clear不只會把鍵刪除，值也會一起刪除，如果只有del d[""]，就只會刪除該元素


```python
d={"香蕉":20, "蘋果":50}
print(d)
d.clear()
print(d)    #刪了，所以是空的
```

    {'香蕉': 20, '蘋果': 50}
    {}
    

### ( C ) 7. d={"香蕉":20, "蘋果":50}，print("香蕉" in d) 的結果為何？

(A)20 (B)50 (C)True (D)False

#### 這是一個判斷的問題，所以答案會出現True或False


```python
d={"香蕉":20, "蘋果":50}
print("香蕉" in d)
```

    True
    

### ( C ) 8. 下列哪一個功能可取得字典中所有「值」？

(A)in (B)keys (C)values (D)items

#### 因為keys是鍵，values是值，items是值+鍵


```python
d={"蘋果":10,"香蕉":20,"鳳梨":30,"葡萄":40 }
value=d.values()
print(value)
```

    dict_values([10, 20, 30, 40])
    

### ( D ) 9. 下列哪一個功能可取得字典中所有「鍵」及所有「值」？

(A)in (B)keys (C)values (D)items

#### 如上題，因為keys是鍵，values是值，items是值+鍵


```python
d={"蘋果":10,"香蕉":20,"鳳梨":30,"葡萄":40 }
item=d.items()
print(item)
```

    dict_items([('蘋果', 10), ('香蕉', 20), ('鳳梨', 30), ('葡萄', 40)])
    

### ( B ) 10. d={"香蕉":20}，print(d.setdefault("巴樂")) 的結果為何？

(A)20 (B)None (C)巴樂 (D)產生錯誤

#### 因為字典內沒有芭樂，但d.setdefault("巴樂")後字典裡就有這個鍵了，但是他的值預設為None


```python
d={"香蕉":20}
print(d.setdefault("巴樂")) 
print(d)
```

    None
    {'香蕉': 20, '巴樂': None}
    

* ## 教學影音 新手入門8 Dictionary
這次的教學影片主要是在介紹關於字典的功能，包括新增、刪除資料等等；另外還提到在字典中加入串列的元素，加入串列元素後就可以使用串列的語法呼叫字典內的串列內容了。

## [ self practice ]
* 建立學生成績的字典
```python
dict1={}
name=input("請輸入學生姓名,若不輸入則按0")
while name!="0":
    score=input("請輸入學生成績")
    dict1[name]=score
    name=input("請輸入學生姓名,若不輸入則按0")
print(dict1)

```

    請輸入學生姓名,若不輸入則按0小名
    請輸入學生成績78
    請輸入學生姓名,若不輸入則按0小紅
    請輸入學生成績89
    請輸入學生姓名,若不輸入則按0小花
    請輸入學生成績88
    請輸入學生姓名,若不輸入則按00
    {'小名': '78', '小紅': '89', '小花': '88'}
    
