100% found this document useful (1 vote)
169 views239 pages

Python 1

Uploaded by

ERIC WEN
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
169 views239 pages

Python 1

Uploaded by

ERIC WEN
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

程式語言與設計

劉和師 老師 part 1
何謂程式語言
• 程式語言(programming language),是用來
定義電腦程式的形式語言。 它是一種被標準化
的交流技巧,用來向電腦發出指令。
• 維基百科,自由的百科全書 - Wikipedia

2
何謂程式語言
• 程式就是指揮電腦動作的一連串指令
• 只要用到電腦的地方,就需要程式

3
何謂程式語言
• 人的語言有中文、英文、日文等,說法不同,但
都表達同一個意思

4
何謂程式語言
• 程式也有多種語言,寫法也許不同,但都可以表
達同一個意思

5
最底層的機械語言
• 其實電腦只認得這個…

• 電腦內部是數位的世界
,只認得0與1

• 這叫機械語言,但這對
人類來說太困難了…

6
組合語言
• 所以有了組合語言(Assembly),它使用助憶碼
(Mnemonics)來代替和表示特定低階機器語言
的操作,硬體工程師一定要會。

• 但還是很難…

7
高階語言
• 為了更方便與電腦溝通,能更像人與人之間在對
話,所以有了高階語言。

8
唯一的困難
• 高階語言有很多種,應用的領域也不同,唯一相
同的是,都是用...

•英文!!
9
我們用英文,但這不是英文課
• 不用害怕,你要克服的不是英文,是心理障礙!
• 程式用到的英文很簡單,沒有甚麼過去式、未來
式這些,只有簡單的命令,還有你的邏輯能力。

10
程式語言發展的歷史

11
程式語言的分類

12
程式語言的比較

13
其他方式與電腦溝通
• 現在也有這種積木式語言,方便易學,但功能有
限,尚無法做出非常複雜的東西,適合小朋友

14
程式如何執行
• 電腦並不認得高階語言,只認得機器語言,所以
必須轉換成0101…才行。

15
轉換我們寫的程式到可執行檔
• 直譯式(Interpreter)語言執行程序:

• Python屬於此種執行方式。

16
轉換我們寫的程式到可執行檔
• 編譯式(Compiler)語言執行程序:

• 大部分高階語言屬於此種方式。

17
休息一下~

18
運算思維
• 你平時如何解決問題?

• 面對問題,你會先好好想一下嗎?

• 你的思考程序是甚麼?

19
運算思維
• 運算思維是指能構思一個有條理的程序,應用各
種運算方法或工具來解決問題的思維能力。

• 把你的問題分析好,再分解成一個個電腦可以幫
你解決的步驟。

• 你的大腦就是一台電腦,先在大腦中跑過一遍,
再去用電腦實現。

20
寫程式的流程
• 不是拿到問題就傻傻地做到電腦前
• 是如下圖

21
先想清楚
• 垃圾進,垃圾出(英語:Garbage in, garbage
out ,GIGO)。

• 先確認:
• 你要解決甚麼問題?
• 需要輸入甚麼?
• 需要輸出甚麼?
• 要用哪一種工具(語言)?

22
思考過程
• 一開始總是沒有頭緒的,先靜下來分析你要解決
的問題。
• (假設有這麼複雜...)

23
思考過程
• 抽象化和模型化,找出規則、規律、區塊等等。

「圖」的問題

24
思考過程
• 規劃成電腦可執行的步驟。

25
思考過程
• 寫程式(Coding)

26
思考過程
• 欣賞及確認執行成果。

• (要知道所有的遊戲都是程式寫出來的唷~)
27
演算法(Algorithms)
• 把問題抽象化和模型化,找出合理有效的解決步
驟。
• 就是解決問題的方法啦~

28
演算法(Algorithms)
• 面對不同類型的問題,使用適當的資料結構
(Data Structure)及演算法可以讓問題簡單很
多。
• 例如:
• 陣列(Array)
• 鏈結串列(Link List)
• 堆疊(Stack)
• 佇列(Queue)
• 樹(Tree)
• 圖(Graph)

29
演算法(Algorithms)
• 一個好的演算法要求:
• 輸入:有零個或一個以上輸入。
• 輸出:應有一個或以上輸出。
• 明確性:演算法的描述必須無歧義,以保證演算法的
實際執行結果是精確地符合要求或期望,通常要求實
際執行結果是確定的。
• 有限性:必須在有限個步驟內完成任務。
• 有效性:又稱可行性。能夠實現,。

30
演算法的工具
• 流程圖(Flow Chart)是個不錯的方式,用簡單
的圖形來代表執行的步驟。

31
常用流程圖
• 圖例

32
常用流程圖
• 圖例

33
常用流程圖
• 對於簡單的問題,其實記住這四個也就夠了。

34
流程圖範例

35
流程圖範例

36
畫流程圖的工具
• 問題不複雜的話用手繪就行了。

37
畫流程圖的工具
• 如果需要精美或較複雜的應用,[Link]是個不
錯又免費的畫流程圖的工具軟體。

38
畫流程圖的工具
• 安裝後開啟程式選「流程圖」 「新增」

39
畫流程圖的工具

箭頭符號

點選流程圖,
再點選要使用的符號,
拖曳至適當的位置即可。

40
畫流程圖的工具
• 也可用線上版,直接在瀏覽器裡使用

41
畫流程圖的工具
• 點選Flowchart  Create

42
畫流程圖的工具
• 會先問你要存在哪兒

43
畫流程圖的工具
• 開始使用~ (右上方地球符號可以更換介面語
言)

44
畫流程圖的工具
• 可以選繁體中文(需要重新載入頁面)

45
想想看
• 颱風天到了,請寫一個防颱準備的流程圖

• (你會不會把門窗封住了才想到要去X聯買泡麵?)
46
這些益智遊戲可以多玩玩
• 過河問題:3個人和三個鬼要過河,可是只一隻
小船,一次只能載兩個,且在河兩邊鬼的數量不
能比人多,否則就會把人給吃了,怎麼樣才能安
全的過河呢?

47
這些益智遊戲可以多玩玩
• 比較複雜的過河遊戲:一個男人帶著兩個小男孩,一個女
人帶著兩個小女孩,一個警察帶著一個小偷,要過河,可是只有一
條小船,一次只能載兩個人,孩子和小偷不會划船。如果男人不在
則女人會教訓小男孩,如果女人不在男人則會教訓小女孩,如果警
察不在小偷則會傷害這些人。怎麼才能安全過河呢?

