Está en la página 1de 46

• money = ‘10200’ National Taiwan University

• range(5-1, -1, -1)  len(money)-1 比較有彈性


• 中間的-1是讓i可以走到0,最後-1是為了反過
來(ex: 4, 3, 2, …)  因為要換算位數 (億、萬…)
• 所以for迴圈讓i的值從4開始,一直到0
• money[len(money) - i - 1] 是為了取 money的數

• i = 4  money[5 - 4 - 1]  1 ,所以 num = 1
• ind = int(num)  為了轉為國字,先找出index

Index 0 1 2 3 4 5 6 7 8 9
Value 零 壹 貳 參 肆 伍 陸 柒 捌 玖

1
National Taiwan University

HW4_1 (20分)
• 題目:請寫程式讓使用者輸入一行字串,這行自串為一組數據資
料,資料格式為一個序號,以及對應的一個正整數。key為偶數時
相加,key為奇數時相減,請求出並印出結果。(序號有可能跳號)

• Input: • Input:
• 1:12 2:11 3:13 4:15 • 1:2 3:5
• Output: • Output:
•1 • -7

2
參考解答 National Taiwan University

3
HW4_2 (40分) National Taiwan University

• 題目:請寫一個麥當勞點餐系統,可以自動計算金額,並且檢查點餐
是否有錯誤。(輸入exit離開系統)
• Input:
• 用逗號分隔餐點(ex:1,2,5)
• Output:
• 若客人點了不在菜單的餐點:
• 抱歉我們沒有 n 號餐點
• 告知客人點了哪幾樣餐點和
總金額
• 您點了 x 份 xxx,一共 xx 元

4
National Taiwan University

5
National Taiwan University

HW4_3 (40分)
• 題目:請寫出程式隨機產生一個3*3的賓果盤 (數字範圍為1~9,且不
重複),使用者輸入 3 個正整數 (範圍1~9 ,且不重複)後,請確認是
否有成功連線(直、橫、斜對中一條即可)
• 輸出入:輸出隨機產生的表單、確認後的表單情況及是否成功連線
1 4 5 • Input: • Input:
6 2 7 •1 •1
8 9 3 •2 •2
•3 •7
• Output: • Output:
• 恭喜中獎! • 再接再厲!
6
National Taiwan University

HW4_3 Example
• 提示:

7
解題
National Taiwan University

• 所有中獎的index組合:
• 賓果盤 • 橫排:
• (0, 1, 2), (3, 4, 5), (6, 7, 8)
1 4 5
• 直排:
6 2 7 • (0, 3, 6), (1, 4, 7), (2, 5, 8)
8 9 3 • 對角線:
• (0, 4, 8), (2, 4, 6)

• index
• 檢查以上所有組合中,是否有包含三個*的組合
0 1 2
• 是  中獎
3 4 5
• 否  沒中獎
6 7 8
8
National Taiwan University

0 1 2
3 4 5
6 7 8

9
National Taiwan University

• 讓使用者輸入號碼,並且修改賓果盤

10
National Taiwan University

• 橫排:
• (0, 1, 2), (3, 4, 5), (6, 7, 8)
• 直排:
• (0, 3, 6), (1, 4, 7), (2, 5, 8)
• 對角線:
• (0, 4, 8), (2, 4, 6)
11
National Taiwan University

fuction
顏安孜 An-Zi Yen
azyen@nlg.csie.ntu.edu.tw
National Taiwan University

print()
• print([object, ...], *, sep=' ', end='\n', file=sys.stdout)
• 印出參數 (parameter) object 的內容, sep 為分隔符號, end 為結
尾符號, file 為輸出串流裝置,預設為 sys.stdout ,即是標準輸出
裝置,通常會是螢幕

13
函式 (fuction)
National Taiwan University

• 重複使用程式的第一步是使用函式
• 函式是一種有名稱、獨立的程式片段
• 可以接收任何數量和型態的輸入參數,並回傳任何數量和型態的輸
出結果
• 將相關的程式指令組在一起,讓整體程式更為模組化 (Modularization)
• 我們要做的事情:
• 定義
• 呼叫

