SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
9 函式
結語
早期的程式設計是以函式設計為主,每遇到一個複雜問題首先就
是加以分解成一個個小問題,每個小問題用一個簡單函式來取代。但
對更大型的問題,可能要分解成好幾層問題,逐步分解,最後才成許
多小問題。如此整個程式就是由許多函式組合而成,程式設計就是函
式設計,這種設計理念被稱為函式導向的程式設計,這與後來的物件
導向程式設計有所不同。
這兩者程式設計方式的最大差別是前者的資料與處理資料的函式
是各自獨立的,資料可不透過函式來變更。物件導向程式設計則將資
料與函式綁在一起,資料都是透過函式來存取更動,資料不會「意外
」被更動而不知,對大型程式的開發來說,沒有「意外」是很重要的
一件事。
以下的習題由於題目規模不大,都可不需透過函式來完成程式設
計,但嫻熟的利用函式來開發程式仍是學習程式設計的一個重要基本
功夫,在此學習階段還是多以函式設計方式加以練習。
58
9 函式
習題 1
 撰寫十進位轉換為 n 進位函式,輸入一個十進位數字與 n ,
回傳字串,以下為輸出範例。
59
> 234
2 進位 : 11101010
3 進位 : 22200
4 進位 : 3222
...
9 進位 : 280
9 函式
習題 2
 撰寫 tranpose 函式傳入二維 m × n 串列,輸出其轉置
串列(transpose),二維串列請以亂數設定。以下 A 串列
由亂數產生,B 由 transpose 函式回傳。
60
A :
1 1 2
3 3 1
1 2 1
2 2 1
B :
1 3 1 2
1 3 2 2
2 1 1 1
9 函式
習題 3
 某程式內使用以下程式碼設定兩矩陣、計算其乘積、最後印出來:
61
# 亂數設定 m , s , n
m , s , n = ( random.randint(2,4) for x in range(3) )
a = set_matrix(m,s,2) # a 為 m x s 矩陣,元素都在 [0,2] 之間
b = set_matrix(s,n,2) # b 為 s x n 矩陣,元素都在 [0,2] 之間
c = matrix_mul(a,b) # c 為 a b 乘積
print_matrix(”A”,a) # 印出 a 矩陣,第一列顯示 A
print_pmatrix(”B”,b) # 印出 b 矩陣,第一列顯示 B
print_matrix(”C = A B”,c) # 印出 c 矩陣,第一列顯示 C = A B
以下為輸出:
A :
1 2 2
0 1 0
B :
2 1 1 2
2 0 2 2
0 0 2 1
C = A B :
6 1 9 8
2 0 2 2
9 函式
習題 4
 撰寫一函式,傳入數字 n ,回傳由 1 到 的順時鐘螺旋
方陣後印出,以下為主函式型式:
62
def main() :
n = int(input("> "))
a = rotating_mat(n)
print_matrix("Rotating Matrix",a)
以下為輸出:
> 7
Rotating Matrix :
1 2 3 4 5 6 7
24 25 26 27 28 29 8
23 40 41 42 43 30 9
22 39 48 49 44 31 10
21 38 47 46 45 32 11
20 37 36 35 34 33 12
19 18 17 16 15 14 13
9 函式
習題 5
 參考唐詩直行排列範例,將其改寫為函式,傳入詩句與每直排 n
個字,回傳詩的直排字串陣列。然後利用此函式以橫向方式依次列
印 n 由 5 到 10 六種直排排列詩句,以下為輸出結果:
63
花夜處春 多風處春 聲聞春 落啼春 多鳥春 夜春
落來處眠 少雨聞眠 花啼眠 知鳥眠 少夜眠 來眠
知風聞不 聲啼不 落鳥不 多夜不 來不 風不
多雨啼覺 花鳥覺 知夜覺 少來覺 風覺 雨覺
少聲鳥曉 落夜曉 多來曉 風曉 雨曉 聲曉
知來處 少風處 雨處 聲處 花處
雨處 聲處 花處 落處
花聞 落聞 知聞
知啼 多啼
少鳥
提示:使用全型空格 chr(12288) 處理所有的空白部份
9 函式
習題 6
 參考第 80 頁於木板上呈現點矩數字習題,撰寫函式輸入個
