Python程式設計

回顧之二:迴圈、串列

Last updated: 2019/9/9

回顧 Review

  • 程式設計基本概念

程式設計基本概念

  • 迴圈
  • 串列、字典

使用迴圈之前函式:range() (1/11)

函式:range()

  • 協助建立整數循序數列1,2,3...
  • 循序數列:1,2,3,....依序改變的數列(例: 等差級數)
  • 可用於迴圈(例如設定迴圈執行1000次)
數列變數 = range(整數值)    # 單一參數
list1 = range(5)    # 注意不能用list當變數名稱
print(list(list1))  # 因為list()是內建函式
print(list1)        # 印出'range(0, 5)'
print(type(list1))  # 印出 list1型別

基本語法

產生 0  到 (整數值 - 1) 的數列

範例

range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>

執行結果

從0開始, 共5個

注意方括弧: 代表「串列」(最重要的資料型別)

list(range物件): 可將range物件轉為「串列」

使用迴圈之前函式:range() (2/11)

數列變數 = range(起始值, 終止值)    # 二個參數的用法
list2 = range(5, 10) # 數列5,6,7,8,9
list3 = range(-3, 3) # 數列-3,-2,-1,0,1,2
list4 = range(5, 3)  # 空數列, 因為起始值較大

基本語法

產生 「起始值」  到 (終止值 - 1) 的數列

範例

基本語法

數列變數 = range(起始值, 終止值, 間隔值)    # 三個參數的用法
list5 = range(2, 10, 2) # 數列2,4,6,8
list6 = range(100, 90, -3) # 數列100, 97, 94, 91

範例

產生從「起始值」開始,遞增「間隔值」,直到 (終止值 - 1) 的數列

迴圈for迴圈 (3/11)

用於固定次數的迴圈

for 迴圈變數 in 數列:
    程式區塊

基本語法

for, in都是保留字

迴圈變數自行取名

數列: 可用range()建立

程式區塊: 需縮排,可多行

for 迴圈變數 in range(起始值, 終止值, 間隔值):
    程式區塊

終止值, 間隔值 可省略

使用range()建立數列

範例

for i in range(1000):
    print('Hello')
    print('這是第幾輪 %d' % i) # 印出迴圈變數值

迴圈for迴圈 (4/11)

範例3 : 計算正整數和

  • 輸入正整數n後,依序印出1到n
sum = 0
n = int(input('輸入正整數:'))
for i in range(1, n+1):
    sum += i
print("1到%d的整數和是%d" % (n, sum))
輸入正整數:50
1到50的整數和是1275

執行結果

...
sum = 0
for i in range(3, 13, 3):
    sum += i
...

迴圈for迴圈 (5/11)

題目:使用者輸入每件商品的價格和數量後,計算多筆商品的購買金額總和

迴圈for迴圈 (6/11)

# 設定商品數量
total_items = int(input("請輸入商品總數:"))

# 初始化總金額
total_price = 0

# 使用 for 迴圈遍歷每個商品
for i in range(total_items):
    price = float(input(f"請輸入第 {i+1} 件商品的單價:"))
    quantity = int(input(f"請輸入第 {i+1} 件商品的數量:"))
    total_price += price * quantity

# 使用 f-string 輸出結果
print(f"所有商品的總金額為: {total_price:.2f} 元")

迴圈while迴圈(7/11)

用於沒有固定次數的迴圈

while(條件式):
    程式區塊

基本語法

沒有迴圈變數

注意[條件式]是否會一直[成立]

程式區塊: 需縮排,可多行

條件式的括弧 可省略

範例

total = n = 0            
while(n < 10):       # 條件式: n < 10
    n += 1           # n 不會自動增加
    total += n       # 數值加總
print('加總:%d' % total)

無窮迴圈

迴圈while迴圈(8/11)

範例2 : 輸入m值,找出大於m值最小n! (範例5-2-1)

  • 例如m=1000, 因6!=720, 7!=5040,故最小n值為7
m = int(input('輸入正整數:'))
total = i = 1
while(total < m):
    i += 1
    total *= i
print('%d階層 = %d' % (i, total))
輸入正整數:6000
8階層 = 40320

執行結果

迴圈while迴圈(9/11)

範例3 : 猜數字!猜介於1~100的數字 (範例5-2-2)

  • 先以「亂數」產生答案,介於1~100(使用亂數套件)
  • 猜錯時,程式需回應'猜小一點', '猜大一點'