48
這些益智遊戲可以多玩玩
• 有六隻青蛙要過河,河的左邊有三隻,河的右邊有
三隻,中間一塊空白石頭。它們互不相讓。怎麼樣
才能過河呢?
• 規則:可向前跳不可向後,每次只能跳過1個青蛙。

49
這些益智遊戲可以多玩玩
• 河內塔:將左邊的圈圈移動到最右邊。規則一:
一次只能移動一個,規則二:任何時候不能發生
上面的圈圈比下面的圈圈大。

50
這些益智遊戲可以多玩玩
• 一筆畫問題:一筆畫走完所有線段,不能重複。

• 技巧:只要頂點引出的線為單數的頂點個數不大於2,這個幾
何圖形就可以一筆畫。

51
這些益智遊戲可以多玩玩
• 柯尼斯堡的七橋問題:要如何才能從某一塊土地
開始,將每座橋恰好經過一次,然後回到原地?

52
這些益智遊戲可以多玩玩
• 柯尼斯堡的七橋問題:要如何才能從某一塊土地
開始,將每座橋恰好經過一次,然後回到原地?

53
練習一下(畫出流程圖)
• 有兩串香蕉,比較它們的重量,
然後輸出哪一個比較重?

• 輸入三個數值a,b,c,比較它們
的大小,輸出最大的那個。

54
練習一下(畫出流程圖)
• 請寫一個流程圖,狀況如下:
• 今天晚餐要約小美吃飯,如果身上有$1000就吃
大餐,如果只有$500就吃牛肉麵,如果只有
$300就吃夜市,都不夠的話取消約會(慘…)。

55
多練習就會了
• 流程圖是你解決問題的想法及過程,沒有標準答
案,只要能解決問題就可以。
• 不過效率就有關係了,練習讓你的思考更清晰,
步驟更簡潔。

56
休息一下~

57
Python簡介
• Python 是一種泛用性的動態物件導向程式語言。
• Python是一種直譯式語言。
• 它可以在命令列模式下操作,也可以寫成Script檔。
• 附檔名為 .py。
• Python 可以執行在 Windows、Mac OS X、
Linux 等常見的作業系統平台和其它較少使用的作
業系統上,也可以在 Java 和 .Net 環境中執行。
• 透過 Jython,Python 能與 Java 合作愉快;
透過 IronPython,Python 能與 .Net 合作愉快。

58
Python簡介
• Python的設計哲學強調程式碼的可讀性和簡潔
的語法,尤其是使用空格縮排劃分程式碼塊。
(整齊的縮排很重要而且是必須的)。
• Python這個單字是一種蟒蛇,所以這個語言的
Logo就是這樣來的。

59
Python簡介
• Python常應用的領域:

60
Python簡介
• Python官網 [Link]
• 目前是3.10.6版(2022年8月),下載安裝後可於命
令列模式下執行,提示字元為 >>>
• 若須測試簡單的指令或執行已寫好的程式,可用
此模式

圖示

61
Python簡介
• 安裝後也有一個執行環境叫IDLE,不用再找IDE
了,之後我們都用這個環境來練習簡單的指令和
小程式。

圖示

• IDE(Integrated Development Environment;整合發展環境)


62
Python簡介
• 可以開啟Script編寫視窗來發展程式。

63
Python簡介
• 還有一個常用的套件:Anaconda,安裝後有一個
編輯器叫Spyder,很好用,還內建有超過1000種
的Data Science Packages可使用,要import套
件時就不用怕找不到還要去下載了。
• 網址:[Link]

• Anaconda
• 也是一種蟒蛇

64
Python簡介
• Spyder編輯器和有名的Visual Studio一樣有
自動提示與即時顯示錯誤的功能,能減少程式的
錯誤。

65
Python簡介
• 還有一個蠻專業的免費IDE叫PyCharm,非常好用,它會
有許多提示訊息,讓你避免錯誤。
• PyCharm是一個跨平台開發環境,擁有 Windows、
macOS和Linux版本。
• 官方網站:[Link]

66
休息一下~
• 工欲善其事,必先利其器,請回家後把環境安裝
好,不能只靠電腦教室的環境。
• 想學會寫程式光是靠聽老師說是不可能學會的,
要自己把範例都親自輸入跑一遍,然後習題都要
做出來才行。

67
常數與變數
• 常數:程式執行時的值。
• 變數:代表一個可存放資料的記憶體位置,是程
式中不可或缺的部分。
存入

A = 10
變數 存入 常數

某個記憶體位址

68
常數與變數
位址 記憶體 變數名稱

: : 指令

0x2E3
10 A A = 10
0x2E4 5 B B=5
0x2E5
實際的記憶體位址由系統
:

: 分配,我們不需要關心

69
常數與變數
位址 記憶體 變數名稱

: 指令
:

0x2E3
A = 10
10 5 A
A=5
0x2E4

0x2E5
第二道指令會取代原先A
:

: 的內容

70
變數命名規則
• 變數是要自己命名的,規則如下:
• 只能由字母、數字或底線組成,不可以用標點符號或
特殊字元。
• 須以英文字母或底線開頭。
• 不能使用關鍵字命名。
• 同一個可視範圍不能有同名的變數。
• 英文有大小寫之分,也就是sum與SUM是不同的變數。
• 可以使用中文命名,但不建議。

71
Python保留字
• 保留字又稱關鍵字,是有特殊意義的字,自己為
變數取名時不可以使用這些特殊的字。

72
變數不須宣告
• 所有變數皆不需先行宣告,直接指派就行了。
• 其它許多語言都是需要先宣告的,目的是讓作業
系統為我們的程式在執行時保留適當的記憶體空
間。

73
Python的資料型態

這三種是基本的

74
Python的資料型態
• Python的主要資料型態有:
• 基本資料型態:
• number,數值
• 整數(integer)、長整數(long)、
浮點數(float)、複數(complex)
• string,字串
• boolean,布林
• 群集資料型態:
• list,清單(陣列)
• tuple,元組
• dictionary,字典
• set,集合
75
基本資料型態
• number(數值)包含:
• 浮點數(float):
• 例:3.1415, 6.02E23 (64位元,倍精度)

• 整數(integer):
• 例:100 (十進制,大小無限制),
0324(八進位數),
0xA140 (十六進位數)

• 複數(complex):
• 例:1-5j (兩個浮點數)

76
基本資料型態
• string(字串):
• 單引號包圍
• 例:'this is a "single-quoted" string,\n
don\'t you like it?'
• 雙引號包圍
• 例:"this is a 'double-quoted' string"
• 三引號包圍(三個單引號)
• 例:'''this is a triply-quoted string
字串中可以換行,不用加跳脫字元,
也可以用'單引號'和"雙引號" '''
(也可用來當多行的註解)

