Python 1
Python 1
劉和師 老師 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
了,之後我們都用這個環境來練習簡單的指令和
小程式。
圖示
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的鍵、
函式回傳、多變數給值...等。
• 以小括號加逗號表示,小括弧視情況可省略。
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)
𝑦
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():輸出訊息到螢幕。
98
跳脫字元
對輸出有影響的特殊字串:
99
基本輸入指令
• 輸入函數input():自鍵盤取得使用者輸入。
100
基本輸入指令
• 所有輸入皆視為字串,若需數值需用函數轉換
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
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:"))
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:"))
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)
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)
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
在終止值之內,重複程式
迴圈,執行之後的指令。
區塊。
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)
• 流程圖:
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) + " "
• 將符合大於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
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
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
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)
•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