0% found this document useful (0 votes)
282 views213 pages

Python Programing 1

本文件介绍了Python编程语言的基本信息,包括其特性、安装和使用环境。文中还讨论了流程图的重要性以及如何通过流程图来解决问题,并提供了一些简单的Python程序示例和习题。最后,文件补充了Python的变量类型和基本运算符的说明。

Uploaded by

una20010827
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
0% found this document useful (0 votes)
282 views213 pages

Python Programing 1

本文件介绍了Python编程语言的基本信息,包括其特性、安装和使用环境。文中还讨论了流程图的重要性以及如何通过流程图来解决问题,并提供了一些简单的Python程序示例和习题。最后,文件补充了Python的变量类型和基本运算符的说明。

Uploaded by

una20010827
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
You are on page 1/ 213

Python程式語言 part1

劉和師
2018/12/08
1. Python簡介

 Python 是一種泛用性的動態物件導向程式語言。
 Python是一種直譯式語言。
 它可以在命令列模式下操作,也可以寫成Script檔。
 附檔名為 .py。
 Python 可以執行在 Windows、Mac OS X、Linux
等常見的作業系統平台和其它較少使用的作業系統
上,也可以在 Java 和 .Net 環境中執行。
 透過 Jython,Python 能與 Java 合作愉快;
透過 IronPython,Python 能與 .Net 合作愉快。
1. Python簡介
 Python官網 https://www.python.org/
 目前是3.7.1版(2018年10月),下載安裝後可於命令列模式
下執行,提示字元為 >>>
 若須測試簡單的指令或執行已寫好的程式,可用此模

圖示
1. Python簡介
 安裝後也有一個執行環境叫IDLE,不用再找IDE了,
之後我們都用這個環境來練習。

圖示
1. Python簡介
 可以開啟Script編寫視窗來發展程式。
1. Python簡介
 MS Visual Studio環境也支援Python
https://visualstudio.microsoft.com/zh-hant/vs/features/python/
2.流程圖(Flow Chart)
 解決問題的流程很重要,要先想好:
 1.現在是要解決甚麼問題?
 2.需要輸入什麼?
 3.要獲得什麼輸出?
 4.把解決過程畫(寫)出來,依步驟寫出程式

 流程圖是用簡單的圖形來代表
執行的步驟,協助我們思考並
建立解決步驟
2.流程圖(Flow Chart)
 流程圖有許多符號,
代表各種意義。

 在寫程式前應該都要
先畫出流程圖。
2.流程圖(Flow Chart)
 對於簡單的問題,其實記住這四個也就夠了

9
2.流程圖(Flow Chart)
 流程圖是你解決問題的想法及過程,沒有標準答案,
只要能解決問題就可以
 不過效率就有關係了,練習讓你的思考更清晰,步驟
更簡潔

10
參考教材
 我們以李家同教授編寫的「專門為中學生寫的程式語
言設計」一書為主,這是一本很簡單的書。
 程式依書中範例為主,習題解答為參考,請要自己親
自做出來

聯經出版,2018年8月
Ch1.簡單的程式
 整數加法:
假設我們有兩個整數x和y,要求輸出x+y的結果。
 流程圖:
Ch1.簡單的程式
 參考程式:
x=int(input("Please input the value of variable x: "))
y=int(input("Please input the value of variable y: "))
print("x value:",x)
print("y value:",y)

z = x + y

print("z value:",z)

 說明:
 1.深紅色的部分稱“字串”,會忠實地顯示在結果畫面上
 2. x、y、z稱“變數”,會以它們的值呈現
 3.input( )是請求鍵盤輸入,print( )是印出資訊
 4.int( )是將輸入的字串轉成整數(鍵盤輸入的都視為”字串“)
Ch1.簡單的程式
 執行情形:
Ch1.簡單的程式
 計算(x+y)/2:
假設我們有兩個整數x和y,要求輸出(x+y)/2的結果。
 流程圖:
Ch1.簡單的程式
 參考程式:
x=int(input("Please input the value of variable x: "))
y=int(input("Please input the value of variable y: "))
print("x value:",x)
print("y value:",y)

t = x + y
z = t / 2

print("z value:",z)

 說明:
 執行時空白行會予以忽略,空行是為了程式美觀或易於閱讀。
Ch1.簡單的程式
 計算(x+y)*(u+v):
假設我們有四個整數x,y,u和v,
要求(x+y)*(u+v)
 流程圖:
Ch1.簡單的程式
 參考程式:
x=int(input("Please input the value of variable x: "))
y=int(input("Please input the value of variable y: "))
u=int(input("Please input the value of variable u: "))
v=int(input("Please input the value of variable 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)
Ch1.簡單的程式
 浮點數字加法:
 用float( )取代int( )即可
x=float(input("Please input the value of variable x: "))
y=float(input("Please input the value of variable y: "))
print("x value:",x)
print("y value:",y)

z = x + y

print("z value:",z)

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

程式已經在執行了,卻沒
有任何提示要求輸入
Ch1.簡單的程式
 輸入文字:
如果要輸入文字,簡單的用input( )即可
A = input("Please input your name:")
print("How are you? Mr.", A)

 執行結果:
Ch1.簡單的程式
 計算二次方 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
Ch1.簡單的程式
 小於1的次方:
計算xy,但y為介於0到1之間的浮點數

輸入浮點數
Ch1.簡單的程式
 計算log(x):
import math
x = int(input("請輸入 x = "))
y = math.log(x)
print("y = ",y)

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

math 的 log()
Ch1.簡單的程式
 計算平方根 y = 𝑥:
 1.以import方式,使用sqrt()函數開根號
import math
x = int(input("請輸入 x = "))
y = math.sqrt(x)
print("y = ",y)
 2.不使用引入,直接用次方運算符號

x = int(input("請輸入 x = "))
y = x**0.5
print("y = ",y)

1
 說明:開根號是 次方 = 0.5次方
2
Ch1.簡單的程式
 計算y = sin(x):

import math
x = float(input("請輸入 x = "))
y = math.sin(x * math.pi)
print("y = ",y)

 math.sin()、math.pi都是math提供的函數
 Python的 π 精確到小數點後16位
Ch1.習題
(𝑎+𝑏)
 1-1.寫一程式,輸入a,b,c,d,計算 × 𝑑。先畫出
(𝑐−𝑑)
流程圖。

 1-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)
寫一程式,輸入此方程式變數之係數。計算此組
方程式的解先畫出流程圖。
Ch1.習題
 1-1流程圖:
Ch1.習題
 1-1參考程式:
a=float(input("Please input the value of variable a: "))
b=float(input("Please input the value of variable b: "))
c=float(input("Please input the value of variable c: "))
d=float(input("Please input the value of variable 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)


Ch1.習題
 1-2流程圖:
Ch1.習題
 1-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)
Ch1.習題
 1-3. 輸入a和b,求:
𝑎1+𝑏2
c=
𝑎2−𝑏2

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

 1-5. 輸入a、b和c,求:
c = a-(b+c)(3a-c)
Ch1.習題
 1-3參考程式:

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

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

print("c = ",c)
Ch1.習題
 1-4參考程式:
import math
a = float(input("請輸入 a:"))
b = float(input("請輸入 b:"))

c = math.sqrt(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)
Ch1.習題
 1-5參考程式:

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

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

print("c = ",c)
補充說明:變數、運算式和敘述
 Python的主要變數型態有:
 number,數值
 string ,字串
 list ,清單(陣列)
 tuple (set of (so many) elements -- usually used of sets with ordered elements)
 dictionary,字典
補充說明:變數、運算式和敘述
 number包含:
 浮點數:
 3.1415, 6.02E23 (64位元,倍精度)
 整數:
 100 (32 位元), 0324(八進位數) , 0xA140 (十六進
位數)
 長整數:
 5000000000 (任意精度)
 複數:
 1-5j (兩個浮點數)
補充說明:變數、運算式和敘述
 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
字串中可以換行,
也可以用’單引號’和”雙引號” '''
補充說明:變數、運算式和敘述
 list:
 和陣列類似,由中括號加逗號組成
Ex: m = [ 1, 5, 7, -3, -1, 0 ]

 清單中有清單:
Ex: k = [ 3, m, ‘hello’ ]
補充說明:變數、運算式和敘述
 tuple:
 和清單相似, 是一些量的有序集合。和清單最大的不
同是不能改變,可以作為dictionary的鍵、函式回傳、
多變數給值 ... 等
 以小括號加逗號表示, 小括弧視情況可省略
Ex: t = ( -1, 3.5, ‘hello‘ )
x, y, z = 1, 2, 3
補充說明:變數、運算式和敘述
 dictionary
 鍵 (key) 和值 (value) 的對照表 --> 「關連式記憶」
 鍵必需是不可變的型態 (如: 常數、常字串、Tuple)
 Ex: prices = { ‘apple’:7.5 , ‘orange’:4.5 , 'banana':2 }

price包含

'apple' 7.5

'orange' 4.5

'banana' 2
補充說明:變數、運算式和敘述
 變數直接使用,不需宣告:
 counter = 100 整數
 miles = 1000.0 浮點數
 name = “Devid“ 字串
 多個變數一起指定:
 a=b=c=1
 a,b,c = 1,2,"Devid"
 變數指定後,變數型態就固定,重新指定新型態的值,
等同重新宣告:
 a=1 a是整數
 a = “Devid” a變成字串了
 變數的刪除:
 a=b=c=1
 del a 刪除了變數a
補充說明:變數、運算式和敘述
 正負號:
符號 意義 範例
+ 正號 +a
- 負號 -a

 算術運算子
運算子 功能 範例
+ 加 a+b
- 減 a-b
* 乘 a*b
/ 除 a/b
% 取餘數 a%b
** 指數 a ** b
// 整除(向下取整數) a // b
補充說明:變數、運算式和敘述
 邏輯運算子:
運算子 功能 範例
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
補充說明:變數、運算式和敘述
 位元運算子:
運算子 功能 範例
& 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
補充說明:變數、運算式和敘述
 指派運算子:

運算子 功能 範例
= 指派 a=b
+= 相加同時指派 a += b
-= 相減同時指派 a -= b
*= 相乘同時指派 a *= b
/= 相除同時指派 a /= b
%= 取餘數同時指派 a %= b
**= 取指數同時指派 a **= b
補充說明:變數、運算式和敘述
運算子優先順序 說明
** 指數 (最高優先順序)
~ + - 按位翻轉, 一元加號和減號 (最後兩
個的方法名為 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法減法
>> << 右移,左移運算子
& 位 'AND'
^ | 位運算子
<= < > >= 比較運算子
<> == != 等於運算子
= %= /= //= -= += *= **= 設定運算子
is is not 身份運算子
in not in 成員運算子
not and or 邏輯運算子
補充說明:變數、運算式和敘述
 + 與 * 也可用於字串 (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
 適度的使用括符( )區分優先順序
補充說明:變數、運算式和敘述
 型別轉換:
 str(x) #轉換成字串
 int(x) #轉換成整數
 float(x) #轉換成浮點數
 complex(x) #轉換為複數
補充說明:變數、運算式和敘述
 索引切片運算:
只要具有索引特性,基本上都能進行切片運算。如字
串、list、tuple等。
 例如:
name = ‘Justin’ 則 起始值 到m-1個

name[0:3] 得到 ’Jus’
name[3:] 得到 ’tin’ [ n :m ]
name[:4] 得到 ’Just’
name[:-1] 得到 ’Justi’ (-1是倒數第一個)
name[-5:-1] 得到 ’usti’
補充說明:變數、運算式和敘述
 註解:
 單行註解:用 # 開頭的部分至行尾
# This is a comment…………………
print(‘Hello’) # This is a comment….

 多行註解:連續三個單引號 ’’’框住的範圍
’’’
這是
多行註解
’’’
休息一下~
Ch2.有if指令的程式
 if是:「如果怎樣怎樣,你就該如何如何」
 圖2.1的意義是:如果某某條件成立,執行程式A,否
則執行程式B。
Ch2.有if指令的程式
 讀入兩個數x和y,選出大的那一個。
 流程圖:
Ch2.有if指令的程式
 參考程式:
x=int(input("Please input the value of variable x: "))
y=int(input("Please input the value of variable y: "))
print("x = ",x)
print("y = ",y)

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

print("z = ",z)

 程式中縮排的空格數目必須相同,一般用4格,不可以和
Tab混用,一般是用空白
Ch2.有if指令的程式
 讀入x和y,如果x>y,則回傳x-y,否則回傳y-x。
 流程圖:
Ch2.有if指令的程式
 參考程式:
x=int(input("Please input the value of variable x: "))
y=int(input("Please input the value of variable y: "))
print("x = ",x)
print("y = ",y)

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

print("z = ",z)
Ch2.有if指令的程式
 讀入一數字,如果是負數,就將它轉成正數。
 流程圖:
Ch2.有if指令的程式
 參考程式:

x=int(input("Please input the value of variable x: "))

if x < 0:
x = -x

print("x = ",x)
Ch2.有if指令的程式
 輸入一個學生的分數,輸出該成績級別,分數級別如下:
90分以上  A
80~89分  B
70~79分  C
60~69分  D
60分以下  F

 流程圖:
Ch2.有if指令的程式
 參考程式:
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)
Ch2.有if指令的程式
 某商店在大特價,根據購買的商品總金額決定打折的
折扣,總金額越高折扣越多,折扣表如下:
未滿1000  無折扣
1000~4999  9折
5000~9999  8折
高於10000  7折
小數點四捨五入,印出折扣後的金額。
Ch2.有if指令的程式
 流程圖:
Ch2.有if指令的程式
 參考程式:
print("輸入總金額,將會依據金額打折,並輸出打折後的金額")
money = int(input("請輸入購買總金額: "))
if money < 1000:
print("抱歉,沒有折扣唷!")
discount = 1.0
elif money < 4999:
print("享有9折優惠唷!") 函數round(n,m)
discount = 0.9 將n值在小數點第m位
elif money < 9999:
print("享有8折優惠唷!")
四捨五入
discount = 0.8
else:
print("享有7折優惠唷!")
discount = 0.7
money = int(round(money * discount,0))
print("打折後總金額為: ",money)
Ch2.習題
 以下各題均需先畫出流程圖。
 2-1.寫一程式,輸入x和y,如果x≥y,則列印x,否則
列印y

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

 2-3.寫一程式,輸入x、y、u、v,如果(x+y)>(u+v),
則令z=x-y,否則令z=u-v
Ch2.習題
 2-1流程圖:
Ch2.習題
 2-1參考程式:

x=int(input("Please input the value of variable x: "))


y=int(input("Please input the value of variable y: "))
print("x = ",x)
print("y = ",y)

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

print("z = ",z)
Ch2.習題
 2-2流程圖:
Ch2.習題
 2-2參考程式:
x=int(input("Please input the value of variable x: "))
y=int(input("Please input the value of variable 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)
Ch2.習題
 2-3流程圖:
Ch2.習題
 2-3參考程式:
x=int(input("Please input the value of variable x: "))
y=int(input("Please input the value of variable y: "))
u=int(input("Please input the value of variable u: "))
v=int(input("Please input the value of variable 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)
Ch2.習題
𝑥+𝑦
 2-4.寫一程式,輸入x、y、u、v,如果 ≥ 2,令
𝑢−𝑣
z=x-y,否則令z=u-v。

 2-5.寫一程式,輸入x和y,如果x≥y,令z=x2,否則令
z=y2
Ch2.習題
 2-4流程圖:
Ch2.習題
 2-4參考程式:
x=int(input("Please input the value of variable x: "))
y=int(input("Please input the value of variable y: "))
u=int(input("Please input the value of variable u: "))
v=int(input("Please input the value of variable 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)
Ch2.習題
 2-5流程圖:
Ch2.習題
 2-5參考程式:
x=int(input("Please input the value of variable x: "))
y=int(input("Please input the value of variable y: "))
print("x = ",x)
print("y = ",y)

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

print("z = ",z)
Ch2.習題
 2-6.依照以下的流程圖,
寫一程式。
Ch2.習題
 2-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)
x=int(input("Enter x: "))
Ch2.習題 y=int(input("Enter y: "))
if x > 0:
 2-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")
Ch2.習題
 2-7.流程圖
休息一下~
Ch3. for迴圈指令
 如果在程式中遇到要重複同樣動作的指令,就要使用
迴圈指令
Ch3. for迴圈指令
 讀入五個整數,
求這五個整數的和。

 流程圖:
Ch3. for迴圈指令
 參考程式:
sum = 0

for i in range(5):
tmp = int(input("Please input the value: "))
sum = sum + tmp

print("sum = ",sum)

 i 會從0開始,每次加1,直到i=4為止(共5次),在這
個範圍內for迴圈內的敘述就要重複執行。
Ch3. for迴圈指令
 求N個整數的和,
N由使用者輸入。

 流程圖:
Ch3. for迴圈指令
 參考程式:
N = int(input("Please input the value of variable N: "))
sum = 0

for i in range(N):
tmp = int(input("Please input the value: "))
sum = sum + tmp

print("sum = ",sum)

 迴圈重複的次數由輸入的N決定,從0到N-1
Ch3. for迴圈指令
 假設有N個正整數,求其中的最大值。
 先假設最大值(MAX)等於0,然後逐一檢查讀入的每一
個數字,如果比MAX還大,就令MAX等於這個數字,
如果沒有比MAX大,就不做任何事情,最後MAX一定
會是這一串數字中的最大值。
Ch3. for迴圈指令
 流程圖:
Ch3. for迴圈指令
 參考程式:
N = int(input("Please input the value of variable N: "))
MAX = 0

for i in range(N):
tmp = int(input("Please input the value: "))
if tmp > MAX:
MAX = tmp

print("MAX = ",MAX)
Ch3. for迴圈指令
 求最大奇數值。
 先假設最大值(MAX)等於0,然後逐一檢查讀入的每一
個數字,如果是奇數且比MAX還大,就令MAX等於這
個數字,如果不是,就不做任何事情,最後MAX一定
會是這一串數字中的奇數最大值。
 可以用%(取餘數)運算,例如將n除以2之後若餘0,為
偶數,若餘1則為奇數。
Ch3. for迴圈指令
 流程圖:
Ch3. for迴圈指令
 參考程式:
N = int(input("Please input the value of variable N: "))
MAX = 0

for i in range(N):
tmp = int(input("Please input the value: "))
if tmp % 2 != 0:
if tmp > MAX:
MAX = tmp

print("MAX = ",MAX)
Ch3. for迴圈指令
 求N階層,即求1×2×3×…×N。
 請求輸入N,讓for迴圈自2依序
乘到N,所以要寫成

for i in range(2,N+1)

 流程圖:
Ch3. for迴圈指令
 參考程式:
N = int(input("Please input the value of variable 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
Ch3. for迴圈指令
 輸出一個九九乘法表。
 利用兩層迴圈,又稱
巢狀迴圈。
 迴圈的層數沒有限制,
但越多效率越差。

 流程圖:
Ch3. for迴圈指令
 參考程式:
for x in range(1,10):
for y in range(1,10):
print(x," * ",y," = ",x*y),
print()

 執行結果:
Ch3. for迴圈指令
 請將程式改成如下輸出:
Ch3. 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=“ “參
數後就會依我們加入的文字當結尾。
Ch3. 習題
 3-1.寫一程式,輸入10個整數,求其最小值。

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

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

 3-4.寫一程式,輸入10個整數,列出其中所有大於12
的數字的總和。
Ch3. 習題
 3-1流程圖:
Ch3. 習題
 3-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)

 先將第一個輸入的值當成最小的,再依序跟後續輸入
的做比較。
Ch3. 習題
 3-2流程圖:
Ch3. 習題
 3-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)
Ch3. 習題
 3-3流程圖:
Ch3. 習題
 3-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
印出來。
Ch3. 習題
 3-4流程圖:
Ch3. 習題
 3-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)
Ch3. 習題
 3-5.寫一程式,輸入N個數字,求其所有奇數中的最大
值。例如輸入11,12,3,24,15,答案是15。

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

 3-7.寫一程式,輸入N個數字,其中有些是負數,將這
些負數轉換成正數,例如-7會被轉換成7。
Ch3. 習題
 3-5.流程圖:
Ch3. 習題
 3-5.參考程式:
N = int(input("Please input the value of variable N: "))
MAX = 0

for i in range(N):
tmp = int(input("Please input the value: "))
if tmp % 2 != 0:
if tmp > MAX:
MAX = tmp

print("MAX = ",MAX)
Ch3. 習題
 3-6.流程圖:
Ch3. 習題
 3-6.參考程式:
N = int(input("Please input the value of variable N: "))
sum = 0

for i in range(N):
print("Please input number",i+1,": ",end="")
tmp = int(input())
if tmp > 0:
sum += tmp**2

print("Sum = ",sum)
Ch3. 習題
 3-7.流程圖:
Ch3. 習題
 3-7.參考程式:
N = int(input("Please input the value of variable N: "))
OUT = ""

for i in range(N):
print("Please input number",i+1,": ",end="")
tmp = int(input())
if tmp < 0:
tmp *= -1
OUT = OUT + str(tmp) + " "

print("Result =",OUT)
休息一下~
Ch4. while迴圈指令
 通常for圈都用在確定要重複執行多少次的情況,若重
複的次數不定,我們可以用while迴圈。
 while以”是”、“否”來做為終止條件。
 當條件為真時執行迴圈,為假時結束迴圈

while 條件 假

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

x = int(input("Please input the value of variable: "))

while x >= 0:
print("x = ",x)
x = int(input("Please input the value of variable: "))

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

 輾轉相除法:兩數相除,取餘數重複進行相除,直到
餘數為0時,前一個除數即為最大公約數。
Ch4. while迴圈指令
 流程圖:
Ch4. while迴圈指令
 參考程式:
M = int(input("Please input the value of variable M: "))
N = int(input("Please input the value of variable N: "))
x = M
y = N

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

print("x = ",x)
Ch4. while迴圈指令
 參考程式二:
a = int(input("Please input the value of variable a: "))
b = int(input("Please input the value of variable 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))
Ch4. while迴圈指令
 關於兩變數交換內容的方式:
 其他語言都須借助第三個變數當中介,例如要交換a,b
的內容,則需寫成
temp
temp = a
a = b
b = temp a 2 b
 在python語言只需要一行即可

a , b = b , a
Ch4. while迴圈指令
 計算N個數字的和。
 檢查i有沒有超過N,
超過就不做了。
 流程圖:
Ch4. while迴圈指令
 參考程式:
N = int(input("Please input the value of variable N: "))
i = 1
S = 0

while i <= N:
x = int(input("Please input the value of variable x: "))
S = S + x
i = i + 1

print("S = ",S)
Ch4. 習題
 4-1.利用while寫一程式求N個數字的最大值。

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

 4-3.利用while寫一程式,讀入N個數字,然後找出所
有小於13的數,再求這些數字的和。
Ch4. 習題
 4-1.流程圖:
Ch4. 習題
 4-1.參考程式:
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)
Ch4. 習題
 4-2.流程圖:
Ch4. 習題
 4-2.參考程式:
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)
Ch4. 習題
 4-3.流程圖:
Ch4. 習題
 4-3.參考程式:
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)
Ch4. 習題
 4-4.利用while寫一程式,讀入N個數字,找到第一個
大於7而小於10的數字就停止,而且列印出這個數字。

 4-5.利用while寫一程式,讀入a1,a2,…,a5和b1,b2,…,b5。
找到第一個ai>bi,即停止,並列印出ai及bi。
Ch4. 習題
 4-4.流程圖:
Ch4. 習題
 4-4.參考程式:
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)


Ch4. 習題
 4-5.流程圖:
Ch4. 習題
 4-5.參考程式(依序輸入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
Ch4. 習題
 4-5.參考程式(用陣列來做,但進度在下一章):
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])


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

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

跳出迴圈,執行迴圈外的下一道敘述
迴圈補充說明
 continue敘述:強制回到迴圈初始的地方,忽略之後
的敘述。

while i < 10 :
: 跳至迴圈起始處
if i % 5 == 0 :
continue
:(之後的敘述都忽略)
:
:
休息一下~
Ch5.陣列
 在過去的章節,我們的做法是每次讀入一個資料,就
立刻去處理,當讀入的資料一多就很不方便,應該先
儲存至記憶體,以便後續處理,最普通的辦法是使用
陣列。
 目的:
 減少變數的個數,使程式的編寫更容易
 陣列可配合迴圈來處理大量資料
Ch5.陣列
 下圖為一維陣列的概念,陣列名稱為A,依陣列的編
號[ n ]來存取。

註標 [0] [1] [2] [9]


A ……
第1個元素 第10個元素

注意:陣列註標為正整數,而且是從0開始
Ch5.陣列
 利用一維陣列求10個數字的計算平均值。
 流程圖:
Ch5.陣列
 參考程式:
宣告一維陣列A[10],
並填入初值0
A = [0 for i in range(10)]

for i in range(10):
tmp = int(input("Please input the value: "))
A[i] = tmp
將輸入的數值存入陣列
x = 0
for i in range(10):
x = x + A[i]
將陣列裡的值依序加總
x = x / 10
print("x = ",x)
Ch5.陣列
 利用一維陣列求10個數字的最大值。
 流程圖:
Ch5.陣列
 參考程式:
A = [0 for i in range(10)]

for i in range(10):
tmp = int(input("Please input the value: "))
A[i] = tmp

MAX = 0
for i in range(10):
x = A[i]
if x > MAX:
MAX = x

print("MAX = ",MAX)
Ch5.陣列
 搜尋問題:輸入10個數字至A[ ],再輸入x,判斷x是
否存在於A陣列中,如果存在,輸出所在的註標(索引)
值,若不存在,則告知不存在。
 流程圖:
Ch5.陣列
 參考程式:
A = [0 for i in range(10)]

for i in range(10):
tmp = int(input("Please input the value: "))
A[i] = tmp

x = int(input("Please input the value youy want to search: "))


k = 0
for i in range(10):
if x == A[i]:
k = 1
print("index = ",i)

if k == 0:
print(x," does not exist")
Ch5.陣列
 二維陣列:使用兩個註標來宣告並使用陣列。
 宣告並指定初值:

A = [[0 for i in range(4)] for j in range(3)]

column

0 1 2 3
0 A[0][0] A[0][1] A[0][2] A[0][3]

row 1 A[1][0] A[1][1] A[1][2] A[1][3]

2 A[2][0] A[2][1] A[2][2] A[2][3]


Ch5.陣列
 兩個二維矩陣相加。以陣列模擬矩陣,求兩個2乘3的
二維矩陣相加之結果,第一個及第二個矩陣分別以A
及B表示,相加之結果存入C矩陣,最後將C矩陣內容
顯示出來。
 圖示:

+ =
A B C
Ch5.陣列
 流程圖:
Ch5.陣列
w = 3
 參考程式: h = 2
#宣告A是一個h*w = 2*3的陣列
A = [[0 for i in range(w)] for j in range(h)]
print("請輸入矩陣A的值...")
for i in range(h):
for j in range(w):
print("請輸入A[",i,"][",j,"]的值: ",end=" ")
A[i][j] = int(input())
#宣告B是一個h*w = 2*3的陣列
B = [[0 for i in range(w)] for j in range(h)]
print("請輸入矩陣B的值...")
for i in range(h):
for j in range(w):
print("請輸入B[",i,"][",j,"]的值: ",end=" ")
B[i][j] = int(input())
print("矩陣A、B相加結果儲存於矩陣C中: ")
#宣告C是一個h*w = 2*3的陣列
C = [[0 for i in range(w)] for j in range(h)]
for i in range(h):
for j in range(w):
#計算A[i][j]+B[i][j],將結果存入C[i][j]並印出
C[i][j] = A[i][j] + B[i][j]
print("C[",i,"][",j,"] = ",C[i][j])
Ch5.陣列
 兩個矩陣相乘。求2乘3的A矩陣乘以3乘1的B矩陣,
結果存入2乘1的C矩陣,最後將C矩陣的內容顯示出
來。
 圖示:
Ch5.陣列
 參考程式: #ha、wa代表陣列A的行列數目
ha = 2
wa = 3
#宣告A是一個ha*wa = 2*3的陣列
A = [[0 for i in range(wa)] for j in range(ha)]
print("請輸入矩陣A的值...")
for i in range(ha):
for j in range(wa):
print("請輸入A[",i,"][",j,"]的值: ",end=" ")
A[i][j] = int(input())
#hb、wb代表陣列B的行列數目
hb = 3
wb = 1
#宣告B是一個hb*wb = 3*1的陣列
B = [[0 for i in range(wb)] for j in range(hb)]
print("請輸入矩陣B的值...")
for i in range(hb):
for j in range(wb):
print("請輸入B[",i,"][",j,"]的值: ",end=" ")
B[i][j] = int(input())
print("矩陣A、B相乘結果儲存於矩陣C中: ")
Ch5.陣列
 參考程式:
#宣告C是一個ha*wb = 2*1的陣列
C = [[0 for i in range(wb)] for j in range(ha)]
for i in range(ha):
for j in range(wb):
C[i][j] = 0
for k in range(wa):
#將A[i][k]*B[k][j]的結果累加入C[i][j]
C[i][j] = C[i][j] + A[i][k] * B[k][j]
#最後印出C[i][j]
print("C[",i,"][",j,"] = ",C[i][j])
Ch5.習題
 5-1.寫一程式,將10個數字讀入A陣列,然後逐一檢查
此陣列,如A[i]>5,則令A[i]=a[i]-5,否則A[i]=A[i]+5。

 5-2.寫一程式,將10個數字讀入A陣列,對每一個數字,
令A[i]=A[i]+i。

 5-3.寫一程式,將10個數字讀入A陣列,並建立一個B
陣列,如A[i]≥0,令B[i]=1,否則令B[i]=0。

 5-4.寫一程式,將15數字存入3×5的二維陣列A中,求
每一行及每一列數字的和。
Ch5.習題
 5-1流程圖:
Ch5.習題
 5-1.參考程式:

A = [0 for i in range(10)]

for i in range(10):
A[i] = int(input("Please input the value: "))

for i in range(10):
if A[i] > 5:
A[i] -= 5
else:
A[i] += 5
print("A[",i,"] = ",A[i])
Ch5.習題
 5-2流程圖:
Ch5.習題
 5-2.參考程式:

A = [0 for i in range(10)]

for i in range(10):
A[i] = int(input("Please input the value: "))

for i in range(10):
A[i] += i
print("A[",i,"] = ",A[i])
Ch5.習題
 5-3流程圖:
Ch5.習題
 5-3.參考程式:
A = [0 for i in range(10)]
B = [0 for i in range(10)]

for i in range(10):
A[i] = int(input("Please input the value: "))

for i in range(10):
if A[i] >= 0:
B[i] = 1
else:
B[i] = 0
print("B[",i,"] = ",B[i])
Ch5.習題
 5-4流程圖:

將陣列宣告時,行列個多一個,
用來儲存行和列的和
Ch5.習題
 5-4.參考程式:
A = [[0 for j in range(6)] for i in range(4)]
#請求輸入
for i in range(3):
for j in range(5):
print("Please input A[",i,"][",j,"]: ",end=" ")
A[i][j] = int(input())
#計算列,將列的和存入每列最後一個元素
for i in range(3):
for j in range(5):
A[i][5] += A[i][j]
#計算行,將行的和存入每行最後一個元素
for j in range(6):
for i in range(3):
A[3][j] += A[i][j]
#印出矩陣和結果
for i in range(4):
for j in range(6):
print(A[i][j],"\t",end="")
print()
Ch5.習題
 5-5.寫一程式,將15數字存入3×5的二維陣列A中,求
每一行及每一列數字的最小值。

 5-6.寫一程式,輸入兩組數字:a1,a2,…,a5和
b1,b2,…,b5。求ai+bi,i=1到i=5。

 5-7.寫一程式,輸入兩組數字: a1,a2,…,a5和
b1,b2,…,b5。令x為a中的最大值,令y為b中的最大值,
求x與y中較小者。
Ch5.習題
 5-5流程圖:
Ch5.習題
 5-5.參考程式:
A = [[0 for j in range(6)] for i in range(4)]
#請求輸入
for i in range(3):
for j in range(5):
print("Please input A[",i,"][",j,"]: ",end=" ")
A[i][j] = int(input())

#尋找列,將列的最小值存入每列最後一個元素
for i in range(3):
min = A[i][0]
for j in range(1,5):
if A[i][j] < min:
min = A[i][j]
A[i][5] = min
Ch5.習題
 5-5.參考程式:
#尋找行,將行的最小值存入每行最後一個元素
for j in range(6):
min = A[0][j]
for i in range(1,3):
if A[i][j] < min:
min = A[i][j]
A[3][j] = min
#印出矩陣和結果
for i in range(4):
for j in range(6):
print(A[i][j],"\t",end="")
print()
Ch5.習題
 5-6流程圖:
Ch5.習題
 5-6.參考程式:
a = [0 for i in range(6)]
b = [0 for i in range(6)]
#輸入a陣列
for i in range(1,6):
a[i] = int(input("Please input a["+str(i)+"]: "))
#輸入b陣列
for i in range(1,6):
b[i] = int(input("Please input b["+str(i)+"]: "))
#計算a[i]+b[i]
for i in range(1,6):
x = a[i] + b[i]
print("a["+str(i)+"] + b["+str(i)+"] =",x)
Ch5.習題
 5-7流程圖:
Ch5.習題
 5-7.參考程式:
a = [0 for i in range(5)]
b = [0 for i in range(5)]
max_a = 0
index_a = 0
for i in range(5): #輸入a陣列並記錄最大值
a[i] = int(input("Please input a["+str(i)+"]: "))
if a[i] > max_a:
max_a = a[i]
index_a = i
max_b = 0
index_b = 0
for i in range(5): #輸入b陣列並記錄最大值
b[i] = int(input("Please input b["+str(i)+"]: "))
if b[i] > max_b:
max_b = b[i]
index_b = i
if max_a < max_b: #顯示較小者
print("a[",index_a,"] =",max_a)
else:
print("b[",index_b,"] =",max_b)
休息一下~
Ch6.副程式
 將程式的步驟依功能分成幾個小部分,再由主程式去
呼叫即可,可是較大的程式簡單明瞭。
 程式中重複的段落可以寫成副程式的方式,代入不同
的參數重複呼叫,可以精簡程式並容易維護。
 有時亦稱函數
 副程式需要傳回結果時用return指令。
 宣告方式:
def 副程式名稱(參數1,參數2,…):
:
敘述
:
Ch6.副程式
 兩個一維陣列 相加:
 1.將一組數字讀入A陣列。
 2.將一組數字讀入B陣列。
 3.將A陣列與B陣列相加,成為C陣列,列印C陣列。

 我們需要三個副程式:
 1.將數字讀入一個陣列的副程式。
 2.將兩個陣列相加的副程式。
 3.列印一個陣列的副程式。
Ch6.副程式
 1.將數字讀入一個陣列的副程式。

def input_array(x,n):
print("---開始讀取陣列---")
i = 0
while i < n:
input_number = int(input("輸入數字: "))
x[i] = input_number
i += 1

 副程式名稱為input_array,並需要傳入x及n兩個參數,x是陣
列名稱,n是要輸入的數字的數目。
Ch6.副程式
 2.將兩個陣列相加的副程式。
def add_array(x,y,z,n):
print("---開始陣列相加---")
i = 0
while i < n:
z[i] = x[i] + y[i]
i += 1

 副程式名稱為add_array,並需要傳入x、y、z三個陣列名稱
及數字的數目n。
Ch6.副程式
 3.列印一個陣列的副程式。
def print_array(x,name,n):
print("---開始印出陣列---")
i = 0
while i < n:
print(name,"[",i,"]",x[i])
i += 1

 副程式名稱為print_array,並需要傳入陣列名稱x,及要印出
的陣列名稱的字母name,及數字的數目n。
Ch6.副程式
 主程式:
num = int(input("請輸入陣列大小:"))

#宣告陣列
A = [0 for i in range(num)]
B = [0 for i in range(num)]
C = [0 for i in range(num)]

#依序呼叫各個動作的副程式
input_array(A,num)
input_array(B,num)
add_array(A,B,C,num)
print_array(A,"A",num)
print_array(B,"B",num)
print_array(C,"C",num)
Ch6.副程式
 呼叫副程式方式:
input_array(A,num)
返回主程式

呼叫副程式
傳遞參數

def input_array(x,n):
print("---開始讀取陣列---")
i = 0
while i < n:
input_number = int(input("輸入數字: "))
x[i] = input_number
i += 1
Ch6.副程式
 完整程式:
def input_array(x,n): #main
print("---開始讀取陣列---") num = int(input("請輸入陣列大小:"))
i = 0 A = [0 for i in range(num)]
while i < n: B = [0 for i in range(num)]
input_number = int(input("輸入數字: ")) C = [0 for i in range(num)]
x[i] = input_number
i += 1 input_array(A,num)
input_array(B,num)
def add_array(x,y,z,n): add_array(A,B,C,num)
print("---開始陣列相加---") print_array(A,"A",num)
i = 0 print_array(B,"B",num)
while i < n: print_array(C,"C",num)
z[i] = x[i] + y[i]
i += 1

def print_array(x,name,n):
print("---開始印出陣列---")
i = 0
while i < n:
print(name,"[",i,"]",x[i])
i += 1
Ch6.副程式
 求陣列中最大之數:將5個數字讀入陣列,求陣列中
最大之數。我們需要兩個副程式。
 1.將5個數字讀入一個陣列的副程式。
 2.求這個陣列中數字最大值的副程式。

 這裡使用return敘述將結果回傳給呼叫它的敘述,所
以呼叫這個副程式時需準備接收傳回值。
 Python可以直接傳遞陣列,與傳遞變數相同。
 len( )函數會傳回陣列或字串的長度(個數)
Ch6.副程式
 參考程式: def createArray():
A = [0 for i in range(5)]
for i in range(5):
x = int(input("Input number:"))
A[i] = x
return A

def getMax(A):
max = 0
for i in range(len(A)):
if A[i] > max:
max = A[i]
return max

#main
array = createArray()
print(getMax(array))
Ch6.副程式
 Array + 1:
 1.讀入5個數字,將這5個數字放入一個陣列中。
 2.對每一個陣列中的數字都加1,然後列印出來。

 Python使用print( )可以
直接列印陣列,不須使
用迴圈。
Ch6.副程式
 參考程式: def createArray():
A = [0 for i in range(5)]
for i in range(5):
x = int(input("Input number:"))
A[i] = x
return A

def addition(A):
for i in range(len(A)):
A[i] += 1
return A

#main
array = createArray()
print("After addition:",addition(array))
Ch6.副程式
 求小於N的所有質數。
 質數(Prime number),又稱素數,指在大於1的自然數
中,除了1和該數自身外,無法被其他自然數整除的數
 例如假設N=20,則小於20的質數有1,2,3,5,7,11,13,17,19。

 我們需要一個副程式,這個副程式輸入一個正整數x,
然後判斷x是否是一個質數。
Ch6.副程式
 流程圖:
Ch6.副程式
 參考程式: def prime(x):
1不列入質數
if x == 1:
prime = 0
elif x <= 3:
2,3是質數,不用計算
prime = 1
else:
j = 2
prime = 1
while j <= (x / 2): 算到x的1/2即可,
if x % j == 0: 再加上去也不可能
prime = 0 整除x了
j += 1
if prime == 1:
print(x,"是一個質數")
#main
N = int(input("請輸入一個正整數N:"))
i = 1
while i <= N:
prime(i)
不能輸入0或1,
i += 1 會沒有輸出訊息
Ch6.副程式
 求出各科平均分數及總平均分數。
 我們有m個學生,每一個學生有n門課,我們的任務是對每
一門課,求這門課的平均分數,然後求所有科目的總平均。
求科目的
平均分數

求所有科目
的總平均
Ch6.副程式
 參考程式: def subjectAverage(i,m,Array): #求第i科平均成績
sum = 0
for j in range(m):
sum += Array[j][i]
sum /= m
print("第",i+1,"科平均為:",sum)
return sum
def getAverage(m,n,Array): #求各科總平均
sum = 0
for i in range(n):
sum = sum + subjectAverage(i,m,Array)
sum /= n
print("總平均:",sum)
def inputArray(n): #輸入某位學生n科成績
B = [0 for i in range(n)]
for i in range(n):
print("輸入第",i+1,"科:")
x = int(input())
B[i] = x
return B
Ch6.副程式
 參考程式: def input2DArray(m,n): #輸入m個學生的n科成績
A = [[0 for i in range(n)] for j in range(m)]
for i in range(m):
print("--請輸入第",i+1,"位學生的成績--")
B = inputArray(n)
A[i] = B
return A

#main
m = int(input("請輸入學生數目:"))
n = int(input("請輸入科目數:"))
Array = input2DArray(m,n)
getAverage(m,n,Array)

 副程式裡可以再呼叫其他副程式,也可以呼叫自己(這
情況稱遞迴(Recursive))
Ch6.副程式
 判斷日期先後順序。
 輸入日期A與日期B,若:
 日期A在日期B之前,輸出「日期A在日期B之前」。
 日期A在日期B之後,輸出「日期A在日期B之後」。
 日期A在日期B相同,輸出「日期A在日期B相同」。

 假設輸入格式為(日/月/年)「21/01/2018」存入變數
temp,則使用split()方法可將字串拆開。
date = temp.split("/")
 以「/」為分隔,拆成三組字串,存入date陣列,使得
date[0]="21",date[1]="01",date[2]="2018"
Ch6.副程式
 流程圖:
Ch6.副程式
 流程圖:
Ch6.副程式
 參考程式: def catch_date(X,day): #將日期分開存入陣列副程式
print("請輸入日期",day,"(日/月/年):",end="")
temp = input()
#main date = temp.split("/")
A = [0 for i in range(3)] for i in range(3):
catch_date(A,"A") X[i] = int(date[i])
B = [0 for i in range(3)]
catch_date(B,"B") def compare(A,B): #比較日期副程式
compare(A,B) result = 0
i = 2
while result == 0:
if A[i] > B[i]:
print("日期A在日期B之後")
result = 1
 程式中副程式要 elif A[i] < B[i]:
print("日期A在日期B之前")
寫在前面,最後 result = 1
elif i == 0:
再寫主程式。 print("日期A與日期B相同")
result = 1
else:
i -= 1
Ch6.副程式
 輸出「*」三角形,如圖。
 印完後要顯示”Enter x to quit, or any other key to continue:”,如
果使用者按x鍵,程式就要停止,其他任何鍵就會再印
一次星號


**
***
****
*****
Ch6.副程式
 流程圖:
Ch6.副程式
 參考程式:
def triangle():
for i in range(7):
for j in range(i):
print("*",end="")
print("")
#main
triangle()
ch = input("Enter x to quit, or any other key to continue:")
while ch != "x":
triangle()
ch = input("Enter x to quit, or any other key to continue:")

 print("")會單純的換行而已
Ch6.副程式
 密文解碼。
 為了保密,可以將原文加密,加密的方法有很多種,
最簡單的英文加密方法是將每一個字母做位移,假設
只考慮26個英文大寫字母,且位移規則如下:
原來字母 A B C … X Y Z
轉換後字母 D E F … A B C

小寫字母規則亦同。可以看出皆是往後移三個字母。
 還原的動作叫解密,假設加密後的文字為DSSOH和
CRR,解密後的文字就是APPLE和ZOO。
Ch6.副程式
 流程圖:
Ch6.副程式
 參考程式:
plain_text = ""
cipher_text = input("請輸入密文:")

for ch in cipher_text:
if (ch>="d" and ch<="z") or (ch>="D" and ch<="Z"):
ch = chr(ord(ch) - 3)
elif (ch>="a" and ch<="c") or (ch>="A" and ch<="C"):
ch = chr(ord(ch) + 23)
plain_text += ch

print("原文為:" + plain_text)
Ch6.副程式
 說明:
 在ASCII碼中,字母A的編碼為6510,則函數

ord(“A”)會傳回A的編碼65
chr(65)會傳回字母A

 所以字母也可以加或減,會得到另一個字母。
Ch6.習題
 6-1.在主程式中接受使用者輸入梯形之上底、下底與
高的值,並呼叫一副程式,將之上底、下底與高的值
傳入該副程式後,在副程式中計算並印出梯形面積的
值。
 6-2.寫一副程式,接受主程式傳進的陣列與陣列大小,
分別計算陣列上第奇數個元素與第偶數個元素之平均
值並印出。
 6-3.在主程式中接受使用者輸入A、B、C的值並呼叫
一副程式,將A、B、C的值傳入副程式中,在副程式
中判斷|A|、|B|、|C|之大小順序,回傳絕對值最大者
並在主程式中印出,|A|、|B|、|C|之最大值。
Ch6.習題
 6-1.參考程式:
def trapezoid(A,B,H):
return ((A + B)* H) / 2

a = float(input("請輸入上底:"))
b = float(input("請輸入下底:"))
h = float(input("請輸入高:"))
print("此梯形面積為:",trapezoid(a,b,h))

 副程式trapezoid()的傳回值直接交給print()列
印。
Ch6.習題
 6-2.參考程式:
def averageElement(X,L): #main
even = 0 L = int(input("請輸入有多少個元素:")) + 1
odd = 0 A = [0 for i in range(L)]
c1 = 0 for i in range(1,L):
c2 = 0 print("請輸入元素",i,":",end="")
for i in range(1,L): A[i] = int(input())
if i % 2 == 0: averageElement(A,L)
even += X[i]
c2 += 1
else:
odd += X[i]
c1 += 1
print("奇數元素平均:",odd/c1)
print("偶數元素平均:",even/c2)
Ch6.習題
 6-3.參考程式:
def maxABS(a,b,c):
a = abs(a)
abs()函數會傳回數值的絕對值
b = abs(b)
c = abs(c)
if a > b:
max = a
else:
max = b
if c > max:
max = c
return max
#main
A = int(input("Please input number A:"))
B = int(input("Please input number B:"))
C = int(input("Please input number C:"))
print("Max of absolute value is:",maxABS(A,B,C))
Ch6.習題
 6-4.在主程式中接受使用者輸入首項a1,公比r與項數
n,呼叫一副程式並將a1、r、n的值傳入,在副程式中
計算等比級數第n項的值並回傳,在主程式中印出該
值。

 6-5.在主程式中接受使用者輸入一個陣列的值,將陣
列的值與陣列的大小傳入一副程式中,此副程式將會
計算該陣列之中位數並回傳,主程式在收到此副程式
的回傳值之後印出。
Ch6.習題
 6-4.參考程式:
def progression(a1,r,n):
return a1*(r**(n-1))

#main
A1 = int(input("請輸入首項:"))
R = int(input("請輸入公比:"))
N = int(input("請輸入項數:"))
print(progression(A1,R,N))

 等比級數第n項的值為:

𝑎𝑛 = 𝑎1𝑟 𝑛−1
Ch6.習題
 6-5.參考程式:
def median(x,L):
x.sort() #先將陣列排序
if L % 2 != 0:
return x[int(L/2)]
else:
return (x[int(L/2-1)] + x[int(L/2)]) / 2

#main
L = int(input("請輸入陣列長度:"))
X = [0 for i in range(L)]
for i in range(L):
print("請輸入數值",i+1,":",end="")
X[i] = int(input ())
print("中數:",median(X,L))
Ch6.習題
 6-5.說明:
 若陣列元素個數為奇數,則中位數為正中間元素的值。
0 1 2 3 4 5 6

𝑛
Q =第 個元素的值
2

 若陣列元素個數為偶數,則中位數為中間兩個元素的
平均值。 0 1 2 3 4 5

𝑛 𝑛
Q =第 及 + 1 兩個元素的平均值
2 2
休息一下~

You might also like