位數與木板高度,函式回傳數字在木板上隨意高度的點矩陣
陣列,以下輸出的木板高度為 8。
64
> 3
----
----
3333
---3
3333
---3
3333
----
> 5
----
5555
5---
5555
---5
5555
----
----
> 9
----
9999
9--9
9999
---9
9999
----
----
> 2
2222
---2
2222
2---
2222
----
----
----
9 函式
習題 7
 修改上題,輸入任意數,合併各個位數的輸出成以下樣式,
以下圖案的木板高度為 10。
65
> 234786901
--2222--------------------------------------------------
-----2--------4--4--------------------9999--0000--------
--2222--------4--4--7777--------------9--9--0--0--------
--2-----3333--4444-----7--------------9999--0--0--------
--2222-----3-----4----7---8888--6666-----9--0--0--------
--------3333-----4----7---8--8--6-----9999--0000----1---
-----------3----------7---8888--6666----------------1---
--------3333--------------8--8--6--6----------------1---
--------------------------8888--6666----------------1---
----------------------------------------------------1---
9 函式
習題 8
 猜數字遊戲是中學生常玩的紙上數字推理遊戲,請撰寫程式
使用程式來猜數字,輸入被猜測數字,假設為 2345,數字
不重複,以下為某次程式執行的過程:
66
> 2890
6185 : 0A 1B
9523 : 0A 2B
3754 : 0A 0B
2960 : 2A 1B
2901 : 1A 2B
2890 : 4A 0B
比對時,若兩數字同位數的數字相同,得一A,若只有數字相同,
但位數不同,得一B。提示:可使用暴力法將所有數字一一測試,
但每次程式所猜測的數字其比對結果也要加以利用,藉以降低猜錯
的機率。
9 函式
習題 9
 修改大象習題程式,利用函式交換原始大象每列的斜線與反
斜線字元,印出以下兩隻對望的大象:
67
9 函式
習題 10
 使用 pylab.fill_between 函式,設計函式傳入兩個函式
參數與範圍,將兩函式間的區域塗滿顏色。以下為 sin(x)
與 在 x ∈ [−2π, 2π] 之間的區域。
68
9 函式
習題 11
69
 參考年曆範例,讀入年份,印出雙周月曆型式如下:
9 函式
習題 12
70
 參考年曆範例,讀入年份,印出以下兩個月份排在一起的年曆。
9 函式
習題 13
 撰寫函式,輸入一出生日期與天數 n ,回傳第 n 天的日期,
n 若為 1 代表生日當天。請利用此函式計算第 100 天,
1000 天與 10000 天的日期,例如:
71
> 生日: 2018 1 1
第 100 天 : 2018-4-10
第 1000 天 : 2020-9-26
第 10000 天 : 2045-5-18
9 函式
習題 14
 撰寫函式,傳入兩日期計算其相隔天數。例如:
72
1> 2018 1 1
2> 2018 4 10
相隔:99 天
1> 2045 5 18
2> 2018 1 1
相差 : 9999 天
提示:撰寫另一函式傳入日期,計算此日期是當年的第幾天。
9 函式
習題 15
 參考第五章數值積分法範例,撰寫三個積分函式,傳入函數
f(x),積分區間 [a,b],等份數 n:
73
# 矩形積分
def rintegral( f , a , b , n ) : ...
# 梯形積分
def tintegral( f , a , b , n ) : ...
# 辛普森積分 ( n 為偶數)
def sintegral( f , a , b , n ) : ...
以下為對 |sin(x) − cos(x)| dx 取 100 等份的數值積分結果:
矩形積分法 2.4023e+00 誤差: 1.189e-02
梯形積分法 2.4141e+00 誤差: 1.117e-04
辛普森積分法 2.4142e+00 誤差: 4.134e-09
9 函式
習題 16
 在數學上要計算兩個平面點 p(x1, y1) 與 q(x2, y2) 之間的距離通