import random    # random 為亂數套件名稱
answer = random.randint(1, 100) # 1~100之間的隨機亂數
guess = 0
while guess != answer:
    guess = int(input('猜介於1~100之間的數字'))
    if guess > answer:
        print('猜小一點')
    elif guess < answer:
        print('猜大一點')
    else:
        print('恭喜猜中答案 %d' % answer)

迴圈while迴圈(10/11)

# 設定初始餘額
balance = 5000

# 使用 while 迴圈
while True:
    print(f"目前餘額:{balance:.2f} 元")
    withdraw = float(input("請輸入提款金額(輸入 0 以退出):"))
    
    if withdraw == 0:
        print("退出提款系統。")
        break
    elif withdraw > balance:
        print("餘額不足,請重新輸入。")
    else:
        balance -= withdraw
        print(f"已成功提款 {withdraw:.2f} 元,餘額剩餘 {balance:.2f} 元")

範例 :  模擬ATM 提款系統,使用者可以不斷輸入提款金額,直到餘額不足或選擇退出為止。

迴圈巢狀迴圈(11/11)

範例

height = int(input('三角形的高:'))
for i in range(1, height+1):
    for j in range(1, i+1):
        print('#', end = '')
    print()    # 換行, 外層迴圈

三角形的高:5
#
##
###
####
#####

執行結果

範例:以#字號畫出直角三角形

外圈變數i 用於改變內圈回合數

迴圈特殊指令break(1/2)

a = int(input('輸入正整數a:'))
b = int(input('輸入正整數b:'))
if (a<=0 or b<=0):           # 輸入不是正整數, 結束程式
    print('請輸入2個正整數')
else:
    for i in range(1, a*b+1):
        if(i%a==0 and i%b==0):
            break
    print("%d和%d的最小公倍數是:%d" % (a, b, i) )

範例1:找尋最小公倍數

  • 輸入正整數a, b; 找出兩者的最小公倍數
# 設定數字列表
numbers = [1, 5, 8, 12, 15, 20, 25]

# 輸入想要搜尋的數字
target = int(input("請輸入您要搜尋的數字:"))

# 使用 for 迴圈遍歷列表
for number in numbers:
    if number == target:
        print(f"找到目標數字:{target}")
        break  # 找到後結束迴圈
else:
    # 只有在未找到時才執行這個 else 區塊
    print(f"列表中未找到數字 {target}")

範例2:遍歷串列以搜尋特定值,一旦找到目標值,就使用 break 結束迴圈。

迴圈特殊指令continue(2/2)

基本語法

條件式若成立: 跳出迴圈

while迴圈也適用

範例

continue: 跳過該回合迴圈(後續回合繼續執行)

for 迴圈變數 in 數列1:
    程式碼1...
    if 條件式:
        break
    程式碼2...
迴圈後程式碼
for i in range(1,11):
    if i%2==0:   # 跳過偶數
        continue
    print(i, end=",")
# 設定數字範圍
numbers = range(1, 21)

# 初始化總和變數
even_sum = 0

# 使用 for 迴圈篩選偶數
for number in numbers:
    if number % 2 != 0:
        continue  # 若為奇數,則跳過當前迴圈
    even_sum += number

# 使用 f-string 輸出結果
print(f"1 到 20 的所有偶數總和為:{even_sum}")

範例:使用 for 迴圈遍歷範圍內的數字,並篩選出偶數來計算其總和。

考古題練習

  • 請使用迴圈敘述撰寫一程式,讓使用者輸入一個正整數(<100),然後以三角形的方式依序輸出此數的階乘結果。
    * 提示:輸出欄寬為 4,且需靠右對齊。

輸出函式

資料儲存型態 

Python 的4種資料儲存型態

內含多個項目

可修改

內含多個項目

不可修改

元組

內含多個內容相異的項目

無先後次序

內含多個key-value對

可修改

有先後次序

串列

認識串列

串列 宣告(1/5)

scores = [1, 2, 3, 4, 5]  # 建立5個元素串列
print(scores)             # 印出所有元素
print(scores[3])          # 印出第4個元素

串列 (list) 宣告:

串列名稱 = [元素1, 元素2, 元素3..., 元素N]
  • 串列:以[ ]包含所有項目, 逗點分隔
  • 讀取個別元素:串列名稱[索引值]
  • 元素1~N依序為:串列名稱[0],...串列名稱[N-1]  (索引值從0起算)

範例

  [1, 2, 3, 4, 5]

  4

執行結果

串列讀取串列元素(2/5)

範例