77
基本資料型態
• boolean(布林):
• 布林是一個人的名字,他發展了一套專門對真真
假假做運算的學問,叫布林代數。
• 布林值只有「True」和「False」兩種,只有0
或空值(Null)視為假,其餘皆視為真。

• 例: b = True
x = False
(不須用引號框起來,字和大小寫不要拼錯)

78
資料型別轉換
• 有時我們需要將資料型別進行轉換,以配合我們
的需求,例如將數值轉成字串或字串轉成數值等。

• 常用的型別轉換:
• str(x) #將x轉換成字串
• int(x) #將x轉換成整數
• float(x) #將x轉換成浮點數
• complex(x) #將x轉換為複數

79
群集資料型態
• list(清單):
• 類似陣列,由中括號加逗號組成。
Ex: m = [ 1, 5, 7, -3, -1, 0 ]

• 清單中可以包含多種形態的資料。
Ex: k = [ 3.14, 'm', 10, 'hello' ]

80
群集資料型態
• tuple(元組):
• 和清單相似,是一些量的有序集合。和清單最大
的不同是不能改變,可以作為dictionary的鍵、
函式回傳、多變數給值...等。
• 以小括號加逗號表示,小括弧視情況可省略。

例: t1 = ( -1, 3.5, 'hello' )


t2 = 1, 2, 3
x, y, z = 4, 5, 6

81
群集資料型態
• dictionary(字典):
• 鍵(key)和值(value)的對照表-->「關連式記憶」。
• 鍵必需是不可變的型態 (如:常數、字串、Tuple等)。
• 例如:
prices = {'apple':7.5, 'orange':4.5, 'banana':2}

Key Value
'apple' 7.5
price包含
'orange' 4.5

'banana' 2

82
群集資料型態
• set(集合):
• 集合內的元素不可以重複,若有重複會自動剔除。
• 當我們只關心資料是否出現在其中,而不關心其位置
時可使用。

• 例: s = ('哈囉!世界!')
(實際上只會存'哈','囉','!','世','界')

• 我們後面會再詳細介紹群集資料型態。

83
群集資料型態
型態 符號 特性說明 應用場景
list [ ] 有序,具備索引,內容 可以使用索引,簡單
與長度可變,通過索引 的資料集合。
進行查找。
tuple ( ) 有序,將多樣的物件集 把一些資料當作一個
合到一起,不能修改, 整體去使用,不能修
通過索引進行查找。 改。
dict { } 是一組鍵和值的組合, 使用鍵值和值進行關
通過鍵進行查找,沒有 聯的資料。
順序,鍵不能重複。
set ( )或 無序,元素只出現一次, 資料只出現一次,只
{ } 自動去除重複。 關心資料是否出現,
不關心其順序與位置。

84
休息一下~

85
基本運算式
• 運算子(Operator)與運算元(Operand)

運算子

Expression
運算式

運算元

86
運算符號
• 正負號:
符號 意義 範例
+ 正號 +a
- 負號 -a

• 算術運算子
運算子 功能 範例
+ 加 a+b
- 減 a-b
* 乘 a*b
/ 除 a/b
% 取餘數 a%b
** 指數 a ** b
// 整除(向下取整數) a // b
87
運算符號
• 邏輯運算子:
運算子 功能 範例
and 且 a and b
or 或 a or b
not 非 not a

• 關係運算子:
運算子 功能 範例
== 相等 a == b
!= 或 <> 不相等 a != b,a <> b
> 大於 a>b
>= 大於等於 a >= b
< 小於 a<b
<= 小於等於 a <= b
88
運算符號
• 位元運算子:
運算子 功能 範例
& and a&b
| or a|b
^ xor a^b
~ not ~a
<< 位元左移 a << 2
>> 位元右移 a >> 2

• 成員運算子:
運算子 功能 範例
in 如果在指定的序列中找到值返回 True,否则返回 False。 a in list
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 a not in list

89
運算符號
• 指派運算子:
運算子 功能 範例
= 指派 a=b
+= 相加同時指派 a += b
-= 相減同時指派 a -= b
*= 相乘同時指派 a *= b
/= 相除同時指派 a /= b
%= 取餘數同時指派 a %= b
**= 取指數同時指派 a **= b

• 即 a = a + b 簡寫成 a += b

90
運算符號的優先順序

91
運算符號
• + 與 * 也可用於字串(string),例如
b = "a" + "b" #字串連接,b會等於"ab"
c = "a" * 2 #字串重複,c會等於"aa"
• = 也可以用平行指派(parallel assignment)
例如
a, b, c = 11, 22, 33
# a 會等於 11
# b 會等於 22
# c 會等於 33
a = b = c = 1
# a、b、c都等於1
• 適度的使用括符()來區分優先順序。 92
註解
• 好的程式需要有好的說明,這些穿插在程式中的
說明稱為註解。
• 註解是給人看的,電腦會予以忽略。

• 單行註解:
使用#符號,#之後的文字皆視為註解。
• 多行註解:
使用'''(連續三個單引號)框住的段落,可以
多行。

93
註解
• 註解範例:
• 單行註解:用 # 開頭的部分至行尾
# This is a comment…………………
print("Hello") #This is a comment….

• 多行註解:連續三個單引號'''框住的範圍
'''
這是
多行註解
'''

94
運算式寫法
• 在任何程式語言都不接受甚麼上標、下標、改大
小等等一般文書處理的功能,只能單純的寫成純
文字,那數學式子怎麼寫成程式的表示方式呢?
• 利用各種運算子和括符()來解決。

1
• 例: x= 2 要寫成 x = 2*(1/y)
𝑦

y = ax+b 要寫成 y = a*x+b

x = a2 + b2 要寫成 x = a**2 + b**2


95
運算式寫法
• 練習:
1
x=2 2  x = 2**(1/2) 或 x = 2**0.5

x= 𝑎2 + 𝑏 2  x = (a**2+b**2)**0.5

𝑎+𝑏
x=  x = (a+b)/(c-d)
𝑐−𝑑

5
c= (f-32)  c = (f-32)*5/9
9

96
運算式寫法
• 練習:
−𝑏+ 𝑏 2 −4𝑎𝑐
𝑥= 
2𝑎

𝑛 = 𝑎𝑥 2 + 𝑏𝑥 + 𝑐 

𝑥 𝑥2 𝑥3
𝑦 =1+ + + 
2 3 4

3
𝑧= 𝑎 + 𝑦𝑥 

97
基本輸出指令
• 輸出函數print():輸出訊息到螢幕。

• Ex: print("Hello World!")