常是利用以下的公式來求得:
平面上任兩點的距離一定大於等於零,且當兩點距離為零的唯一情況就是
兩點重疊。將這個概念稍加延伸,採用類似方式來計算兩個函數在 [a,b]
區間的「距離」。一種較常用作法是在 [a,b] 區間內計算兩個函數差值
平方的積分的平方根,也就是說,若兩函數分別為 f(x),g(x),則兩函
數在 [a,b] 區間的「距離」, d(f,g),可以寫成:
當兩個函式重疊時,距離剛好為零。請利用此定義,撰寫函式,傳入兩函
數,區間與等份,使用梯形積分法計算兩函數在此區間的「距離」。請計
算兩函數 f(x) = x 與 g(x) = 在 [0,1] 之間的距離 d(f,g)?
74
9 函式
習題 17
 在圓周上平分 n 個點產生 n 邊形,然後由圓心連到各點形
成 n 個三角形,將以上步驟撰寫成一函式,傳入 n ,畫出
由 n 個三角形所組合成的 n 多邊形,每個三角形隨意塗入
不同顏色,以下為 n 由 3 到 7 的所產生的圖形。
75
9 函式
習題 18
 參考第五章蝴蝶習題,撰寫函式,依次傳入蝴蝶串列 xs
與 ys 、旋轉角度 rang、縮放 r 倍、平移位置 dx 與
dy,回傳蝴蝶在新位置的串列,印出以下的 12 隻朝內圍
繞在一起的蝴蝶圖案。
在以上圖案,每隻蝴蝶在半徑為 17 的圓周上,縮放比為
1,各蝴蝶的旋轉角度與平移位置由其擺放位置計算得來。
76
9 函式
習題 19
 參考第五章畫出來的數字範例與上一章中文點陣習題,撰寫
函式,傳入中文字串,畫出中文字圖形,點的顏色以亂數設
定,以下為程式所畫出來的「中央一百」圖形。
77
> 中央一百
cbitmap.dat@web

Más contenido relacionado

La actualidad más candente (20)

Ch5 範例
Ch5 範例Ch5 範例
Ch5 範例
 
Ch2 教學
Ch2 教學Ch2 教學
Ch2 教學
 
Ch8 教學
Ch8 教學Ch8 教學
Ch8 教學
 
Ch9 範例
Ch9 範例Ch9 範例
Ch9 範例
 
Ch4 教學
Ch4 教學Ch4 教學
Ch4 教學
 
Ch6 教學
Ch6 教學Ch6 教學
Ch6 教學
 
Ch1 教學
Ch1 教學Ch1 教學
Ch1 教學
 
Ch5 教學
Ch5 教學Ch5 教學
Ch5 教學
 
Ch12 教學
Ch12 教學Ch12 教學
Ch12 教學
 
Ch12 範例
Ch12 範例Ch12 範例
Ch12 範例
 
Ch11 範例
Ch11 範例Ch11 範例
Ch11 範例
 
Ppt 1-50
Ppt 1-50Ppt 1-50
Ppt 1-50
 
Ch7 範例
Ch7 範例Ch7 範例
Ch7 範例
 
Ppt 26-50
Ppt 26-50Ppt 26-50
Ppt 26-50
 
Ppt 167-173
Ppt 167-173Ppt 167-173
Ppt 167-173
 
Ppt 101-119
Ppt 101-119Ppt 101-119
Ppt 101-119
 
Ch9 教學
Ch9 教學Ch9 教學
Ch9 教學
 
Ppt 1-25
Ppt 1-25Ppt 1-25
Ppt 1-25
 
Ch11 教學
Ch11 教學Ch11 教學
Ch11 教學
 
Ppt 51-77
Ppt 51-77Ppt 51-77
Ppt 51-77
 

Similar a Ch9 習題

OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
D2-ETao-show
D2-ETao-showD2-ETao-show
D2-ETao-showleneli
 
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號鍾誠 陳鍾誠
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月鍾誠 陳鍾誠
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Wei-Yu Chen
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Wade Huang
 
Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?wensheng wei
 
事件驱动编程
事件驱动编程事件驱动编程
事件驱动编程banq jdon
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
淘宝网前端开发面试题
淘宝网前端开发面试题 淘宝网前端开发面试题
淘宝网前端开发面试题 Lumend
 
Kissy design
Kissy designKissy design
Kissy designyiming he
 
基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现yiditushe
 
四天学会Ajax
四天学会Ajax四天学会Ajax
四天学会Ajaxmornone
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制maclean liu
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章浒 刘
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsHo Kim
 
软件工程 第五章
软件工程 第五章软件工程 第五章
软件工程 第五章浒 刘
 

Similar a Ch9 習題 (20)

OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
D2-ETao-show
D2-ETao-showD2-ETao-show
D2-ETao-show
 
Ch07
Ch07Ch07
Ch07
 
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享
 
Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?Java 6中的线程优化真的有效么?
Java 6中的线程优化真的有效么?
 
事件驱动编程
事件驱动编程事件驱动编程
事件驱动编程
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
淘宝网前端开发面试题
淘宝网前端开发面试题 淘宝网前端开发面试题
淘宝网前端开发面试题
 
Kissy design
Kissy designKissy design
Kissy design
 
基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现
 
四天学会Ajax
四天学会Ajax四天学会Ajax
四天学会Ajax
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
 
软件工程 第五章
软件工程 第五章软件工程 第五章
软件工程 第五章
 

Más de hungchiayang1 (20)

Exercise 1 3
Exercise 1 3Exercise 1 3
Exercise 1 3
 
P127 135 new
P127 135 newP127 135 new
P127 135 new
 
Python p.193 197
Python p.193 197Python p.193 197
Python p.193 197
 
Python differential equation
Python differential equationPython differential equation
Python differential equation
 
化學系 python 習題
化學系 python 習題化學系 python 習題
化學系 python 習題
 
化學系 python 練習
化學系 python 練習化學系 python 練習
化學系 python 練習
 
化學系 python 教學
化學系 python 教學化學系 python 教學
化學系 python 教學
 
Ppt 120-126
Ppt 120-126Ppt 120-126
Ppt 120-126
 
Ppt 151-151
Ppt 151-151Ppt 151-151
Ppt 151-151
 
Ppt 136-136
Ppt 136-136Ppt 136-136
Ppt 136-136
 
Ppt 143-143
Ppt 143-143Ppt 143-143
Ppt 143-143
 
Ppt 137-137
Ppt 137-137Ppt 137-137
Ppt 137-137
 
Ppt 150-150
Ppt 150-150Ppt 150-150
Ppt 150-150
 
Ppt 145-149
Ppt 145-149Ppt 145-149
Ppt 145-149
 
Ppt 138-142
Ppt 138-142Ppt 138-142
Ppt 138-142
 
Ppt 174-174
Ppt 174-174Ppt 174-174
Ppt 174-174
 
Ppt 144-144
Ppt 144-144Ppt 144-144
Ppt 144-144
 
Ppt 152-155
Ppt 152-155Ppt 152-155
Ppt 152-155
 
Ppt 156-156
Ppt 156-156Ppt 156-156
Ppt 156-156
 
Ppt 166-166
Ppt 166-166Ppt 166-166
Ppt 166-166
 