14
函式的語法
National Taiwan University

def <funcName>(<parameters>):
<body>

• def:函式定義 (define),是複合指令,因此需以冒號結尾,且其
本體指令群需縮排一層
• <funcName>:函式的名稱 (不可使用 Python 保留字,且需符合
Python 識別字格式的規定)
• <parameters>:函式的參數 (0 或多個)
• <body>:函式的本體指令群
15
用 def 定義函式 Python 程式的撰寫風格: National Taiwan University

函式前後均空 2 行

參數

引數
16
函式的回覆值與執行流程
National Taiwan University

• 回覆值的函式:函式在執行完畢會回覆值給呼叫程式
• 語法:在函式最後加上 return 指令,後面接一個或多個值或表示式

def <funcName>(<parameters>):
...
return <values>

17
National Taiwan University

SQUARE 名稱未定義, Python 不認得

18
National Taiwan University

• 函式的參數與函式內的變數都是區域變數

• 區域變數只能在其所定義的區域中使用,在該區域以外就無法使用
• 區域變數的壽命:函式開始執行時開始生命,函式執行完畢就結束
19
練習
National Taiwan University

• 題目:任意輸入 a、b、c 三個不同的正整數,判斷哪一個數字為


三個數字中的最大值

• Example:
• Input:
• a=3
•b=5
• c = 100
• Output:
• 最大值為 c
20
參考解答
National Taiwan University

21
National Taiwan University

return

22
function 中的 function
National Taiwan University

23
全域變數 (Global variable)
National Taiwan University

• 變數在所有地方都可使用

在函式中絕對不要
使用全域變數,應
該以參數方式將值
全域變數 傳給函式

24
National Taiwan University

• 當區域變數名稱與全域變數名稱
相同,區域變數會遮蓋全域變數

25
Math Library National Taiwan University

Function Description Example


sqrt(x) Return the square root of x sqrt(400)  40
exp(x) Return e raised to the power x exp(1)  2.71828182
log2(x) return the natural logarithm of x (base 2) log2(2)  1
fabs(x) Return the absolute value of x fabs(0.9)  0.9
fabs(-0.9)  0.9
gcd(a, b) Return the greatest common divisor of the integers a and b gcd(2, 5)  1
ceil(x) Return the ceiling of x, the smallest integer greater than or ceil(0.1)  1
equal to x ceil(-0.9)  0
floor(x) Return the floor of x, the largest integer less than or equal floor(0.1)  0
to x floor(-0.9)  -1

• https://docs.python.org/3/library/math.html 26
National Taiwan University

Import

27
National Taiwan University

time

• 算這一段code的執行時間
28
National Taiwan University

Random
函數 說明
randint(a, b) 回傳從 a 到 b 之間的整數。
choice(seq) 回傳從 seq 中的任一元素。
shuffle(x[, random]) 攪亂 x 中元素的順序。
random() 回傳 0 到 1 之間的數字。

29
National Taiwan University

30
簡單陳述 import from as
National Taiwan University

• 加上 as 後就能將原本模組
中的名稱改成自訂的識別字

31
練習
National Taiwan University

• 題目:建立一組 52 張撲克牌,洗牌後,平均發給 n 位玩家,並


且印出每位玩家的手牌
• suit = ["♠", "♥", "♦", "♣"]

32
參考解答
National Taiwan University

33
主函式 (Main function) National Taiwan University

34
練習: Craps
National Taiwan University

• Craps賭博遊戲 – 骰兩個骰子
• 第一次搖骰子
• 如果搖出了7點或11點 - 玩家勝
• 如果搖出了2點、3點或12點 - 莊家勝
• 如果搖出其他點數 - 遊戲繼續
• 繼續
• 如果搖出了7點 - 莊家勝
• 如果搖出了第一次搖的點數 - 玩家勝
• 如果搖出了其他點數 - 遊戲繼續