輸出Hello World!並換行。
• Ex: print(a, b, end='')
輸出變數a和b的內容,不換行。
• Ex: print(a, '\t', b)
輸出變數a的內容,然後一個跳格的跳脫
字元,再輸出變數b的內容,換行。

98
跳脫字元
對輸出有影響的特殊字串:

99
基本輸入指令
• 輸入函數input():自鍵盤取得使用者輸入。

• Ex: tel = input("請輸入你的電話")


使用者輸入的字串存入變數tel

• Ex: age = input("你幾歲?")


使用者輸入的字串存入變數age

100
基本輸入指令
• 所有輸入皆視為字串,若需數值需用函數轉換

• Ex: age = int(input("你幾歲?"))


使用者輸入的字串轉成整數存入變數age

• Ex: BMI = float(input("你的BMI?"))


使用者輸入的字串轉成浮點數存入變數BMI

101
休息一下~

102
簡單的程式
• 整數加法:
假設我們有兩個整數x和y,要求輸出x+y的結果。
• 流程圖:

103
簡單的程式
• 參考程式:
x=int(input("請輸入數值x: "))
y=int(input("請輸入數值y: "))
print("x value:",x)
print("y value:",y)

z = x + y

print("z value:",z)

• 說明:
• 1.深紅色的部分稱"字串",會忠實地顯示在結果畫面上。
• 2. x、y、z稱"變數",會以它們的值呈現。
• [Link]()是請求鍵盤輸入,print()是印出資訊。
• [Link]()是將輸入的字串轉成整數(鍵盤輸入的都視為"字串")。

104
簡單的程式
• 執行情形:

105
簡單的程式
• 計算(x+y)/2:
假設我們有兩個整數x和y,要求輸出(x+y)/2的
結果。
• 流程圖:

106
簡單的程式
• 參考程式:
x=int(input("請輸入數值x: "))
y=int(input("請輸入數值y: "))
print("x value:",x)
print("y value:",y)

t = x + y
z = t / 2

print("z value:",z)

• 說明:
• 執行時空白行會予以忽略,空行是為了程式美觀或易
於閱讀。

107
簡單的程式
• 計算(x+y)*(u+v):
假設我們有四個整數x,y,u和v,
要求(x+y)*(u+v)
• 流程圖:

108
簡單的程式
• 參考程式:
x=int(input("請輸入數值x: "))
y=int(input("請輸入數值y: "))
u=int(input("請輸入數值u: "))
v=int(input("請輸入數值v: "))
print("x value:", x)
print("y value:", y)
print("u value:", u)
print("v value:", v)

t1 = x + y
t2 = u + v
z = t1 * t2

print("z value:", z)

109
簡單的程式
• 浮點數字加法:
• 用float( )取代int( )即可。
x=float(input("請輸入數值x: "))
y=float(input("請輸入數值y: "))
print("x value:",x)
print("y value:",y)

z = x + y

print("z value:",z)

• 鍵盤輸入的東西一律視為字串,如果你要做計算,
要轉換成你要的型別,例如整數或浮點數。

110
簡單的程式
• 若一次要輸入多個相同型態的資料,可用下面的
寫法:
x, y = map(int, input("請輸入身高,體重:").split())

input敘述
依序分配給變數

轉成整數 將輸入依空白分開

• split()會把輸入依空格分開。
• map()會把一個個輸入轉換成int,再依序分配
給變數。
111
簡單的程式
• 所以前例可改寫成如下:
#一次輸入四個數值
x,y,u,v = map(int,input("請輸入四個數值,以空白分隔").split())

print("x value:", x)
print("y value:", y)
print("u value:", u)
print("v value:", v)

z = (x + y) * (u + v)

print("z value:", z)

112
簡單的程式
• 另外input()裡面也可以是空的,只是沒有提示
訊息容易造成使用者困擾,程式應盡量將訊息表
達清楚。
• 例如:

程式已經在執行了,卻沒
有任何提示要求輸入

113
簡單的程式
• 輸入文字:
如果要輸入文字,簡單的用input()即可。
A = input("Please input your name:")
print("How are you? Mr.", A)

• 執行結果:

114
簡單的程式
• 計算二次方 a2 + b2:
a = int(input("請輸入 a = ")) a = int(input("請輸入 a = "))
b = int(input("請輸入 b = ")) 或 b = int(input("請輸入 b = "))
c = pow(a, 2) + pow(b, 2) c = a**2 + b**2
print("c = ", c) print("c = ", c)

• 以上結果是相同的。

• 計算次方可以用函數pow()或運算符號 **。
• 例如計算xy,可寫成pow(x,y)或x**y。

115
簡單的程式
• 小於1的次方:
計算xy,但y為介於0到1之間的浮點數。

輸入浮點數

116
簡單的程式
• 計算log(x):
需要引入math套件
import math
x = int(input("請輸入 x = "))
y = [Link](x)
print("y = ",y)

• 在這裡log(x)是以e = 2.718為底。
• 某些特別的函數需要另外引入,我們用import
指令,這裡是引入數學函數,所以用:import
math,然後用[Link]()函數。
math 的 log()

117
簡單的程式
• 計算平方根 y = 𝑥:
• 1.以import方式,使用sqrt()函數開根號。
import math
x = int(input("請輸入x= "))
y = [Link](x)
print("y = ",y)

• 2.不使用引入,直接用次方運算符號。
x = int(input("請輸入 x = "))
y = x**0.5
print("y = ",y)
1
• 說明:開根號是 次方 = 0.5次方。
2

118
簡單的程式
• 計算y = sin(x):
import math
x = float(input("請輸入 x = "))
y = [Link](x * [Link])
print("y = ",y)

• [Link]()、[Link]都是math提供的函數。
• Python的 π 精確到小數點後16位。

119
練習題
(𝑎+𝑏)
• 3-1.寫一程式,輸入a,b,c,d,計算 × 𝑑。先
(𝑐−𝑑)
畫出流程圖。

• 3-2.假設有一組二元一次方程式如下:
a1x+b1y=c1 , a1x+b2y=c2
此組方程式的解如下:
(𝑐1𝑏2−𝑐2𝑏1) (𝑐1𝑎2−𝑐2𝑎1)
x= , y=
(𝑎1𝑏2−𝑎2𝑏1) (𝑏1𝑎2−𝑎1𝑏2)
寫一程式,輸入此方程式變數之係數。計算此
組方程式的解先畫出流程圖。

120
練習題
• 3-1流程圖:

121
練習題
• 3-1參考程式:
a=float(input("請輸入數值a: "))
b=float(input("請輸入數值b: "))
c=float(input("請輸入數值c: "))
d=float(input("請輸入數值d: "))