name_list = [23, 18, 22, 31, 18]
print(name_list[0])      # 印出第一個元素(編號0)
# 初始化一個串列
fruits = ["apple", "banana", "cherry"]

# 新增元素到串列末尾
fruits.append("orange")
print(f"新增元素後的串列: {fruits}")

# 刪除特定元素
fruits.remove("banana")
print(f"刪除元素後的串列: {fruits}")

# 插入元素到特定位置
fruits.insert(1, "blueberry")
print(f"插入元素後的串列: {fruits}")

# 修改元素
fruits[2] = "strawberry"
print(f"修改後的串列: {fruits}")

# 訪問串列中的特定元素
print(f"第一個水果是: {fruits[0]}")

初始化串列、新增、刪除、插入、修改和訪問元素。

讀取串列個別元素的方式: 串列名稱[i],i: 從0開始算起

串列串列切片(3/5)

取出部分元素:
       取出從start到end-1位置的內容

       其他用法:

串列名稱[start:end]
# name_list為某串列變數名稱
name_list[start:end]      # 從start到n-1
name_list[:n]             # 取得前n個(0~n-1)
name_list[n:]             # 取得n到串列最後
name_list[-n:]            # 取得串列後n個
name_list[:]              # 取得所有元素(複製)
# 初始化串列
letters = ["a", "b", "c", "d", "e", "f", "g"]

# 訪問前 3 個元素
first_three = letters[:3]
print(f"前 3 個字母: {first_three}")

# 訪問從第 2 個到第 5 個元素
middle_letters = letters[1:5]
print(f"第 2 到第 5 個字母: {middle_letters}")

# 訪問最後 2 個元素
last_two = letters[-2:]
print(f"最後 2 個字母: {last_two}")

串列max()、min()與sum() (4/5)

Python內建統計運算函數:適用於全是數值內容的串列

最高得分 =  31
最低得分 =  18
得分總計 =  113

執行結果

# 初始化數字串列
numbers = [3, 7, 1, 9, 4, 5]

# 找出最大值
max_value = max(numbers)
print(f"串列中的最大值: {max_value}")

# 找出最小值
min_value = min(numbers)
print(f"串列中的最小值: {min_value}")

# 計算總和
total_sum = sum(numbers)
print(f"串列中的總和: {total_sum}")

# 計算串列長度
length = len(numbers)
print(f"串列長度: {length}")

串列串列元素個數(5/5)

範例

# 假設這是一個購物車中的商品列表
shopping_cart = ["laptop", "mouse", "keyboard", "monitor"]

# 使用 len() 函數來檢查購物車中的商品數量
cart_size = len(shopping_cart)

# 根據商品數量提供不同的折扣
if cart_size == 0:
    print("購物車是空的,請選購商品!")
elif cart_size < 3:
    print(f"購物車有 {cart_size} 件商品,目前沒有折扣。")
elif cart_size <= 5:
    print(f"購物車有 {cart_size} 件商品,享受 10% 的折扣!")
else:
    print(f"購物車有 {cart_size} 件商品,享受 20% 的折扣!")

len()函式: 回傳串列元素個數

根據購物車的長度,程式會判斷給予不同的提示和折扣

練習:神奇8號球(維基百科)

請參考維基百科有關神奇8號球的「答案」部份,建立一個答案串列;並請撰寫一個問答程式,使用無窮迴圈,讓使用者輸入問題,當輸入的問題是-1時才結束程式,否則,不管輸入問題為何,都會從答案串列,隨機挑選一個答案回覆。

串列練習

import random
# 如要隨機產生一個介於1~20的數字,可呼叫random.randInt(1,20)

# 提示
my_list = ['a', 'b', 'c']    # 如有3個元素的串列
choice = random.randint(0, len(my_list)-1) # 產生亂數: 介於0到(串列長度-1)
print(f'產生亂數:{choice}, 串列內容為{my_list[choice]}')

串列功能

  • 搜尋: index()
  • 計數: count()
  • 新增: append(), insert()
  • 刪除: remove(), pop(), del
  • 排序: sort(), sorted()
  • 反轉: reverse()

串列功能 搜尋與計數(1/3)

scores = [80, 78, 60, 83, 60]
print(scores.count(60))
print(scores.count(90))
2
0

執行結果

計數:某個元素是否出現?

  • 回傳串列中某元素總共出現多少次
  • 串列.count(s),其中s ←要找的元素值

count()

# 初始化一個串列,其中有重複元素
numbers = [1, 2, 2, 3, 4, 2, 5]