35
National Taiwan University

36
National Taiwan University

HW5
1. 命名方式:
• 學號_HW5_1.py
• 學號_HW5_2.py • 存成一份壓縮檔
• 學號_HW5_3.py • 命名為 01234567_HW5.zip
• 例如: 01234567_HW5_1.py

2. 繳交程式碼即可 (修正版的作業需繳交報告)
3. 第一版作業繳交期限: 2020/11/4(三) 23:59:59
4. 修正版作業繳交期限: 2020/11/8(日) 23:59:59
5. 上傳至數位學習平台(iLMS) 37
National Taiwan University

HW5_1 (30分)
• 題目:有一分數序列 2/1,3/2,5/3,8/5,13/8,21/13 …,請寫
程式求出這個數列的前n項之和
• Input:
• n = 20
• Output:
• 32.660260798641637
• Input:
•n=4
• Output:
• 6.7666666666666675
38
National Taiwan University

HW5_2 (30分)
• 題目:請寫出程式讓使用者任意從52張無任何順序排列的撲克牌(不含
鬼牌)抽出n張牌。並且從n張牌中幫使用者找到其中排序第m大的牌。
• 數字大小依據 K > Q > J > 10 > … > 2 > A 的順序排列
• 花色大小為♠ > ♥ > ♦ > ♣
• 先依照數字比較撲克牌之間的大小,若遇到相同數字,再比較花色
• (本題開放import library https://docs.python.org/3.8/library/)
• Input:
• n 和 m (分別為整數,若n為-1則停止程式)
• Output:
• 卡片
39
National Taiwan University

HW5_2
• 提示:
• sort()
• sorted()

每一輪會把抽出來
的牌放回去重新洗
牌,所以不會有牌
被抽完的狀況

40
National Taiwan University

HW5_3 (40分)
• 題目: 做一個骰寶遊戲, 讓使用者下注
(https://zh.wikipedia.org/wiki/%E9%AA%B0%E5%AF%B6
• 1. 使用者輸入下注的項目
1) 比大小(三骰總和為3或18則莊家贏):賠率 1:1
2) 壓其中兩個骰子的組合:賠率 1:10
3) 壓三個骰子都為一樣的值: 賠率 1:30
• 2. 依照輸入的下注項目輸入下注細節
1) 比大小: 輸入1代表壓大(總和11-17);輸入2代表壓小(總和4-10)
2) 壓其中兩個骰子的組合: 輸入兩個1-6的數值, ex: 1,3 (分兩次輸入)
3) 壓三個骰子都為一樣的值: 輸入一個1-6的數值, ex: 1
• 3. 使用者輸入下注金額
• 4. 輸出勝負結果 (結果&骰子點數) 41
National Taiwan University

HW5_3

分兩次輸入

42
LAB 5-1 終極密碼 National Taiwan University

• 規則:
• 一人當莊家,從指定數字範圍(例如 1–100)中選出一個正整數當密碼,
而且不能讓其他玩家知道。
• 玩家輪流猜數字,每猜一個數字,莊家就要告知密碼介於何範圍,一直
到密碼被猜中為止(例如密碼是 70,玩家猜 20,這時莊家要告知密碼
介於 20 至 100 之間)。
• 提示:
• randint():產生隨機整數
• input():讓使用者輸入內容
• int():將字串轉換成整數
• while loop:讓使用者重複猜數字
43
National Taiwan University

44
National Taiwan University

LAB 6-1
• 題目:給定一個 m*n 的二維矩陣,以及一個整數,請寫程式判斷
該數字是否在二維矩陣中。
• Example:
• Input:
• matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,50]]
• target = 13
• Input:
• Output:
• matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,50]]
• False • target = 3
• Output:
• True
45
j=0 j=1 j=2 j=3
參考解答
National Taiwan University

i=0 1 3 5 7
i=1 10 11 16 20
i=2 23 30 34 50

46

También podría gustarte