print("a value:",a)
print("b value:",b)
print("c value:",c)
print("d value:",d)

z = ((a + b) / (c - d)) * 2

print("((a + b) / (c - d)) * 2 = ",z)

122
練習題
• 3-2流程圖:

123
練習題
• 3-2參考程式:
a1 = float(input("請輸入係數 a1:"))
b1 = float(input("請輸入係數 b1:"))
c1 = float(input("請輸入係數 c1:"))
a2 = float(input("請輸入係數 a2:"))
b2 = float(input("請輸入係數 b2:"))
c2 = float(input("請輸入係數 c2:"))

x = (c1*b2 - c2*b1) / (a1*b2 - a2*b1)


y = (c1*a1 - c2*a1) / (b1*a2 - a1*b2)

print("x = ",x)
print("y = ",y)

124
練習題
• 3-3. 輸入a和b,求:
𝑎1+𝑏2
c=
𝑎2−𝑏2

• 3-4. 輸入a和b,求:
c= 𝑎2 + 𝑏 2

• 3-5. 輸入a、b和c,求:
c = a-(b+c)(3a-c)

125
練習題
• 3-3參考程式:

a = float(input("請輸入 a:"))
b = float(input("請輸入 b:"))

c = (a**2 + b**2) / (a**2 - b**2)

print("c = ",c)

126
練習題
• 3-4參考程式:
import math
a = float(input("請輸入 a:"))
b = float(input("請輸入 b:"))

c = [Link](a**2 + b**2)

print("c = ",c)

a = float(input("請輸入 a:"))
b = float(input("請輸入 b:"))
或 或
c = (a**2 + b**2)**0.5

print("c = ",c)

127
練習題
• 3-5參考程式:

a = float(input("請輸入 a:"))
b = float(input("請輸入 b:"))
c = float(input("請輸入 c:"))

c = a - (b + c) * (3 * a - c)

print("c = ",c)

128
休息一下~

129
Python重要規則
• 在繼續之前你一定要記得:

• Python要求嚴格的縮排
• 同一區段該縮排要縮排,要確實對齊。
• 一般以四個空白,不建議用Tab縮排。

130
選擇/判斷結構
• 依照我們給的條件來判斷要不要執行某一段程
式,有三種:
• if ...
• if ... else ...
• if ... elif ... else ...

131
選擇/判斷結構
• if是:「如果怎樣怎樣,你就如何如何」。

132
選擇/判斷結構
• if...else...是:「如果怎樣怎樣,你就這樣這樣,
否則就那樣那樣」。

133
選擇/判斷結構
• if語法:
( )可有可無 注意冒號不
要漏掉了

if(條件):
條件成立,執行程式區塊

條件不成立,
跳到程式區塊
程式區塊
程式區塊 後面的敘述去
要縮排 執行

執行完畢,離開if

134
選擇/判斷結構
• if...else語法:
if 條件 :
條件成立,執行程式區塊A

程式區塊A
條件不成立,
執行程式區塊B

else:
執行完畢,
跳到if之後
程式區塊B 的敘述。

執行完畢,離開if

135
選擇/判斷結構
• 讀入兩個數x和y,選出大的那一個。
• 流程圖:

136
選擇/判斷結構
• 參考程式:
x=int(input("請輸入數值x: "))
y=int(input("請輸入數值y: "))
print("x = ",x)
print("y = ",y)

if x > y:
z = x
注意冒號及縮排!
else: if和else要對齊
z = y

print("z = ",z)

• 程式中縮排的空格數目必須相同,一般用2或4格空白,
不可以和Tab混用。

137
選擇/判斷結構
• 一行式的寫法(else不可省略):

z = x if x>y else y

真 條件
• 說明:
• 如果判斷式很簡單如前例,可以採用這個「很
Python」的寫法。
• 意思是:將x指定給z,如果條件為真的話。
否則將y指定給z。
138
選擇/判斷結構
• 讀入x和y,如果x>y,則回傳x-y,否則回傳y-x。
• 流程圖:

139
選擇/判斷結構
• 參考程式:
x=int(input("請輸入數值x: "))
y=int(input("請輸入數值y: "))
print("x = ",x)
print("y = ",y)

if x > y:
z = x - y
else:
z = y - x

print("z = ",z)

140
選擇/判斷結構
• 讀入一數字,如果是負數,就將它轉成正數。
• 流程圖:

141
選擇/判斷結構
• 參考程式:

x=int(input("請輸入數值x: "))

if x < 0:
x = -x

print("x = ",x)

142
選擇/判斷結構
• 多重選擇:

143
選擇/判斷結構
• 語法: if 條件1 :
哪個條件成立就 程式區塊1
執行哪個區塊, elif 條件2 :
elif的個數沒有
限制。 程式區塊2
elif 條件3 :
執行完區
若以上條件都不 程式區塊3 塊後離開
成立,就執行 if。
else區塊, : :
若以上條件都不 elif 條件n :
成立,也沒有
else區塊,那就 程式區塊n
甚麼都不執行。 else:
else區塊可省略。 程式區塊

144
選擇/判斷結構
• 輸入一個學生的分數,輸出該成績級別,分數級別如
下:
90分以上  A
80~89分  B
70~79分  C
60~69分  D
60分以下  F

• 流程圖:

145
選擇/判斷結構
• 參考程式:
print("輸入學生成績,將會輸出對應的成績級別")
score = int(input("輸入成績(0~100): "))
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print("此成績級別為 ",grade)

146
選擇/判斷結構
• 某商店在大特價,根據購買的商品總金額決定打
折的折扣,總金額越高折扣越多,折扣表如下:
未滿1000  無折扣
1000~4999  9折
5000~9999  8折
高於10000  7折
小數點四捨五入,印出折扣後的金額。

147
選擇/判斷結構
• 流程圖:

148
選擇/判斷結構
• 參考程式:
print("輸入總金額,將會依據金額打折,並輸出打折後的金額")
money = int(input("請輸入購買總金額: "))
if money < 1000:
print("抱歉,沒有折扣唷!")
discount = 1.0
elif money < 4999:
print("享有9折優惠唷!")
discount = 0.9 函數round(n,m)
elif money < 9999:
將n值在小數點第m位
print("享有8折優惠唷!")
discount = 0.8
四捨五入
else:
print("享有7折優惠唷!")
discount = 0.7
money = int(round(money * discount,0))
print("打折後總金額為: ",money)

149
練習題
• 以下各題均須先畫出流程圖。
• 4-1.寫一程式,輸入x和y,如果x ≥ y,則列印x,
否則列印y