# 計算 2 出現的次數
count_of_two = numbers.count(2)
print(f"數字 2 出現了 {count_of_two} 次")

如何使用 count() 方法來計算某個元素在串列中出現的次數。

串列功能 練習

import random

# 初始化一個空的串列來儲存每次擲骰子的結果
dice_rolls = []

# 模擬擲骰子 100 次
for _ in range(100):
    roll = random.randint(1, 6)  # 隨機產生 1 到 6 之間的整數,模擬骰子
    dice_rolls.append(roll)  # 將點數存入串列

# 使用 count() 函數來統計點數 3 出現的次數
count_of_three = dice_rolls.count(3)

# 使用 f-string 輸出結果
print(f"在 100 次擲骰子中,點數 3 出現了 {count_of_three} 次。")

範例:模擬擲一個骰子100次,每次都將點數存入串列,擲完100次後,利用count()統計點數3出現的次數

串列功能 元素新增/刪除(2/3)

list1 = [1,2,3,4,5,6]  # 元素0~5
list1.append("新元素")  # 加在串列最後
print(list1[6])        # 印出"新元素"
print(len(list1))      # list1的長度:7
新元素
7

執行結果

增加串列元素?

  • scores串列: 儲存所有測驗分數
  • 每當多一次測驗分數: 加入scores串列

元素值: 加在串列最後

insert(): 加在指定位置

串列.append(元素值)
串列.insert(索引值,元素值)
list1 = [1,2,3,4,5,6]  # 元素0~5
list1.insert(3, "新元素")# 加在索引值位置
print(list1[3])        # 印出"新元素"
print(len(list1))      # list1的長度: 7
新元素
7

執行結果

串列功能 元素新增/刪除(3/3)

# 初始化一個空的顧客名單
customer_list = []

# 新增 5 位顧客的姓名
for i in range(5):
    # 輸入顧客姓名
    customer_name = input("輸入顧客姓名:")
    
    # 將顧客姓名新增到串列中
    customer_list.append(customer_name)

# 使用 f-string 輸出新增後的顧客名單
print(f"新增的顧客名單: {customer_list}")

範例:利用 list.append() 方法來動態新增 5 筆資料到串列中

串列功能 練習

練習:使用無窮迴圈從空串列開始,使用append()逐步增加字串串列內容(例如神奇8號球需要的答案串列),直到輸入空字串才結束建立串列的工作。當結束時,印出「串列的元素個數」,並以迴圈逐一印出串列內容。

my_list = ['想的美', '很有可能', '現在不能告訴你']

for item in my_list:
    print(item)

字典

認識字典:自訂索引值

字典 簡介(1/5)

字典

串列

自訂名稱(鍵) A~E (其他任意名稱亦可)

自動產生索引值: 0~(N-1)

字典 = {'A':1, 'B':2, 'C':3, 'D':4, 'E':5}
score = [1, 2, 3, 4, 5]

字典 簡介(2/5)

# ch9_3.py
fruits = {'西瓜':15, '香蕉':20, '水蜜桃':25}
noodles = {'牛肉麵':100, '肉絲麵':80, '陽春麵':60}
print("水蜜桃一斤 = ", fruits['水蜜桃'], "元")
print("牛肉麵一碗 = ", noodles['牛肉麵'], "元")

範例

字典建立函式dict():

價目表 = {'香蕉': 20, '蘋果': 50, '鳳梨': 80}
成績單 = dict(王小明=80, 李小鳳=70, 張小華=75)
print(成績單)
print(成績單['王小明'])

範例

水蜜桃一斤 =  25 元
牛肉麵一碗 =  100 元

執行結果

dict()函式中,「鍵」若為字串不能加引號

dict()

  {'王小明': 80, '李小鳳': 70, '張小華': 75}

80

執行結果

列出字典的元素?以鍵取值

字典名稱 = {鍵1: 值1, 鍵2: 值2, 鍵3: 值3..., 鍵N: 值N}

字典 新增與修改元素(3/5)

成績單 = dict(王小明=80, 李小鳳=70, 張小華=75)
成績單['王小明'] = 90     # 修改
成績單['春嬌'] = 88       # 鍵不存在:新增
print(成績單)

範例

{'王小明': 90, '李小鳳': 70, '張小華': 75, '春嬌': 88}

執行結果

新增/修改元素內容

字典 (dict) 修改與新增:

# ch9_5.py
fruits = {'西瓜':15, '香蕉':20, '水蜜桃':25}
fruits['橘子'] = 18
print(fruits)
print("橘子一斤 = ", fruits['橘子'], "元")

