Python 2
Python 2
劉和師老師 part 1
2025/8/20
何謂程式語言
• 程式語言(programming language),是用來
定義電腦程式的形式語言。 它是一種被標準化
的交流技巧,用來向電腦發出指令。
• 維基百科-Wikipedia的解釋
2
何謂程式語言
• 程式就是指揮電腦動作的一連串指令。
• 只要用到電腦的地方,就需要程式。
(一般程式都是橫式書寫,駭客任務電影將程式以直式呈現,很有創意)
3
何謂程式語言
• 人的語言有中文、英文、日文等,說法不同,但
都表達同一個意思。
4
何謂程式語言
• 程式也有多種語言,寫法也許不同,但都可以表
達同一個意思。
5
最底層的機械語言
• 其實電腦只認得這個…
• 電腦內部是數位的世界
,只認得0與1
• 這叫機械語言,但這對
人類來說太困難了…
6
組合語言
• 所以有了組合語言(Assembly),它使用助憶碼
(Mnemonics)來代替和表示特定低階機器語言
的操作,硬體工程師一定要會。
• 但還是很難…
7
高階語言
• 為了更方便與電腦溝通,能更像人與人之間在對
話,所以有了高階語言。
8
唯一的困難
• 高階語言有很多種,應用的領域也不同,唯一相
同的是,都是用...
•英文!!
9
我們用英文,但這不是英文課
• 不用害怕,你要克服的不是英文,是心理障礙!
• 程式用到的英文很簡單,沒有甚麼過去式、未來
式這些,只有簡單的命令,還有你的邏輯能力。
10
程式語言發展的歷史
11
程式語言的分類
12
程式語言的比較
13
其他方式與電腦溝通
• 現在也有這種積木式語言(如App Inventor、
Scratch等),方便易學,但功能有限,尚無法
做出非常複雜的東西,適合簡單快速的應用。
14
AI新世紀的到來
• 現在AI的能力都超強,可以幫我們寫程式了,
但你還是要看得懂啊。
15
程式如何執行
• 電腦並不認得高階語言,只認得機器語言,所以
不管用甚麼語言來寫程式,最後都必須轉換成
010101…才行。
16
轉換我們寫的程式到可執行檔
• 直譯式(Interpreter)語言執行程序:
• Python屬於此種執行方式。
17
轉換我們寫的程式到可執行檔
• 編譯式(Compiler)語言執行程序:
• 大部分高階語言屬於此種方式。
18
休息一下~
19
運算思維
• 你平時如何解決問題?
• 面對問題,你會先好好想一下嗎?
• 你的思考程序是甚麼?
20
運算思維
• 運算思維是指能構思一個有條理的程序,應用各
種運算方法或工具來解決問題的思維能力。
• 把你的問題分析好,再分解成一個個電腦可以幫
你解決的步驟。
• 你的大腦就是一台電腦,先在大腦中跑過一遍,
再去用電腦實現。
21
寫程式的流程
• 不是拿到問題就傻傻地坐到電腦前。
• 應該是如下圖:
22
先想清楚
• 垃圾進,垃圾出(Garbage In, Garbage Out,
GIGO)。
• 先確認:
• 你要解決甚麼問題?
• 需要輸入甚麼?
• 需要輸出甚麼?
• 要用哪一種工具(語言)?
23
思考過程
• 一開始總是沒有頭緒的,先靜下來分析你要解決
的問題。
• (假設有這麼複雜...)
(示意圖)
24
思考過程
• 抽象化和模型化,找出規則、規律、區塊等等。
(示意圖)
25
思考過程
• 規劃成電腦可執行的步驟。
(示意圖)
26
思考過程
• 寫程式(Coding)
(示意圖)
27
思考過程
• 欣賞及確認執行成果。
(示意圖)
• (要知道所有的遊戲都是程式寫出來的唷~)
28
演算法(Algorithms)
• 把問題抽象化和模型化,找出合理有效的解決步
驟。
• 就是解決問題的方法啦~
29
演算法(Algorithms)
• 面對不同類型的問題,使用適當的資料結構
(Data Structure)及演算法可以讓問題簡單很
多。
• 基本的資料結構例如:
• 陣列(Array)
• 鏈結串列(Link List)
• 堆疊(Stack)
• 佇列(Queue)
• 樹(Tree)
• 圖(Graph)
30
演算法(Algorithms)
• 一個好的演算法要求:
• 輸入:有零個或一個以上輸入。
• 輸出:應有一個或一個以上輸出。
• 明確性:演算法的描述必須無歧義,以保證演算法的
實際執行結果是精確地符合要求或期望,通常要求實
際執行結果是確定的。
• 有限性:必須在有限個步驟內完成任務。
• 有效性:又稱可行性。能夠實現,。
31
演算法的工具
• 流程圖(Flow Chart)是個不錯的方式,用簡單
的圖形來代表執行的步驟。
32
常用流程圖
• 圖例:
33
常用流程圖
• 圖例:
34
常用流程圖
• 對於簡單的問題,其實記住這四個也就夠了。
35
流程圖範例
一個猜密碼的
流程圖
36
流程圖範例
將成績轉換成等第
的流程圖
37
畫流程圖的工具
• 問題不複雜的話用手繪就行了。
(這位外國老兄其實畫得不錯)
38
畫流程圖的工具
• 如果需要精美或較複雜的應用,[Link]是個不
錯又免費的畫流程圖的工具軟體。
39
畫流程圖的工具
• 安裝後開啟程式選「流程圖」 「新增」
40
畫流程圖的工具
箭頭符號
點選流程圖,
再點選要使用的符號,
拖曳至適當的位置即可。
41
畫流程圖的工具
• 也可用線上版,直接在瀏覽器裡使用。
42
畫流程圖的工具
• 點選Flowchart Create
43
畫流程圖的工具
• 會先問你要存在哪兒
44
畫流程圖的工具
• 開始使用~ (右上方地球符號可以更換介面語言)
45
畫流程圖的工具
• 可以選繁體中文(需要重新載入頁面)
46
想想看
• 颱風天到了,請寫一個防颱準備的流程圖
• (你會不會把門窗封住了才想到要去買泡麵吧?)
47
這些益智遊戲可以多玩玩
• 過河問題:3個人和3個鬼要過河,可是只有一
隻小船,一次只能載兩個,且在河兩邊鬼的數量
不能比人多,否則就會把人給吃了,怎麼樣才能
安全的過河呢?
48
這些益智遊戲可以多玩玩
• 比較複雜的過河遊戲:一個男人帶著兩個小男孩,一個女
人帶著兩個小女孩,一個警察帶著一個小偷,要過河。可是只有一
條小船,一次只能載兩個人,孩子和小偷不會划船。如果男人不在
則女人會教訓小男孩,如果女人不在男人則會教訓小女孩,如果警
察不在小偷則會傷害這些人。怎麼才能安全過河呢?
49
這些益智遊戲可以多玩玩
• 有六隻青蛙要過河,河的左邊有三隻,河的右邊有
三隻,中間一塊空白石頭。它們互不相讓。怎麼樣
才能過河呢?
• 規則:可向前跳不可向後,每次只能躍過1隻青蛙。
50
這些益智遊戲可以多玩玩
• 河內塔:將左邊的圈圈移動到最右邊。
• 規則一:一次只能移動一個。
• 規則二:任何時候不能發生上面的圈圈比下面的圈圈大。
51
這些益智遊戲可以多玩玩
• 一筆畫問題:一筆畫走完所有線段,不能重複。
• 技巧:只要頂點引出的線為單數的頂點個數不大於2,這個幾
何圖形就可以一筆畫。
52
這些益智遊戲可以多玩玩
• 柯尼斯堡的七橋問題:要如何才能從某一塊土地
開始,將每座橋恰好經過一次,然後回到原地?
53
這些益智遊戲可以多玩玩
• 柯尼斯堡的七橋問題:要如何才能從某一塊土地
開始,將每座橋恰好經過一次,然後回到原地?
• (模組化、抽象化)
54
練習一下(畫出流程圖)
• 有兩串香蕉,比較它們的重量,
然後輸出哪一個比較重?
• 輸入三個數值a,b,c,比較它們
的大小,輸出最大的那個。
55
練習一下(畫出流程圖)
• 請寫一個流程圖,狀況如下:
• 今天晚餐要約小美吃飯,如果身上有$1000就吃
大餐,如果只有$500就吃牛肉麵,如果只有
$300就吃夜市,都不夠的話取消約會(慘…)。
56
多練習就會了
• 流程圖是你解決問題的想法及過程,沒有標準答
案,只要能解決問題就可以。
• 不過效率就有關係了,要練習讓你的思考更清晰,
步驟更簡潔。
57
休息一下~
58
Python簡介
• Python 是一種泛用性的動態物件導向程式語言。
• Python是一種直譯式語言。
• 它可以在命令列模式下操作,也可以寫成Script檔。
• 附檔名為.py。
• Python 可以執行在 Windows、Mac OS X、
Linux 等常見的作業系統平台和其它較少使用的作
業系統上,也可以在 Java 和 .Net 環境中執行。
• 透過 Jython,Python 能與 Java 合作愉快;
透過 IronPython,Python 能與 .Net 合作愉快。
59
Python簡介
• Python的設計哲學強調程式碼的可讀性和簡潔
的語法,尤其是使用空格縮排劃分程式碼塊。
在Python語言裡整齊的縮排很重要而且是必須的
(很重要,唸三遍!)
• Python這個單字是一種蟒蛇,所以這個語言的
Logo就是這樣來的。
60
Python簡介
• Python常應用的領域:
(圖:又上財經學院)
61
Python簡介
• Python官網 [Link]
• 目前是3.13.5版(2025年8月),下載安裝後可於命
令列模式下執行,提示字元為 >>>
• 若須測試簡單的指令或執行已寫好的程式,可用
此模式。
圖示
(3.12版)
62
Python簡介
• 安裝後也有一個執行環境叫IDLE,不用再找IDE
了,之後我們都用這個環境來練習簡單的指令和
小程式。
圖示
(3.12版)
64
Python簡介
• 還有一個常用的套件:Anaconda,安裝後有一個
編輯器叫Spyder,很好用,還內建有超過1000種
的Data Science Packages可使用,要import套
件時就不用怕找不到還要去下載了。
• 網址:[Link]
Anaconda這個字
也是一種蟒蛇
65
Python簡介
• Spyder編輯器和有名的Visual Studio一樣有
自動提示與即時顯示錯誤的功能,能減少程式的
錯誤。
66
Python簡介
• 還有一個蠻專業的IDE叫PyCharm,它有免費版和收費版,
非常好用,它會有許多提示訊息,讓你避免錯誤,如果
你遵照它的提示,可以寫出很"正統"的Python程式。
• PyCharm是一個跨平台開發環境,擁有 Windows、
macOS和Linux版本。
• 官方網站:[Link]
67
Python簡介
• 如果你什麼都不想安裝,也可以直接在線上練習。
• 先註冊一個google帳號,然後進入
[Link]
• 我們會在上機時說明如何使用。
68
Python簡介
• 網路上也有許多讓你練習Python的網站,你不
必安裝任何軟體,直接上網就可以練習了。
• 例如:Programiz網站。
69
Python簡介
• 或者Anacodna也有附一個Jupyter Notebook,
讓你在線上有自己專屬的空間來練習Python。
70
Python簡介
• 對於初學者來說,IDLE最簡單,PyCharm功能
最強但最複雜,如果按使用簡單到複雜排序如下:
• IDLE(熟悉Python基本語法)。
• Colab / Jupyter Notebook(開始做互動式練習
與數據處理)。
• Spyder(熟悉專案結構與變數管理)。
• PyCharm(進入專案開發與專業開發流程)。
71
休息一下~
• 工欲善其事,必先利其器,請回家後把環境安裝
好,不能只靠每週一次電腦教室的環境。
• 想學會寫程式光是靠聽老師說是不可能學會的,
要自己把範例都親自輸入跑一遍,然後習題都要
做出來才行。
72
常數與變數
• 常數:程式執行時的值。
• 變數:代表一個可存放資料的記憶體位置,是程
式中不可或缺的部分。
存入
A = 10
變數 存入 常數
某個記憶體位址
73
常數與變數
位址 記憶體 變數名稱
: :
: 指令
0x2E3
10 A A = 10
0x2E4 5 B B=5
0x2E5
實際的記憶體位址由系統
:
:
: 分配,我們不需要關心。
74
常數與變數
位址 記憶體 變數名稱
: 指令
:
:
0x2E3
A = 10
10 5 A
A=5
0x2E4
0x2E5 第二道指令會取代原先
A的內容。
:
: :
75
常數與變數
• 以上所述只是一個概念,實際上的情況在
Python會複雜一些,它是採用「物件」的方式
來儲存資料。
• 對Python而言,變數是採用參照(reference)
位址的概念,也就是變數A存放的是一個指向常
數10的位址的值,而不是直接存放10。
• 我們以後會介紹物件,現在你只要有前頁的概念
就行了。
位址 記憶體
A 0x2E3 0x2E3 10
76
變數命名規則
• 變數是要自己命名的,規則如下:
• 只能由字母、數字或底線組成,不可以用標點符號或
特殊字元。
• 須以英文字母或底線開頭。
• 不能使用關鍵字命名。
• 同一個可視範圍不能有同名的變數。
• 英文有大小寫之分,也就是cat與Cat是不同的變數。
• 可以使用中文命名,但不建議。
• 長度沒有限制,但太長了自己也不方便。
77
Python保留字
• 保留字又稱關鍵字,是有特殊意義的字,自己為
變數取名時不可以使用這些特殊的字。
78
Python變數不須宣告
• 許多程式語言都是需要先行宣告變數才可以存取
的,目的是讓作業系統為我們的程式在執行時保
留適當的記憶體空間。
• Python所有變數皆不需先行宣告,直接指派使
用就行了,但你自己必須要弄清楚變數裡現在存
了什麼類型的資料。
79
Python的資料型態
這三種是基本的
80
Python的資料型態
• Python的主要資料型態有:
• 基本資料型態:
• number:數值
• 整數(integer)、長整數(long)
• 浮點數(float)、複數(complex)
• string:字串
• boolean:布林
• 群集資料型態:
• list:清單(陣列)
• tuple:元組
• dictionary:字典
• set:集合
81
基本資料型態
• number(數值)包含:
• 浮點數(float):
• 例:3.1415, 6.02E13 (64位元,倍精度)
6.0213
• 整數(integer): 在程式中要寫成這樣
• 例:100 (十進制)
0o324 (八進位數)
0xA140 (十六進位數)
0b10011100 (二進位數)
• 複數(complex):
• 例:1-5j (兩個浮點數)
82
基本資料型態
• string(字串):一個或一串文字。
• 單引號包圍
• 例:'this is a "single-quoted"
string,\ndon\'t you like it?'
• 雙引號包圍
• 例:"this is a 'double-quoted' string"
• 三引號包圍(三個單引號)
• 例:'''this is a triply-quoted string
字串中可以換行,不用加跳脫字元,
也可以用'單引號'和"雙引號" '''
(也可用來當多行的註解)
83
基本資料型態
• boolean(布林):
• 布林是一個人的名字,他發展了一套專門對真真
假假做運算的學問,叫布林代數。
• 布林值只有「True」和「False」兩種,只有0
或空值(Null)視為假,其餘皆視為真。
• 例: a = True (a裡面存了一個"真"這個值)
b = False (b裡面存了一個"假"這個值)
(不須用引號框起來,大小寫不要拼錯)
84
資料型別轉換
• 有時我們需要將資料型別進行轉換,以配合我們
的需求,例如將數值轉成字串或字串轉成數值等。
• 常用的型別轉換:
• str(x) #將變數x的內容轉換成字串
• int(x) #將變數x的內容轉換成整數
• float(x) #將變數x的內容轉換成浮點數
• complex(x) #將變數x的內容轉換為複數
• 為何需要轉換?看看下面的例子:
數值0在電腦中值為 00000000
文字0在電腦中值為 00110000
• 0和'0'在螢幕上看一樣,但存入電腦值是不同的。
85
群集資料型態
• list(清單):
• 也稱陣列,由中括號加逗號組成。
Ex: m = [ 1, 5, 7, -3, -1, 0 ]
• 清單中可以包含多種形態的資料。
Ex: k = [ 3.14, 'm', 10, 'hello' ]
浮點數 字元 整數 字串
86
群集資料型態
• tuple(元組):
• 和清單相似,是一些量的有序集合。和清單最大
的不同是不能改變,可以作為dictionary的鍵、
函式回傳、多變數給值...等。
• 以小括號加逗號表示,小括弧視情況可省略。
87
群集資料型態
• dictionary(字典):
• 鍵(key)和值(value)的對照表-->「關連式記憶」。
• 鍵必需是不可變的型態 (如:常數、字串、Tuple等)。
• 例如:
prices = {'apple':7.5, 'orange':4.5, 'banana':2}
Key Value
'apple' 7.5
price包含
'orange' 4.5
'banana' 2
88
群集資料型態
• set(集合):
• 集合內的元素不可以重複,若有重複會自動剔除。
• 當我們只關心資料是否出現在其中,而不關心其位置
時可使用。
• 我們後面會再詳細介紹這些群集資料型態。
89
群集資料型態
型態 符號 特性說明 應用場景
list [ ] 有序,具備索引,內容 可以使用索引,簡單
與長度可變,通過索引 的資料集合。
進行查找。
tuple ( ) 有序,將多樣的物件集 把一些資料當作一個
合到一起,不能修改, 整體去使用,不能修
通過索引進行查找。 改。
dict { } 是一組鍵和值的組合, 使用鍵值和值進行關
通過鍵進行查找,沒有 聯的資料。
順序,鍵不能重複。
set ( )或 無序,元素只出現一次, 資料只出現一次,只
{ } 自動去除重複。 關心資料是否出現,
不關心其順序與位置。
90
休息一下~
91
基本運算式
• 運算子(Operator)與運算元(Operand)
運算子
Expression
運算式
運算元
92
運算符號
• 正負號:
符號 意義 範例
+ 正號 +a
- 負號 -a
• 算術運算子
運算子 功能 範例
+ 加 a+b
- 減 a-b
* 乘 a*b
/ 除 a/b
% 取餘數 a%b
** 指數 a ** b
// 整除(向下取整數) a // b
93
運算符號
• 邏輯運算子:
運算子 功能 範例
and 且 a and b
or 或 a or b
not 非 not a
• 真值表:
and or not
a b a and b a b a or b a not a
0 0 0 0 0 0 0 1
0 1 0 0 1 1 1 0
1 0 0 1 0 1 0:代表假
1 1 1 1 1 1 1:代表真
94
運算符號
• 關係運算子:
運算子 功能 範例
== 相等 a == b
!= 不相等 a != b
> 大於 a>b
>= 大於等於 a >= b
< 小於 a<b
<= 小於等於 a <= b
• 成員運算子:
運算子 功能 範例
in 如果在指定的序列中找到值返回 True,否则返回 False。 a in list
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 a not in list
95
運算符號
• 位元運算子:
運算子 功能 範例
& and a&b
| or a|b
^ xor a^b
~ not ~a
<< 位元左移 a << 2
>> 位元右移 a >> 2
• 位元運算是對運算子的"二進制"每個Bit去做運算,
大家平常可能比較少用到,請複習一下數位科技概
論。
96
運算符號
• 指派運算子:
運算子 功能 範例
= 指派 a=b
+= 相加同時指派 a += b
-= 相減同時指派 a -= b
*= 相乘同時指派 a *= b
/= 相除同時指派 a /= b
%= 取餘數同時指派 a %= b
**= 取指數同時指派 a **= b
• 即 a = a + b 可簡寫成 a += b
(把a的值取出來和b相加後,再將結果存回a。就是將b累加到a裡面去
的意思)
97
運算符號的優先順序
• 運算子是有先乘除後加減這類的優先順序的。
98
運算符號
• + 與 * 也可用於字串(string),例如
b = "a" + "b" #字串連接,b的值是"ab"
c = "ab" * 2 #字串重複2次,c的值是"abab"
• = 也可以用平行指派(parallel assignment)
例如:
a, b, c = 11, 22, 33
# a 會等於 11
# b 會等於 22
# c 會等於 33
a = b = c = 1
# a、b、c都等於1
• 可適度的使用括符()來區分優先順序。 99
註解
• 好的程式需要有好的說明,這些穿插在程式中的
說明稱為註解。
• 註解是給人看的,電腦會予以忽略。
• 單行註解:
使用#符號,#之後的文字皆視為註解。
• 多行註解:
使用'''...'''(連續三個單引號)框住的段
落,可以多行。
100
註解
• 註解範例:
• 單行註解:用 # 開頭的部分至行尾
# This is a comment,這是註解 ……………
print("Hello") #This is a comment….
• 多行註解:連續三個單引號'''框住的範圍
'''
這是 $%隨便%^&($^%
多行 !@!$你^&%^
註解 ^&*%要說什麼@#&
'''
101
運算式寫法
• 在任何程式語言都不接受什麼上標、下標、改大
小等等一般文書處理的功能,只能單純的寫成純
文字,那數學式子怎麼寫成程式的表示方式呢?
• 利用各種運算子和括符()來解決。
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
103
運算式寫法
• 自己練習:
−𝑏+ 𝑏 2 −4𝑎𝑐
𝑥=
2𝑎
𝑛 = 𝑎𝑥 2 + 𝑏𝑥 + 𝑐
𝑥 𝑥2 𝑥3
𝑦 =1+ + +
2 3 4
3
𝑧= 𝑎 + 𝑦𝑥
104
基本輸出指令
• 輸出函數print():輸出訊息到螢幕。
• Ex: print("Hello World!")
輸出Hello World!並自動加上換行。
• Ex: print(a, b, end='')
輸出變數a和b的內容,依end指定的字元當
結尾,不會自動加上換行。
• Ex: print(a, '\t', b)
輸出變數a的內容,然後一個跳格的跳脫
字元,再輸出變數b的內容,然後換行。
• Ex: print(a + b * c)
也可以直接印出運算的結果,變數a、b、c必須
已經存在且存放了數值。
105
跳脫字元
• 對輸出有影響的特殊字串組合(跳脫字元):
106
基本輸出指令
• 如果要輸出的資料包含複雜的變數和字串,還可
以使用以下的方式:
• 在要輸出的字串前加一個f,然後將變數放在{ }
之間即可。
name = '阿帥'
age = 18
print(f"我是{name},我今年{age}歲")
107
基本輸出指令
• f字串的顯示方式也可以簡單的控制格式。
字串預設是靠左對齊
數值預設是靠右對齊
• 輸出結果:
109
基本輸出指令
• %格式化字元:
• 對應不同的資料型態要使用各自的格式字元。
• 前例用到的
110
基本輸出指令
• %格式化的控制方式:
• Ex: %5.2f 表示總共留5格,小數佔用2格。
(小數點固定占用1格)
3 . 1 4 (若未填滿則留出空白)
111
基本輸入指令
• 輸入函數input():自鍵盤取得使用者輸入。
112
基本輸入指令
• 所有輸入皆視為字串,若需數值須用函式轉換。
• Ex: age = int(input("你幾歲?"))
使用者輸入的字串轉成整數存入變數age。
113
基本輸入指令
• 將前例改為使用input()獲得資訊:
name = input("請問大名:")
age = int(input("請輸入你的年齡:"))
print(f"我是{name},我今年{age}歲")
BMI = float(input("請輸入BMI:"))
print("你的BMI是:%4.1f" % BMI)
114
休息一下~
115
簡單的程式
• 整數加法:
假設我們有兩個整數x和y,要求輸出x+y的結果。
• 流程圖:
116
簡單的程式
• 參考程式:
x = int(input("請輸入數值x: ")) #請求輸入,存到x
y = int(input("請輸入數值y: ")) #請求輸入,存到y
print("x =", x) #印出"x ="和x的內容
print("y =", y) #印出"y ="和y的內容
z = x + y #執行運算
• 說明:
• 1.深紅色的部分稱"字串",會忠實地顯示在結果畫面(螢幕)上。
• 2. x、y、z稱"變數",print()時會以它們的值呈現。
• [Link]()是請求鍵盤輸入,print()是印出資訊。
• [Link]()是將輸入的字串轉成整數(鍵盤輸入的都視為"字串")。
117
簡單的程式
• 執行情形:
118
簡單的程式
• 計算(x+y)/2:
假設我們有兩個整數x和y,要求輸出(x+y)/2的
結果。
• 流程圖:
119
簡單的程式
• 參考程式:
x = int(input("請輸入數值x: "))
y = int(input("請輸入數值y: "))
print("x =", x)
print("y =", y)
t = x + y
z = t / 2
print("z =", z)
• 說明:
• 執行時空白行會予以忽略,空行是為了程式美觀或易
於閱讀。
120
簡單的程式
• 計算(x+y)*(u+v):
假設我們有四個整數x,y,u和v,
要求(x+y)*(u+v)。
• 流程圖:
121
簡單的程式
• 參考程式:
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)
t1 = x + y
t2 = u + v
z = t1 * t2
print("z =", z)
122
簡單的程式
• 浮點數字加法:
• 用float( )取代int( )即可。
x = float(input("請輸入數值x: "))
y = float(input("請輸入數值y: "))
print("x =", x)
print("y =", y)
z = x + y
print("z =", z)
• 再次強調:鍵盤輸入的東西一律視為字串,如果你
要做計算,要轉換成你要的型別,例如整數或浮點
數。
123
簡單的程式
• 若一次要輸入多個相同型態的資料,可用下面的
寫法:
x, y = map(int, input("請輸入身高,體重:").split())
input敘述
依序分配給變數
將輸入依指定的符號
轉成指定的型態, 分開,此處為空白
此為整數
• split()會把輸入依指定的符號分開。
• map()會把一個個輸入轉換成指定的型態,再依
序分配給變數。
124
簡單的程式
• 所以前例可改寫成如下:
#一次輸入四個數值
x,y,u,v = map(int,input("請輸入四個數值,以空白分隔:").split())
#只使用一個print指令
print(f"x = {x}\ny = {y}\nu = {u}\nv = {v}")
z = (x + y) * (u + v)
print("z =", z)
125
簡單的程式
• 另外input()裡面也可以是空的,只是沒有提示
訊息容易造成使用者困擾,程式應盡量將訊息表
達清楚。
• 例如: input()裡沒有任何提示訊息
程式已經在執行了,卻沒有
任何提示要使用者做什麼,
這樣很不優
126
簡單的程式
• 輸入文字:
如果要輸入文字,簡單的用input()即可。
name = input("請問大名:")
print(name, "先生/小姐你好", )
• 執行結果:
127
簡單的程式
• 計算二次方 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。
128
簡單的程式
• 小於1的次方:
計算xy,但y為介於0到1之間的浮點數。
輸入浮點數
129
簡單的程式
• 計算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()"
130
簡單的程式
• 計算平方根 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
131
簡單的程式
• 計算y = sin(x):
import math
x = float(input("請輸入 x = "))
y = [Link](x * [Link])
print("y = ",y)
• [Link]()、[Link]都是math提供的函數。
• Python的 π 精確到小數點後15位。
(約為3.141592653589793)
132
練習題
• 3-1.請使用者輸入它的暱稱,然後向他問好。例如
使用者輸入"阿美",你要印出"你好,阿美"。
先畫出流程圖。
(𝑎+𝑏)
• 3-2.寫一程式,輸入a,b,c,d,計算 × 𝑑。先
(𝑐−𝑑)
畫出流程圖。
133
練習題
• 3-1流程圖:
134
練習題
• 3-1參考程式:
#請求輸入
name = input("請問您的大名:")
#印出結果
print("你好,", name)
135
練習題
• 3-2流程圖:
136
練習題
• 3-2參考程式:
a = float(input("請輸入數值a: "))
b = float(input("請輸入數值b: "))
c = float(input("請輸入數值c: "))
d = float(input("請輸入數值d: "))
print("a =", a)
print("b =", b)
print("c =", c)
print("d =", d)
z = ((a + b) / (c - d)) * d
• 誰能把它簡化一些?
137
練習題
• 3-3.輸入民國幾年,印出其西元年。(提示:
將民國幾年加上1911,即可得到其對應的
是西元幾年)
• 3-4.華氏溫度F可以表示成 F=C*9/5+32。現在
給你攝氏C的溫度,請問你它是華氏幾度?
• 3-5.給你一個矩形的長和寬,請問它的面積是
多少?
138
練習題
• 3-3參考程式:
year = int(input("請輸入民國年:"))
AD = year + 1911
print(f"民國{year}年是西元{AD}年")
139
練習題
• 3-4參考程式:
C = int(input("請輸入攝氏度:"))
print(C * 9 / 5 + 32)
140
練習題
• 3-5參考程式:
w = float(input("請輸入矩形長:"))
h = float(input("請輸入矩形寬:"))
area = w * h
141
休息一下~
• 電腦之所以稱為"Computer"是因為它當初發明
的目的就是為了幫人類計算,以後你會發現"程
式"這個東西很多時候都在做計算的工作。
142
Python重要規則
• 在繼續之前你一定要記得:
• Python要求嚴格的縮排
• 同一區段該縮排要縮排,要確實對齊。
• 一般以二或四個空白,也可以用Tab縮排,
但建議不要空白和Tab混用。
143
選擇/判斷結構
• 如果在程式中遇到要做選擇/判斷時,就
要使用 if 指令。
144
選擇/判斷結構
• 依照我們給的條件來判斷要不要執行某一段程
式。
• if寫法有三種:
if ... (單選)
145
選擇/判斷結構
• if指令是:「如果怎樣怎樣(測試條件),你就
如何如何(程式區塊)」。
146
選擇/判斷結構
• if...else...是:「如果怎樣怎樣,你就這樣這樣,
否則就那樣那樣」。
147
選擇/判斷結構
• if語法:
( )可有可無 注意冒號不
要漏掉了
if(條件):
條件成立,執行程式區塊
條件不成立,
四個空白
跳到程式區塊
程式區塊 後面的敘述去
程式區塊要縮排,
執行
只要是縮排的敘
述都算if裡的
執行完畢,離開if
148
選擇/判斷結構
• if...else語法:
if 條件 :
條件成立,執行程式區塊A
程式區塊A
條件不成立,
執行程式區塊B
else:
執行完畢,
跳到if之後
注意誰和誰對齊! 程式區塊B 的敘述。
執行完畢,離開if
149
選擇/判斷結構
• 讀入兩個數x和y,選出大的那一個。
• 流程圖:
150
選擇/判斷結構
• 參考程式:
x, y = map(int, input("請輸入數值x和y: ").split())
print("x = ", x)
print("y = ", y)
if x > y:
z = x 注意冒號及縮排!
else: if和else要對齊
z = y
print("Max = ", z)
• 再次強調:程式中縮排的空格數目必須相同,一
般用2或4格空白,不要和Tab混用。
151
選擇/判斷結構
• 一行式的寫法(else不可省略):
z = x if x > y else y
真 條件
• 說明:
• 如果判斷式很簡單如前例,可以採用這個「很
Python」的寫法。
• 意思是:將x指定給z,如果條件為真的話。
否則將y指定給z。
152
選擇/判斷結構
• 讀入x和y,如果x>y,則回傳x-y,否則回傳y-x。
• 流程圖:
153
選擇/判斷結構
• 參考程式:
x, y = map(int, input("請輸入數值x和y: ").split())
print("x = ", x)
print("y = ", y)
z = (x - y) if x > y else (y - x)
print("z = ", z)
154
選擇/判斷結構
• 讀入一數字,如果是負數,就將它轉成正數。
• 流程圖:
155
選擇/判斷結構
• 參考程式:
x = int(input("請輸入數值x: "))
• 對print()指令來說,它最後會收到x或-x來輸出。
156
選擇/判斷結構
• 多重選擇:
157
選擇/判斷結構
• 語法: if 條件1 :
哪個條件成立就 程式區塊1
執行哪個區塊。
elif的個數沒有 elif 條件2 :
限制。 程式區塊2
elif 條件3 :
若以上條件都不 執行完區塊
成立,就執行 程式區塊3 後離開if。
else區塊。
: :
若也沒有else區 elif 條件n :
塊,那就什麼都 程式區塊n
不執行。
else:
else區塊可省略。
程式區塊
158
選擇/判斷結構
• 輸入一個學生的分數,輸出該成績級別,分數級別如
下:
分數 級別
90分以上 A
80~89分 B
70~79分 C
60~69分 D
60分以下 F
• 流程圖如右:
159
選擇/判斷結構
• 參考程式:
print("輸入學生成績,將會輸出對應的成績級別")
score = eval(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)
160
選擇/判斷結構
• 某商店在大特價,根據購買的商品總金額決定打
折的折扣,總金額越高折扣越多,折扣表如下:
商品總金額 折扣
未滿1000 無折扣
1000 ~ 4999 9折
5000 ~ 9999 8折
高於10000 7折
• 小數點四捨五入,印出折扣後的金額。
161
選擇/判斷結構
• 流程圖:
162
選擇/判斷結構
• 參考程式:
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)
163
練習題
• 以下各題請先畫出流程圖。
• 4-1.寫一程式,輸入x和y,如果x ≥ y,則列印x,
否則列印y。
• 4-2.寫一程式,輸入x和y,如果x和y都是正數,
令z=1,如兩者均為負數,令z=-1,否則令z=0。
• 4-3.如果一個整數是2的倍數,則它就是一個偶
數,否則為奇數。給你一個整數,請你判斷它是
奇數還是偶數。若輸入的整數為奇數,則輸出
ODD,若為偶數則輸出 EVEN。
164
練習題
• 4-1流程圖:
165
練習題
• 4-1參考程式:
x, y = map(int, input("請輸入數值x和y: ").split())
print("x = ", x, "\ny = ", y)
z = x if x >= y else y
print("z = ", z)
166
練習題
• 4-2流程圖:
167
練習題
• 4-2參考程式:
x, y = map(int, input("請輸入數值x和y: ").split())
print("x = ", x, "\ny = ", y)
print("z = ", z)
168
練習題
• 4-3流程圖:
169
練習題
• 4-3參考程式:
N = int(input("請輸入一個整數:"))
#整數除2的餘數只會是0或1,
#可代表真或假回傳給if判斷用
if N % 2:
print(f"{N}是奇數")
else:
print(f"{N}是偶數")
170
練習題
• 4-4.給你兩個整數,請輸出它們之間的大小關
係。如果A大於B,印出"A>B",若A小於B,印出
"A<B",如果A等於B,印出"A=B"。
• 4-5.寫一程式,輸入x和y,如果x ≥ y,令z=x2,
否則令z=y2。
171
練習題
• 4-4流程圖:
172
練習題
• 4-4參考程式:
a, b = map(int, input("請輸入兩個數值:").split())
if a == b:
print(a,"=",b)
elif a < b:
print(a,"<",b)
else:
print(a,">",b)
173
練習題
• 4-5流程圖:
174
練習題
• 4-5參考程式:
x, y = map(int, input("請輸入數值x和y: ").split())
print("x = ", x, "\ny = ", y)
if x >= y:
z = x**2
else:
z = y**2
print("z = ", z)
175
練習題
• 4-6.依照以下的
流程圖,寫
一程式。
176
練習題
• 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) 177
練習題 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")
178
練習題
• 4-7.流程圖
179
休息一下~
180
迴圈/重複結構
• 如果在程式中遇到要重複同樣動作的指令,
就要使用 for 或 while 迴圈指令。
181
for迴圈指令
• for是:如果參照的迴圈變數的值或清單的元素
在範圍內,就重複執行區塊。
182
for迴圈指令
• for語法:
不可省略,若設 每次增/減多少,
可省略,若省略 為n,則終值為 可省略,若省略
則內定為0起始 則內定為+1
n-1
要縮排
程式區塊
變數的值加上增/減量後等
變數的值加上增/減量後
於或超出終止值,離開for
在終止值之內則重複程式
迴圈,執行之後的指令。
區塊。
註:range()是一個函式,可單獨使用。
183
for迴圈指令
• for語法:
清單可以是字串、list、tuple、dict等
for 變數 in 清單:
要縮排
程式區塊
清單內所有元素依序取完
依序取出清單的值存入變
後離開迴圈。
數,直到取完為止。
184
for迴圈指令
• 讀入五個整數,
求這五個整數的和。
• 流程圖:
185
for迴圈指令
• 參考程式:
• 假設依序輸入1,3,5,7,9 執行情形
i 輸入 sum
sum = 0
0 1 1
for i in range(5): 1 3 4
sum += int(input("請輸入數值: ")) 2 5 9
3 7 16
print("sum = ", sum) 4 9 25
• i會從0開始,每次加1,直到i=4為止(共5次),
i在這個範圍內for迴圈內的敘述就要重複執行。
186
for迴圈指令
• 可以將迴圈執行過程印出來看看各變數內容的變化。
• 假設依序輸入1,2,3,4,5
sum = 0
for i in range(5):
n = int(input("請輸入數值: "))
sum += n
print(i, n, sum)
187
for迴圈指令
• 求N個整數的和,
N由使用者輸入。
• 流程圖:
188
for迴圈指令
• 參考程式:
N = int(input("請輸入數值個數N: "))
sum = 0
for i in range(N):
sum += int(input("請輸入數值: "))
• 迴圈重複的次數由輸入的N決定,從0到N-1。
189
for迴圈指令
• 輸入N個正整數,求其中的最大值。
• 先假設最大值MAX等於0,然後逐一檢查讀入的每
一個數字,如果比MAX還大,就令MAX等於這個
數字,如果沒有比MAX大,就不做任何事情,最
後MAX一定會是這一串數字中的最大值。
• 這個例子在之後介紹List(清單)時會更簡單。
190
for迴圈指令
• 流程圖:
191
for迴圈指令
• 參考程式:
N = int(input("請輸入數值個數N: "))
MAX = 0
for i in range(N):
tmp = int(input("請輸入數值: "))
if tmp > MAX:
MAX = tmp
192
for迴圈指令
• 求最大奇數值。
• 先假設最大值MAX等於0,然後逐一檢查讀入的每
一個數字,如果是奇數而且比MAX還大,就令
MAX等於這個數字,如果不是,就不做任何事情,
最後MAX一定會是這一串數字中的奇數最大值。
• 可以用%(取餘數)運算,將n除以2之後若餘0,
為偶數,若餘1則為奇數。
193
for迴圈指令
• 流程圖:
194
for迴圈指令
• 參考程式:
N = int(input("請輸入數值個數N: "))
MAX = 0
for i in range(N):
tmp = int(input("請輸入數值: "))
if tmp % 2 != 0:
if tmp > MAX:
MAX = tmp
195
for迴圈指令
• 求N階乘,即求1×2×3×…×N。
• 請求輸入N,讓for迴圈自2依
序乘到N,所以要寫成:
for i in range(2, N+1)
• 流程圖:
196
for迴圈指令
• 參考程式:
N = int(input("請輸入數值N: "))
VAL = 1
198
巢狀迴圈(Nested loop)
• 經典問題:印出一個
九九乘法表。
• 利用兩層迴圈(巢狀
迴圈)。
• 要記得迴圈的層數沒
有限制,但越多效率
越差。
• 流程圖如右:
199
巢狀迴圈(Nested loop)
• 參考程式:
for x in range(1, 10):
for y in range(1, 10):
print(f"{x} * {y} = {x*y}")
print()
• 內外層變數不可用相同
名稱,注意縮排。
• 執行結果:
200
巢狀迴圈(Nested loop)
• 前一個寫法太醜了,請將程式改成如下輸出:
• (注意個位數對齊)
201
巢狀迴圈(Nested loop)
• 參考程式:
for x in range(1, 10, 3):
for y in range(1, 10):
print("%d * %d = %2d\t" % (x, y, x*y), end='')
print("%d * %d = %2d\t" % (x+1, y, (x+1)*y), end='')
print("%d * %d = %2d" % (x+2, y, (x+2)*y))
print()
• "\t"稱跳脫字元,是Tab的意思。
• 常用的還有"\n",是換行的意思。
• print()函數內定結尾會自動加上換行,加上
end=''參數後就會依我們加入的文字當結尾。
202
巢狀迴圈(Nested loop)
• 再簡化一點吧,請將程式改成如下輸出:
203
巢狀迴圈(Nested loop)
• 參考程式:
for i in range(1, 10):
for j in range(1, 10):
print("%2d " % (i * j), end='')
print()
• 是不是很簡單?
• 印度小朋友要背19*19的乘法表,你可以幫他們
產生一個嗎?
204
練習題
• 5-1.寫一程式,輸入10個整數,求其最小值。
• 5-2.寫一程式,輸入N個整數,求其最小值。
• 5-3.寫一程式,輸入10個整數,列出其中所有
大於12的數字。
• 5-4.寫一程式,輸入10個整數,列出其中所有
大於12的數字的總和。
205
練習題
• 5-1流程圖:
206
練習題
• 5-1參考程式:
MIN = int(input("請輸入第 1 個數值: "))
• 先將第一個輸入的值當成最小的,再依序跟後續
輸入的做比較。
207
練習題
• 5-2流程圖:
208
練習題
• 5-2參考程式:
N = int(input("請問有幾個數值: "))
MIN = int(input("請輸入數值 1 : "))
209
練習題
• 5-3流程圖:
210
練習題
• 5-3參考程式:
OUT = ""
for i in range(10):
print("請輸入數值", i+1, ": ", end="")
tmp = int(input())
if tmp > 12:
OUT = OUT + str(tmp) + " "
• 將符合大於12的數字轉成文字串接存入OUT,最
後將OUT印出來。
211
練習題
• 5-4流程圖:
212
練習題
• 5-4參考程式:
OUT = ""
SUM = 0
for i in range(10):
print("請輸入數值", i+1, ": ", end="")
tmp = int(input())
if tmp > 12:
OUT = OUT + str(tmp) + " "
SUM += tmp
213
練習題
• 5-5.寫一程式,輸入一個數字範圍,求這段數
字範圍間所有偶數的和。例如輸入5,20,則為
6+8+10+12+14+16+18+20,答案是104。
• 5-6.寫一程式,輸入N個數字,求其所有正數之
平方的加總。例如輸入1,-2,3,-4,5五個數字,
得到:
12 + -2 + 32 + -4 + 52 = 1 + 9 + 25 = 35
• 5-7.寫一程式,輸入N個數字,其中有些是負數,
將這些負數轉換成正數,例如-7會被轉換成7。
214
練習題
• 5-5.流程圖:
215
練習題
• 5-5.參考程式:
a, b = map(int, input("請輸入數字範圍:").split())
sum = 0
print("總和=", sum)
216
練習題
• 5-6.流程圖:
217
練習題
• 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
218
練習題
• 5-7.流程圖:
219
練習題
• 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) + " "
220
練習題
• 5-8.由於地球公轉一周大約是365.242199日,所以如果
以一年365日來記算,每四年就會多出0.968796天,於是
有人提出每四年要多出一天,這就是閏年。但是因為每四
年多出來的並非完整的一天,所以累積到100年的時候,
就不須要再多這一天了。而同樣的道理,到了400年,又
會多出一天來。目前閏年的規則如下(西元紀年):
• 如果這一年不是4的倍數,則它是平年。
• 如果這一年是4的倍數,但不是100的倍數,則它是閏年。
• 如果這一年是100的倍數,但不是400的倍數,則它是平年。
• 如果這一年是400的倍數,則它是閏年。
現在給你一個年份,請你判斷它是不是閏年。
• 5-9.印出某段時間內的閏年,例如1911 ~ 2025年之
間所有的閏年。
221
練習題
• 5-8.參考程式:
year = int(input("請輸入年份:"))
if (year % 4) == 0 \
and (year % 100) !=0 \
or (year % 400) == 0:
print("YES") 當指令太長需要折斷換行時,要
else: 在行尾加上一個"\",這樣編譯
器知道你這行還指令沒結束。
print("NO")
222
練習題
• 5-9.參考程式:
x = 0
for y in range(1911, 2026):
if y % 400 == 0 or (y % 4 == 0 and y % 100 != 0):
x += 1
print(y, ',', end ='')
print('共', x, '次')
223
休息一下~
224
while迴圈指令
• 通常for圈都用在確定要重複執行多少次的情況,
若重複的次數不確定,我們可以用while迴圈。
• while以"真"、"假"來做為終止條件。
• 當條件為真時執行迴圈,為假時結束迴圈。
while 條件: 假
每次回頭時檢查 : 真
條件是否仍為真
要縮排 程式區塊
:
離開while,執行之後的敘述
225
while迴圈指令
• 讀入一連串的數字,但不知道有多少個數字。設定一
個特殊的數字,一旦讀到這個數字就終止迴圈。
• 假設輸入的都是正數,一旦讀到負數就終止。
• 流程圖:
226
while迴圈指令
• 參考程式:
x = int(input("請輸入數值: "))
條件
while (x >= 0):
print("x = ", x)
x = int(input("請輸入數值: "))
• 當x>=0成立時,就執行迴圈內敘述,不成立時
就終止迴圈。
• while(條件)或while 條件都可以,即括符可
加可不加。
227
while迴圈指令
• 求最大公約數(Greatest Common Divisor,
簡寫G.C.D,或稱最大公因數)。
• 指能夠整除多個整數的最大正整數。而多個整數
不能都為零。例如8和12的最大公因數為4。
• 用輾轉相除法:兩數相除,取餘數重複進行相除,
直到餘數為0時,前一個除數即為最大公約數。
• (可別遇到數學就懶得理解喔,電腦程式很多時候都是
在處理數學問題,或在處理數學問題的路上。)
228
while迴圈指令
• 流程圖:
229
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)
230
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))
231
while迴圈指令
• 關於兩變數交換內容的方式:
• 其他語言都須借助第三個變數當中介,例如要交
換a,b的內容,則需寫成:
temp
temp = a
a = b
b = temp a b
• 在python語言只需要一行即可。
a , b = b , a
232
while迴圈指令
• 計算N個數字的和。
• 檢查i有沒有超過N,
超過就不做了。
• 流程圖:
233
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)
234
練習題
• 5-8.利用while寫一程式求N個數字的最大值。
• 5-9.利用while寫一程式求一個等差級數數字的
和,一共有N個數字,程式應該輸入最小的起始
值以及數字間的差(即從起始值開始,間格差,
共N個 的總和)。
• 5-10.利用while寫一程式,讀入N個數字,然
後找出所有小於13的數,再求這些數字的和。
235
練習題
• 5-8.流程圖:
236
練習題
• 5-8.參考程式:
N = int(input("請問有多少個數字? "))
MAX = 0
i = 1
while i <= N:
print("請輸入數值", i, ": ", end="")
x = int(input())
if x > MAX:
MAX = x
i = i + 1
237
練習題
• 5-9.流程圖:
238
練習題
• 5-9.參考程式:
N = int(input("請輸入N: "))
Start = int(input("請輸入起始數值: "))
Interval = int(input("請輸入間格差: "))
Sum = 0
while N > 0:
Sum += Start
Start += Interval
N -= 1
239
練習題
• 5-10.流程圖:
240
練習題
• 5-10.參考程式:
N = int(input("請問有幾個數字: "))
Sum = 0
while N > 0:
x = int(input("請輸入數值: "))
if x < 13:
Sum += x
N -= 1
241
練習題
• 5-11.利用while寫一程式,讀入N個數字,找
到第一個大於7而小於10的數字就停止,而且列
印出這個數字。
• 5-12.細菌是非常細小的,除非到達一定的量,
否則我們不容易發現它的存在。現在有一種X菌,
每隔一分鐘就會成長為原本的3倍,若它一開始
只有 1個,請問你要經過幾分鐘才會繁殖到10
個(含)以上呢? 。
242
練習題
• 5-11.流程圖:
243
練習題
• 5-11.參考程式:
N = int(input("請問有幾個數字: "))
while N > 0:
x = int(input("請輸入數值: "))
if x > 7 and x < 10:
break #此指令會強迫終止迴圈,稍後介紹
N -= 1
print("停止在: ", x)
244
練習題
• 5-12.流程圖:
245
練習題
• 5-12.參考程式
N = 1 #一開始的X菌數
M = 10 #要到達(或超過)的菌數
T = 0 #所需時間
while N <= M:
N *= 3
T += 1
print(f"需{T}分鐘")
246
迴圈補充說明
• break敘述:強制終止迴圈,會直接跳到迴圈之
後的敘述去執行。
for i in range(n):
:
if i == m :
break
:
:
跳出迴圈,執行迴圈外的下一道敘述,
注意一次只跳出一層迴圈。
247
迴圈補充說明
• continue敘述:強制回到迴圈初始的地方,忽
略之後的敘述。
while i < n :
: 跳至迴圈起始處
if i % m == 0 :
continue
:(之後的敘述都忽略)
:
:
• break和continue指令皆可用於for或while裏。
248
無盡迴圈
• 當while的條件永遠為真時,稱無盡迴圈,會一
直執行下去,我們必須在迴圈中設一個跳出迴圈
的條件,否則會執行到當機為止。
• 聽起來「條件永遠為真」好像怪怪的,但其實還
蠻常用到無盡迴圈的。
while True:
:
會一直執行
迴圈 if 某些條件 :
break
直到"某些條件"
: 成立才跳離迴圈
249
練習題
• 請使用無盡迴圈來做。
• 5-13.老師請小明將同學的國文成績輸入到電腦
累加起來並計算平均,但小明不知道有多少成績
要輸入,所以設定如果輸入負數時就停止,然後
印出平均分數。
• 5-14.電腦裡有一個祕密數字,介於1~100之間,
請使用者猜是多少,如果輸入的數字比答案大,
就回應"太大了",如果輸入的數字比答案小,
就回應"太小了",直到猜對為止。
(秘密數字自己指定,之後介紹亂數時會請電腦出題)
250
練習題
• 5-13.流程圖:
251
練習題
• 5-13.參考程式:
sum = 0 #記錄總成績用
n = 0 #紀錄輸入了幾個資料
252
練習題
• 5-14.流程圖:
253
練習題
• 5-14.參考程式:
ans = 36 #秘密數字,自己決定
while True:
x = int(input("請輸入數字:"))
if x > ans:
print("太大了")
elif x < ans:
print("太小了")
else:
print("答對了")
break #除非答對了,否則迴圈會一直執行
254
綜合練習
• 請輸出下列圖形。
1. 2. 3.
255
綜合練習
• 參考程式:
• 1. for i in range(1, 7):
print('*' * i)
•3 s = 5
for i in range(1, 12, 2):
print(' ' * s, '*' * i)
s -= 1
256
綜合練習
• 一個數等於它所有因數的合(不包括它本身),
這種數我們稱它為「完全數」。
例如:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
• 請寫一程式,找出1 ~ 10000之間所有的完全數。
257
綜合練習
• 參考程式:
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, "是完全數")
258
綜合練習
• 參考程式(詳細顯示版):
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, "是完全數")
259
綜合練習
• 韓信(前230年-前196年)是楚漢相爭期間為劉邦拚江山的
名將。有一次戰役他帶著1500名士兵戰鬥,約有四百多名士
兵死亡。當他們回到總部時,需要知道有多少士兵倖存下來。
• 然後他命令士兵3名一排,最後一排剩2名士兵。
然後他命令他們5名一排,最後一排剩3名士兵。
然後他命令他們7名一排,最後一排剩2名士兵。
• 請問有多少士兵倖存下來?
260
綜合練習
• 參考程式:
for i in range(1000, 1100):
if(i%3==2 and i%5==3 and i%7==2):
print(i)
• 說明:韓信已知損失兵力約400~500人,所以
1500人剩下應該是1000~1100人之間,所以只
要找這之間符合的數字即可。
• 答案是1073人。
261
綜合練習
• 類似題:找出1 ~ 1000之間所有滿足「三個三
個一數餘2、五個五個一數餘1、七個七個一數
餘4」的數字。
262
綜合練習
• 2.參考程式:
for i in range(1, 1000):
if(i%3==2 and i%5==1 and i%7==4):
print(i)
263
綜合練習
• 費波那西數(義大利語:Successione di Fibonacci),又
稱費氏數列、黃金分割數列。它隱藏在大自然中,如果
你注意就會觀察到。它的原則是每一個數字都是前兩個
數字的相加。 F = 0
0
F1 = 1
Fn = Fn-1 + Fn-2
• 請寫一程式計算數列的第n個數字是什麼。(0不算)
264
綜合練習
• 參考程式:
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)
265
綜合練習
• 質數判斷:對於一個正整數N來說,如果它的因
數只有1和N本身,沒有其他的因數,則我們稱
它為「質數」。現在給你一個正整數,請你判斷
它是不是質數。
• 也就是除了1和N本身之外,沒有任何數可以整
除N,則這個數就稱為質數。
• 質數在密碼學中有很大的
用處。
1~100之間的質數
266
綜合練習
• 參考程式:
N = int(input("請輸入一個整數:"))
if N < 2 or N % 2 == 0: #排除2以下及所有偶數
s = "這不是質數"
elif N == 2: #2是質數
s = "這是質數"
else:
s = "這是質數"
i = 3
while i <= int(N**0.5):
if N % i == 0:
s = "這不是質數"
break
i += 2
print(s)
267
關於AI
• 雖然現在AI可以幫你產生程式碼了,但你得看得懂啊,加油~
268
下課~
資料來源:
1.本講義部分圖片取自網路。
2.部分取自「程式語言與設計」課本(碁峰、科友)。
3.專門為中學生寫的程式語言設計(使用Python),李家同。
269