• 4-2.寫一程式,輸入x和y,如果x和y都是正數,
令z=1,如兩者均為負數,令z=-1,否則令z=0

• 4-3.寫一程式,輸入x、y、u、v,如果
(x+y)>(u+v),則令z=x-y,否則令z=u-v

150
練習題
• 4-1流程圖:

151
練習題
• 4-1參考程式:

x=int(input("請輸入數值x: "))
y=int(input("請輸入數值y: "))
print("x = ",x)
print("y = ",y)

if x >= y:
z = x
else:
z = y

print("z = ",z)

152
練習題
• 4-2流程圖:

153
練習題
• 4-2參考程式:
x=int(input("請輸入數值x: "))
y=int(input("請輸入數值y: "))
print("x = ",x)
print("y = ",y)

if x>0 and y>0:


z = 1
elif x<0 and y<0:
z = -1
else:
z = 0

print("z = ",z)

154
練習題
• 4-3流程圖:

155
練習題
• 4-3參考程式:
x=int(input("請輸入數值x: "))
y=int(input("請輸入數值y: "))
u=int(input("請輸入數值u: "))
v=int(input("請輸入數值v: "))
print("x = ",x)
print("y = ",y)
print("u = ",u)
print("v = ",v)

if (x+y) > (u+v):


z = x + y
else:
z = u + v

print("z = ",z)
156
練習題
𝑥+𝑦
• 4-4.寫一程式,輸入x、y、u、v,如果 ≥ 2,
𝑢−𝑣
令z=x-y,否則令z=u-v。

• 4-5.寫一程式,輸入x和y,如果x ≥ y,令z=x2,
否則令z=y2

157
練習題
• 4-4流程圖:

158
練習題
• 4-4參考程式:
x=int(input("請輸入數值x: "))
y=int(input("請輸入數值y: "))
u=int(input("請輸入數值u: "))
v=int(input("請輸入數值v: "))
print("x = ",x)
print("y = ",y)
print("u = ",u)
print("v = ",v)

if (x+y)/(u-v) >= 2:
z = x - y
else:
z = u - v

print("z = ",z)
159
練習題
• 4-5流程圖:

160
練習題
• 4-5參考程式:
x=int(input("請輸入數值x: "))
y=int(input("請輸入數值y: "))
print("x = ",x)
print("y = ",y)

if x >= y:
z = x**2
else:
z = y**2

print("z = ",z)

161
練習題
• 4-6.依照以下的
流程圖,寫
一程式。

162
練習題
• 4-6參考程式:
income = int(input("Please input your income: "))
if income > 4090000:
rate = 0.4
difference = 721100
elif income > 2180000:
rate = 0.3
difference = 312100
elif income > 1090000:
rate = 0.21
difference = 115900
elif income > 410000:
rate = 0.13
difference = 28700
else:
rate = 0.06
difference = 0
tax = (income * rate) - difference
print("tax = ",tax) 163
練習題 x=int(input("Enter x: "))
y=int(input("Enter y: "))
if x > 0:
• 4-7.將以下程式的 if y > 0:
print("1st quadrant\n")
流程圖畫出來。 elif y == 0:
print("X=axis\n")
else:
print("4th quadrant\n")
elif x == 0:
if y == 0:
print("Origin\n")
else:
print("Y=axis\n")
else:
if y > 0:
print("2nd quadrant\n")
elif y == 0:
print("X-axis\n")
else:
print("3rd quadrant\n")
164
練習題
• 4-7.流程圖

165
休息一下~

166
迴圈/重複結構
• 如果在程式中遇到要重複同樣動作的指令,
就要使用 for 或 while 迴圈指令。

167
for迴圈指令
• for是:如果參照的變數的值或清單的元素在範
圍內,就重複執行。

168
for迴圈指令
• for語法:
不可省略,若設 每次增/減多少,
可省略,若省略 可省略,若省略
為n,則終值為
則內定為0起始 則內定為+1
n-1

for 變數 in range(起始值, 終止值, 增/減量):

要縮排
程式區塊

變數的值加上增/減量後等
變數的值加上增/減量後
於或超出終止值,離開for
在終止值之內,重複程式
迴圈,執行之後的指令。
區塊。

169
for迴圈指令
• for語法:

清單可以是字串、list、tuple、dict等

for 變數 in 清單:

要縮排
程式區塊

清單內所有元素依序取完
依序取出清單的值存入變
後離開迴圈。
數,直到取完為止。

170
for迴圈指令
• 讀入五個整數,
求這五個整數的和。

• 流程圖:

171
for迴圈指令
• 參考程式:
sum = 0

for i in range(5):
tmp = int(input("請輸入數值: "))
sum = sum + tmp

print("sum = ",sum)

• i會從0開始,每次加1,直到i=4為止(共5次),
i在這個範圍內for迴圈內的敘述就要重複執行。

172
for迴圈指令
• 求N個整數的和,
N由使用者輸入。

• 流程圖:

173
for迴圈指令
• 參考程式:
N = int(input("請輸入數值個數N: "))
sum = 0

for i in range(N):
tmp = int(input("請輸入數值: "))
sum = sum + tmp

print("sum = ",sum)

• 迴圈重複的次數由輸入的N決定,從0到N-1

174
for迴圈指令
• 假設有N個正整數,求其中的最大值。

• 先假設最大值(MAX)等於0,然後逐一檢查讀入
的每一個數字,如果比MAX還大,就令MAX等於
這個數字,如果沒有比MAX大,就不做任何事情,
最後MAX一定會是這一串數字中的最大值。

175
for迴圈指令
• 流程圖:

176
for迴圈指令
• 參考程式:
N = int(input("請輸入數值個數N: "))
MAX = 0

for i in range(N):
tmp = int(input("請輸入數值: "))
if tmp > MAX:
MAX = tmp

print("MAX = ",MAX)

177
for迴圈指令
• 求最大奇數值。

• 先假設最大值(MAX)等於0,然後逐一檢查讀入
的每一個數字,如果是奇數且比MAX還大,就令
MAX等於這個數字,如果不是,就不做任何事情,
最後MAX一定會是這一串數字中的奇數最大值。

• 可以用%(取餘數)運算,例如將n除以2之後若餘
0,為偶數,若餘1則為奇數。

178
for迴圈指令
• 流程圖:

179
for迴圈指令
• 參考程式:
N = int(input("請輸入數值個數N: "))
MAX = 0

for i in range(N):
tmp = int(input("請輸入數值: "))
if tmp % 2 != 0:
if tmp > MAX:
MAX = tmp

print("MAX = ",MAX)