範例

{'西瓜': 15, '香蕉': 20, '水蜜桃': 25, '橘子': 18}
橘子一斤 =  18 元

執行結果

新增內容

字典 新增與刪除元素(4/5)

# 初始化一個字典來存儲員工資料
employee_dict = {
    101: "Alice",
    102: "Bob",
    103: "Charlie"
}
# 新增一位員工到字典中
employee_dict[104] = "David"  # 新增員工編號 104 和姓名 "David"
print(f"新增員工後的字典: {employee_dict}")

# 刪除一位員工
del employee_dict[102]  # 刪除員工編號 102 的員工 "Bob"
print(f"刪除員工後的字典: {employee_dict}")

# 使用 pop() 方法刪除並返回刪除的值
removed_employee = employee_dict.pop(103)  # 刪除員工編號 103 的員工 "Charlie"
print(f"使用 pop() 方法刪除的員工: {removed_employee}")
print(f"使用 pop() 後的字典: {employee_dict}")

# 新增多位員工
employee_dict.update({105: "Eve", 106: "Frank"})  # 新增兩位員工
print(f"新增多位員工後的字典: {employee_dict}")

範例:新增/刪除員工資料

字典 修改元素

# 初始化一個字典來存儲員工的薪資資料
employee_salaries = {
    "Alice": 50000,
    "Bob": 60000,
    "Charlie": 55000
}

# 修改某位員工的薪資
employee_salaries["Bob"] = 65000  # 將 Bob 的薪資更新為 65000
print(f"修改 Bob 薪資後的字典: {employee_salaries}")

# 如果員工存在,則調整他們的薪資
if "Alice" in employee_salaries:
    employee_salaries["Alice"] += 5000  # Alice 的薪資增加 5000
print(f"調整 Alice 薪資後的字典: {employee_salaries}")

範例:修改員工資料

字典 len()函數(5/5)

# 初始化一個字典來存儲產品庫存資料
product_inventory = {
    "Laptop": 50,
    "Smartphone": 120,
    "Tablet": 75,
    "Headphones": 200
}

# 使用 len() 計算產品的總數(有多少種產品)
product_count = len(product_inventory)

# 使用 f-string 輸出結果
print(f"目前有 {product_count} 種產品在庫存列表中。")

# 如果產品數量超過某個值,提醒管理員
if product_count > 3:
    print("注意:產品種類超過了 3 種,請檢查是否需要補貨。")
else:
    print("產品種類數量在合理範圍內。")

取得字典元素數量:len()函數

字典進階功能

  • 檢查:鍵是否存在
  • 取所有鍵:.keys()
  • 取所有值:.values()
  • 取所有「鍵」-「值」對:.items()

字典進階功能檢查鍵(1/4)

某個鍵是否存在?

  • 回傳True(存在) / False(不存在)
成績單 = dict(王小明=80, 李小鳳=70, 張小華=75)
print('春嬌' in 成績單)      # False
print('王小明' in 成績單)    # True
請輸入鍵(key) = 水果
請輸入值(value) = 100
新的fruits字典內容 =  {'西瓜': 15, '香蕉': 20, '水蜜桃': 25, '水果': '100'}

執行結果

'鍵' in 字典

# ch9_15.py
fruits = {'西瓜':15, '香蕉':20, '水蜜桃':25}
key = input("請輸入鍵(key) = ")
value = input("請輸入值(value) = ")
if key in fruits:
    print("%s已經在字典了" % key)
else:
    fruits[key] = value
    print("新的fruits字典內容 = ", fruits)

字典進階功能取所有鍵(2/4)

取得所有鍵?

  • 需搭配字典.get()函式
{'王小明': 80, '李小鳳': 70, '張小華': 75}

dict_keys(['王小明', '李小鳳', '張小華'])

執行結果

字典.keys()

成績單 = dict(王小明=80, 李小鳳=70, 張小華=75)
print(成績單)           # 鍵/值對
print(成績單.keys())    # 只取得鍵

字典無法用for迴圈直接處理

字典.keys(): 得到dict_keys型別資料

成績單 = dict(王小明=80, 李小鳳=70, 張小華=75)
for item in 成績單.keys():
    print('%s的成績是%d' % (item, 成績單.get(item)))
王小明的成績是80
李小鳳的成績是70
張小華的成績是75

執行結果

字典進階功能取所有值(3/4)

取得所有值?