Ch9 習題

  • 1. 9 函式 結語 早期的程式設計是以函式設計為主,每遇到一個複雜問題首先就 是加以分解成一個個小問題,每個小問題用一個簡單函式來取代。但 對更大型的問題,可能要分解成好幾層問題,逐步分解,最後才成許 多小問題。如此整個程式就是由許多函式組合而成,程式設計就是函 式設計,這種設計理念被稱為函式導向的程式設計,這與後來的物件 導向程式設計有所不同。 這兩者程式設計方式的最大差別是前者的資料與處理資料的函式 是各自獨立的,資料可不透過函式來變更。物件導向程式設計則將資 料與函式綁在一起,資料都是透過函式來存取更動,資料不會「意外 」被更動而不知,對大型程式的開發來說,沒有「意外」是很重要的 一件事。 以下的習題由於題目規模不大,都可不需透過函式來完成程式設 計,但嫻熟的利用函式來開發程式仍是學習程式設計的一個重要基本 功夫,在此學習階段還是多以函式設計方式加以練習。 58
  • 2. 9 函式 習題 1  撰寫十進位轉換為 n 進位函式,輸入一個十進位數字與 n , 回傳字串,以下為輸出範例。 59 > 234 2 進位 : 11101010 3 進位 : 22200 4 進位 : 3222 ... 9 進位 : 280
  • 3. 9 函式 習題 2  撰寫 tranpose 函式傳入二維 m × n 串列,輸出其轉置 串列(transpose),二維串列請以亂數設定。以下 A 串列 由亂數產生,B 由 transpose 函式回傳。 60 A : 1 1 2 3 3 1 1 2 1 2 2 1 B : 1 3 1 2 1 3 2 2 2 1 1 1
  • 4. 9 函式 習題 3  某程式內使用以下程式碼設定兩矩陣、計算其乘積、最後印出來: 61 # 亂數設定 m , s , n m , s , n = ( random.randint(2,4) for x in range(3) ) a = set_matrix(m,s,2) # a 為 m x s 矩陣,元素都在 [0,2] 之間 b = set_matrix(s,n,2) # b 為 s x n 矩陣,元素都在 [0,2] 之間 c = matrix_mul(a,b) # c 為 a b 乘積 print_matrix(”A”,a) # 印出 a 矩陣,第一列顯示 A print_pmatrix(”B”,b) # 印出 b 矩陣,第一列顯示 B print_matrix(”C = A B”,c) # 印出 c 矩陣,第一列顯示 C = A B 以下為輸出: A : 1 2 2 0 1 0 B : 2 1 1 2 2 0 2 2 0 0 2 1 C = A B : 6 1 9 8 2 0 2 2
  • 5. 9 函式 習題 4  撰寫一函式,傳入數字 n ,回傳由 1 到 的順時鐘螺旋 方陣後印出,以下為主函式型式: 62 def main() : n = int(input("> ")) a = rotating_mat(n) print_matrix("Rotating Matrix",a) 以下為輸出: > 7 Rotating Matrix : 1 2 3 4 5 6 7 24 25 26 27 28 29 8 23 40 41 42 43 30 9 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13
  • 6. 9 函式 習題 5  參考唐詩直行排列範例,將其改寫為函式,傳入詩句與每直排 n 個字,回傳詩的直排字串陣列。然後利用此函式以橫向方式依次列 印 n 由 5 到 10 六種直排排列詩句,以下為輸出結果: 63 花夜處春 多風處春 聲聞春 落啼春 多鳥春 夜春 落來處眠 少雨聞眠 花啼眠 知鳥眠 少夜眠 來眠 知風聞不 聲啼不 落鳥不 多夜不 來不 風不 多雨啼覺 花鳥覺 知夜覺 少來覺 風覺 雨覺 少聲鳥曉 落夜曉 多來曉 風曉 雨曉 聲曉 知來處 少風處 雨處 聲處 花處 雨處 聲處 花處 落處 花聞 落聞 知聞 知啼 多啼 少鳥 提示:使用全型空格 chr(12288) 處理所有的空白部份
  • 7. 9 函式 習題 6  參考第 80 頁於木板上呈現點矩數字習題,撰寫函式輸入個 位數與木板高度,函式回傳數字在木板上隨意高度的點矩陣 陣列,以下輸出的木板高度為 8。 64 > 3 ---- ---- 3333 ---3 3333 ---3 3333 ---- > 5 ---- 5555 5--- 5555 ---5 5555 ---- ---- > 9 ---- 9999 9--9 9999 ---9 9999 ---- ---- > 2 2222 ---2 2222 2--- 2222 ---- ---- ----
  • 8. 9 函式 習題 7  修改上題,輸入任意數,合併各個位數的輸出成以下樣式, 以下圖案的木板高度為 10。 65 > 234786901 --2222-------------------------------------------------- -----2--------4--4--------------------9999--0000-------- --2222--------4--4--7777--------------9--9--0--0-------- --2-----3333--4444-----7--------------9999--0--0-------- --2222-----3-----4----7---8888--6666-----9--0--0-------- --------3333-----4----7---8--8--6-----9999--0000----1--- -----------3----------7---8888--6666----------------1--- --------3333--------------8--8--6--6----------------1--- --------------------------8888--6666----------------1--- ----------------------------------------------------1---
  • 9. 9 函式 習題 8  猜數字遊戲是中學生常玩的紙上數字推理遊戲,請撰寫程式 使用程式來猜數字,輸入被猜測數字,假設為 2345,數字 不重複,以下為某次程式執行的過程: 66 > 2890 6185 : 0A 1B 9523 : 0A 2B 3754 : 0A 0B 2960 : 2A 1B 2901 : 1A 2B 2890 : 4A 0B 比對時,若兩數字同位數的數字相同,得一A,若只有數字相同, 但位數不同,得一B。提示:可使用暴力法將所有數字一一測試, 但每次程式所猜測的數字其比對結果也要加以利用,藉以降低猜錯 的機率。
  • 10. 9 函式 習題 9  修改大象習題程式,利用函式交換原始大象每列的斜線與反 斜線字元,印出以下兩隻對望的大象: 67
  • 11. 9 函式 習題 10  使用 pylab.fill_between 函式,設計函式傳入兩個函式 參數與範圍,將兩函式間的區域塗滿顏色。以下為 sin(x) 與 在 x ∈ [−2π, 2π] 之間的區域。 68
  • 12. 9 函式 習題 11 69  參考年曆範例,讀入年份,印出雙周月曆型式如下:
  • 13. 9 函式 習題 12 70  參考年曆範例,讀入年份,印出以下兩個月份排在一起的年曆。
  • 14. 9 函式 習題 13  撰寫函式,輸入一出生日期與天數 n ,回傳第 n 天的日期, n 若為 1 代表生日當天。請利用此函式計算第 100 天, 1000 天與 10000 天的日期,例如: 71 > 生日: 2018 1 1 第 100 天 : 2018-4-10 第 1000 天 : 2020-9-26 第 10000 天 : 2045-5-18
  • 15. 9 函式 習題 14  撰寫函式,傳入兩日期計算其相隔天數。例如: 72 1> 2018 1 1 2> 2018 4 10 相隔:99 天 1> 2045 5 18 2> 2018 1 1 相差 : 9999 天 提示:撰寫另一函式傳入日期,計算此日期是當年的第幾天。
  • 16. 9 函式 習題 15  參考第五章數值積分法範例,撰寫三個積分函式,傳入函數 f(x),積分區間 [a,b],等份數 n: 73 # 矩形積分 def rintegral( f , a , b , n ) : ... # 梯形積分 def tintegral( f , a , b , n ) : ... # 辛普森積分 ( n 為偶數) def sintegral( f , a , b , n ) : ... 以下為對 |sin(x) − cos(x)| dx 取 100 等份的數值積分結果: 矩形積分法 2.4023e+00 誤差: 1.189e-02 梯形積分法 2.4141e+00 誤差: 1.117e-04 辛普森積分法 2.4142e+00 誤差: 4.134e-09
  • 17. 9 函式 習題 16  在數學上要計算兩個平面點 p(x1, y1) 與 q(x2, y2) 之間的距離通 常是利用以下的公式來求得: 平面上任兩點的距離一定大於等於零,且當兩點距離為零的唯一情況就是 兩點重疊。將這個概念稍加延伸,採用類似方式來計算兩個函數在 [a,b] 區間的「距離」。一種較常用作法是在 [a,b] 區間內計算兩個函數差值 平方的積分的平方根,也就是說,若兩函數分別為 f(x),g(x),則兩函 數在 [a,b] 區間的「距離」, d(f,g),可以寫成: 當兩個函式重疊時,距離剛好為零。請利用此定義,撰寫函式,傳入兩函 數,區間與等份,使用梯形積分法計算兩函數在此區間的「距離」。請計 算兩函數 f(x) = x 與 g(x) = 在 [0,1] 之間的距離 d(f,g)? 74
  • 18. 9 函式 習題 17  在圓周上平分 n 個點產生 n 邊形,然後由圓心連到各點形 成 n 個三角形,將以上步驟撰寫成一函式,傳入 n ,畫出 由 n 個三角形所組合成的 n 多邊形,每個三角形隨意塗入 不同顏色,以下為 n 由 3 到 7 的所產生的圖形。 75
  • 19. 9 函式 習題 18  參考第五章蝴蝶習題,撰寫函式,依次傳入蝴蝶串列 xs 與 ys 、旋轉角度 rang、縮放 r 倍、平移位置 dx 與 dy,回傳蝴蝶在新位置的串列,印出以下的 12 隻朝內圍 繞在一起的蝴蝶圖案。 在以上圖案,每隻蝴蝶在半徑為 17 的圓周上,縮放比為 1,各蝴蝶的旋轉角度與平移位置由其擺放位置計算得來。 76
  • 20. 9 函式 習題 19  參考第五章畫出來的數字範例與上一章中文點陣習題,撰寫 函式,傳入中文字串,畫出中文字圖形,點的顏色以亂數設 定,以下為程式所畫出來的「中央一百」圖形。 77 > 中央一百 cbitmap.dat@web