180
for迴圈指令
• 求N階層,即求1×2×3×…×N。
• 請求輸入N,讓for迴圈自2依
序乘到N,所以要寫成:
for i in range(2,N+1)

• 流程圖:

181
for迴圈指令
• 參考程式:
N = int(input("請輸入數值N: "))
VAL = 1

for i in range(2,N+1):
VAL = VAL * i

print("VAL = ",VAL)

• VAL = VAL * i 也可寫成 VAL *= i


• 注意迴圈若要執行到N,要寫成N+1,否則是執
行到N-1
182
for迴圈指令
• 輸出一個九九乘法表。
• 利用兩層迴圈,又稱
巢狀迴圈。
• 迴圈的層數沒有限制,
但越多效率越差。

• 流程圖:

183
for迴圈指令
• 參考程式:
for x in range(1,10):
for y in range(1,10):
print(x," * ",y," = ",x*y),
print()

• 執行結果:

184
for迴圈指令
• 請將程式改成如下輸出:

185
for迴圈指令
• 參考程式:
for x in range(1,10,3):
for y in range(1,10):
print(x," * ",y," = ",x*y,end="\t\t")
print(x+1," * ",y," = ",(x+1)*y,end="\t\t")
print(x+2," * ",y," = ",(x+2)*y)
print()

• "\t"稱跳脫字元,是Tab的意思。
• 常用的還有"\n",是換行的意思。
• print()函數內定結尾會自動加上換行,加上
end=" "參數後就會依我們加入的文字當結尾。
186
練習題
• 5-1.寫一程式,輸入10個整數,求其最小值。

• 5-2.寫一程式,輸入N個整數,求其最小值。

• 5-3.寫一程式,輸入10個整數,列出其中所有
大於12的數字。

• 5-4.寫一程式,輸入10個整數,列出其中所有
大於12的數字的總和。

187
練習題
• 5-1流程圖:

188
練習題
• 5-1參考程式:
MIN = int(input("Please input the value of 1 : "))

for i in range(2,11):
print("Please input the value of",i,": ",end="")
tmp = int(input())
if tmp < MIN:
MIN = tmp

print("MIN = ",MIN)

• 先將第一個輸入的值當成最小的,再依序跟後續
輸入的做比較。
189
練習題
• 5-2流程圖:

190
練習題
• 5-2參考程式:
N = int(input("Please input the value of variable N: "))
MIN = int(input("Please input the value of 1 : "))

for i in range(2,N+1):
print("Please input the value of",i,": ",end="")
tmp = int(input())
if tmp < MIN:
MIN = tmp

print("MIN = ",MIN)

191
練習題
• 5-3流程圖:

192
練習題
• 5-3參考程式:
OUT = ""
for i in range(10):
print("Please input number",i+1,": ",end="")
tmp = int(input())
if tmp > 12:
OUT = OUT + str(tmp) + " "

print("Number bigger then 12: ",OUT)

• 將符合大於12的數字轉成文字串入OUT,最後將
OUT印出來。

193
練習題
• 5-4流程圖:

194
練習題
• 5-4參考程式:
OUT = ""
SUM = 0

for i in range(10):
print("Please input number",i+1,": ",end="")
tmp = int(input())
if tmp > 12:
OUT = OUT + str(tmp) + " "
SUM += tmp

print("Number bigger then 12: ",OUT)


print("Sum = ",SUM)

195
練習題
• 5-5.寫一程式,輸入N個數字,求其所有奇數中
的最大值。例如輸入11,12,3,24,15,答案是
15。

• 5-6.寫一程式,輸入N個數字,求其所有正數之
平方的加總。例如輸入1,-2,3,-4,5五個數字,
得到
12 +(-2)2+ 32 +(-4)2+ 52 = 1 + 9 + 25 = 35

• 5-7.寫一程式,輸入N個數字,其中有些是負數,
將這些負數轉換成正數,例如-7會被轉換成7。
196
練習題
• 5-5.流程圖:

197
練習題
• 5-5.參考程式:
N = int(input("請輸入數值個數N: "))
MAX = 0

for i in range(N):
tmp = int(input("請輸入數值: "))
if tmp % 2 != 0:
if tmp > MAX:
MAX = tmp

print("MAX = ",MAX)

198
練習題
• 5-6.流程圖:

199
練習題
• 5-6.參考程式:
N = int(input("請輸入數值個數N: "))
sum = 0

for i in range(N):
print("請輸入數值",i+1,": ",end="")
tmp = int(input())
if tmp > 0:
sum += tmp**2

print("Sum = ",sum)

200
練習題
• 5-7.流程圖:

201
練習題
• 5-7.參考程式:
N = int(input("請輸入數值個數N: "))
OUT = ""

for i in range(N):
print("請輸入第",i,"個數值: ",end="")
x = int(input())
tmp = int(input())
if tmp < 0:
tmp *= -1
OUT = OUT + str(tmp) + " "

print("結果 =",OUT)

202
休息一下~

203
while迴圈指令
• 通常for圈都用在確定要重複執行多少次的情況,
若重複的次數不確定,我們可以用while迴圈。
• while以"真"、"假"來做為終止條件。
• 當條件為真時執行迴圈,為假時結束迴圈

while 條件: 假

:
要縮排 程式區塊

204
while迴圈指令
• 讀入一連串的數字,但事先不知道數字的數目。
• 設定一個特殊的數字,一旦讀到這個數字就終止迴圈。
• 假設輸入的都是正數,一旦讀到負數就終止。
• 流程圖:

205
while迴圈指令
• 參考程式:

x = int(input("請輸入數值: "))

while x >= 0:
print("x = ",x)
x = int(input("請輸入數值: "))

• 當x>=0成立時,就執行迴圈內敘述,不成立時
就終止迴圈。
• while(條件)或while 條件都可以,即括符可
加可不加。
206
while迴圈指令
• 求最大公約數(Greatest Common Divisor,
簡寫G.C.D,或稱最大公因數)。
• 指能夠整除多個整數的最大正整數。而多個整數
不能都為零。例如8和12的最大公因數為4。

• 用輾轉相除法:兩數相除,取餘數重複進行相除,
直到餘數為0時,前一個除數即為最大公約數。

207
while迴圈指令
• 流程圖:

208
while迴圈指令
• 參考程式:
M = int(input("請輸入數值M: "))
N = int(input("請輸入數值N: "))
x = M
y = N

while (x != y):
if (x > y):
x = x-y
else:
y = y-x

print("x = ",x)

209
while迴圈指令
• 參考程式二:
a = int(input("請輸入數值a: "))
b = int(input("請輸入數值b: "))
# 如果 a < b,把a和b對調
if a < b:
a, b = b, a