{'王小明': 80, '李小鳳': 70, '張小華': 75}
dict_values([80, 70, 75])

執行結果

字典.values()

成績單 = dict(王小明=80, 李小鳳=70, 張小華=75)
print(成績單)             # 鍵/值對
print(成績單.values())    # 只取得值

字典.values(): 得到dict_values型別資料

成績單 = dict(王小明=80, 李小鳳=70, 張小華=75)
values = 成績單.values()       # 所有值
avg = sum(values) / len(values)
print(avg)
75.0

執行結果

字典無法用for迴圈直接處理

字典進階功能取所有鍵-值組合(4/4)

取得所有鍵-值組合?

  • 搭配兩個迴圈變數, 可分別對應鍵、值
{'王小明': 80, '李小鳳': 70, '張小華': 75}
dict_items([('王小明', 80), ('李小鳳', 70), ('張小華', 75)])

執行結果

字典.items()

成績單 = dict(王小明=80, 李小鳳=70, 張小華=75)
print(成績單)             # 鍵/值對
print(成績單.items())    # 只取得值

字典.items(): 得到dict_dict型別資料

成績單 = dict(王小明=80, 李小鳳=70, 張小華=75)

for key, val in 成績單.items():
    print("%s的成績是:%3d" % (key, val))
王小明的成績是: 80
李小鳳的成績是: 70
張小華的成績是: 75

執行結果

2個迴圈變數: 1st對應「鍵], 2nd對應「值」

字典進階功能範例

範例:成績查詢與新增

  • 修改之前輸入程式,但程式結束後統計及格人數
成績單 = dict(王小明=80, 李小鳳=70, 張小華=75)
while True:
    name = input('輸入學生姓名:(直接按Enter結束)')
    if name == '':
        break
    if name in 成績單:
        print('%s的成績是: %3d' % (name,成績單.get(name)))
    else:
        score = int(input('輸入成績:'))
        成績單[name] = score
        print(成績單)
及格人數 = 0
for score in 成績單.values():
    if score >= 60:
        及格人數 += 1
print('及格人數:%d' % 及格人數)

字典進階功能練習

你正在設計手遊,遊戲裡需要一個存放玩家寶物的倉庫。字典剛好可以做為倉庫的資料結構,期中,鍵(key)為「寶物名稱」的字串,值(value)則是寶物的數量,例如:

抓寶遊戲的倉庫

{'火把': 3, '金幣': 200, '盾牌': 2, '匕首': 8}

試著完成一個程式,可以不斷新增寶物到倉庫裡

程式結束時,則印出所有寶物如下(注意名稱置左對齊、數量則置右):

火把             3
金幣           200
盾牌             2
匕首             8

字典進階功能延伸練習

承前一練習,以字典當為玩家寶物倉庫的資料結構。請將程式進一步擴充,當新增寶物結束後,進入下一個迴圈,可以不斷抓寶—每次抓寶以產生亂數串列的方式模擬,以下為例:

抓寶遊戲倉庫的延伸練習

import random
# 假設有這些種不同的寶物
所有寶物串列 = ['火把','金幣','盾牌','匕首','寶劍','斗篷','馬靴']

for i in range(5):    # 此處以產生五次抓寶結果為例
    # random.choices()可隨機產生k個元素的串列,元素從第一個參數的串列挑選
    抓寶串列 = random.choices(所有寶物串列, k=random.randint(1,5))
    print(抓寶串列)
['盾牌', '寶劍', '金幣', '金幣']
['金幣', '金幣', '盾牌']
['金幣', '寶劍']
['火把']
['盾牌', '盾牌', '匕首']

輸出結果

字典進階功能延伸練習(續)

請完成將串列加入字典,更新寶物倉庫的數量,例如抓到下列寶物:

則字典裡的這三種寶物的數量分別多1, 1 , 2

['盾牌', '寶劍', '金幣', '金幣']

函式Function

Function

發音: Func-shun

函式: 一段很容易重複使用的程式碼

Parameter

發音: Pa-rame-ter

參數: 特殊變數,用來傳遞資料進函式

def Hello():         # 定義函式
    print('Hello')   # 函式主體

Hello()    # 呼叫函式Hello
Hello()    # 可多次呼叫
def Km2Mile(distance):    # 需要參數之函式
    mile = distance/1.609
    return mile           # 函式回傳值

speed = Km2Mile(150)      # 呼叫函式
print('%6.1f' % speed)

函式定義好之後,不會直接執行,可重複呼叫使用

函式可接受參數、回傳計算值