r = a % b
# While迴圈會計算到r=0才會停止
while r != 0:
a = b
b = r
r = a % b
print("GCD是 " + str(b))

210
while迴圈指令
• 關於兩變數交換內容的方式:
• 其他語言都須借助第三個變數當中介,例如要交
換a,b的內容,則需寫成:
temp
temp = a
a = b
b = temp a 2 b

• 在python語言只需要一行即可。
a , b = b , a

211
while迴圈指令
• 計算N個數字的和。
• 檢查i有沒有超過N,
超過就不做了。

• 流程圖:

212
while迴圈指令
• 參考程式:
N = int(input("請問有幾個數值要加總: "))
i = 1
S = 0

while i <= N:
print("請輸入第",i,"個數值: ",end="")
x = int(input())
S = S + x
i = i + 1

print("結果 = ",S)

213
練習題
• 5-8.利用while寫一程式求N個數字的最大值。

• 5-9.利用while寫一程式求一個等差級數數字的
和,一共有N個數字,程式應該輸入最小的起始
值以及數字間的差。(即從起始值開始,間格差,
共N個 的總和)

• 5-10.利用while寫一程式,讀入N個數字,然
後找出所有小於13的數,再求這些數字的和。

214
練習題
• 5-8.流程圖:

215
練習題
• 5-8.參考程式:
N = int(input("How many number? "))
MAX = 0
i = 1

while i <= N:
print("Please input the value of number",i,": ",end="")
x = int(input())
if x > MAX:
MAX = x
i = i + 1

print("MAX = ",MAX)

216
練習題
• 5-9.流程圖:

217
練習題
• 5-9.參考程式:
N = int(input("Please input N: "))
Start = int(input("Please input the start number: "))
Interval = int(input("Please input the interval: "))
Sum = 0

while N>0:
Sum += Start
Start += Interval
N -= 1

print("Total = ",Sum)

218
練習題
• 5-10.流程圖:

219
練習題
• 5-10.參考程式:
N = int(input("Please input N: "))
Sum = 0

while N > 0:
x = int(input("Please input the value: "))
if x < 13:
Sum += x
N -= 1

print("Total = ",Sum)

220
練習題
• 5-11.利用while寫一程式,讀入N個數字,找
到第一個大於7而小於10的數字就停止,而且列
印出這個數字。

• 5-12.利用while寫一程式,讀入a1,a2,…,a5和
b1,b2,…,b5。找到第一個ai>bi,即停止,並列
印出ai及bi。

221
練習題
• 5-11.流程圖:

222
練習題
• 5-11.參考程式:
N = int(input("Please input N: "))

while N > 0:
x = int(input("Please input the value: "))
if x>7 and x<10:
break
N -= 1

print("STOP ON: ",x)

223
練習題
• 5-12.流程圖:

224
練習題
• 5-12.參考程式(依序輸入a和b)

N = 1
while N <=5:
a = int(input("Please input a" + str(N) + ": "))
b = int(input("Please input b" + str(N) + ": "))
if a > b:
print("a"+str(N)+" =",a," > b"+str(N)+" =",b)
break
N += 1

225
練習題
• 5-12.參考程式(用陣列來做,但進度在下一章):
a = [1 for i in range(6)]
b = [1 for i in range(6)]

for i in range(1,6):
a[i] = int(input("Please input a" + str(i) + ": "))

N = 1
while N <=5:
b[N] = int(input("Please input b" + str(N) + ": "))
if a[N] > b[N]:
break
N += 1

print("a"+str(N)+" =",a[N]," > b"+str(N)+" =",b[N])

226
迴圈補充說明
• break敘述:強制終止迴圈,跳到迴圈之後的敘
述去執行。

for i in range(10):
:
if i == 5 :
break
:
:

跳出迴圈,執行迴圈外的下一道敘述,
注意一次只跳出一層迴圈。

227
迴圈補充說明
• continue敘述:強制回到迴圈初始的地方,忽
略之後的敘述。

while i < 10 :
: 跳至迴圈起始處
if i % 5 == 0 :
continue
:(之後的敘述都忽略)
:
:

228
綜合練習
• 請輸出下列圖形。

1. 2. 3.

229
綜合練習
• 參考程式:
• 1. for i in range(1, 7):
print('*' * i)

• 2. for i in range(1, 7):


print(' ' * (7-i), '*' * i)

•3 s = 5
for i in range(1, 12, 2):
print(' ' * s, '*' * i)
s -= 1
230
綜合練習
• 一個數等於它所有因數的合(不包括它本身),
這種數我們稱它為「完全數」。
例如:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

• 請寫一程式,找出1 ~ 10000之間所有的完全數。

231
綜合練習
• 參考程式:
for i in range(1, 10000):
check = 0
for j in range(1, i):
if(i % j == 0):
check += j
if(check == i):
print(i, "是完全數")

232
綜合練習
• 參考程式(詳細顯示版):
for i in range(1, 10000):
check = 0
s = '' #用來記錄所有因數
for j in range(1, i):
if(i % j == 0):
check += j
s += str(j) + '+'
if(check == i):
s = s[:len(s)-1] #去掉最後多的一個'+'
print(i, "=",s,"是完全數")

233
綜合練習
• 1.幫韓信算出他剩多少兵馬?

• 2.類似題:找出1 ~ 1000之間所有滿足「三個三個
一數餘2、五個五個一數餘1、七個七個一數餘4」
的數字。
234
綜合練習
• 1.參考程式:
for i in range(1500, 1600):
if(i%3==2 and i%5==3 and i%7==2):
print(i)

• 說明:韓信已知損失兵力約400~500人,所以剩
下應該是1500~1600人之間,所以只要找這之間
符合的數字即可。
235
綜合練習
• 2.參考程式:
for i in range(1, 1000):
if(i%3==2 and i%5==1 and i%7==4):
print(i)

236
綜合練習
• 費波那西數(義大利語:Successione di Fibonacci),又
稱費氏數列、黃金分割數列,隱藏在大自然中,如果你
注意就會觀察到。它的原則是每一個數字都是前兩個的
相加。 F = 0
0
F1 = 1
Fn = Fn-1 + Fn-2

• 請寫一程式計算數列的第n個數字是什麼。(0不算)
237
綜合練習
• 參考程式:
f1 = 1 #第一及第二個直接指定
f2 = 1
n = int(input("請輸入 n:"))
for i in range(3, n+1):
fn = f1 + f2
f1,f2 = f2,fn

print("第",n,"個費氏級數是",fn)

238
下課~
說明:
1.本講義部分圖片取自網路。
2.部分取自「程式語言與設計」(科友)

239

You might also like