第二章 基礎課程
- 2-1 資料型態
- 2-2 運算子
- 2-3 選擇敘述
- 2-4 迴圈 (1) - FOR 迴圈
- 2-5 迴圈 (2) : while迴圈
- 2-6a 陣列(簡易版)
- 2-6b 陣列
- 2-7 函數
- 2-8 常見程式範例
2-1 資料型態
print語法是在print函式中放進你要印的東西,比如 print(我要印這個)。說聲 Hello World,跟程式的世界打聲招呼吧!
第一個跟世界打招呼的程式!
print的內容可以是變數(variable): print(a),數字(init): print(1234),或是字串(string): print(‘abc123’)
變數
- 容器,可以存放資料
- 變數名稱有區分大小寫!
- 命名原則:第一個字元必須是英文字,其餘可用英文、數字及底線符號
- 不能單獨使用保留字當成變數名稱,包括:
-
and as assert break class continue def del elif else except exec finally for from global
if import in is lambda not or pass print raise return try while with yield
基本資料型態
變數在程式中,扮演中儲存資料的角色。將資料儲存下來,就可在需要的時候拿出來用。
在程式中,每個變數會有自己的型別。那型別是什麼呢? 簡單來說,型別決定了這個變數可用來儲存什麼樣格式的資料,並且定義了相對應的操作。
簡單舉例,Python中常見的基本型別有:int (整數)、float (浮點數)、str (字串)。
從上述你大概可以知道,如果要今天存放年齡,整數會是不錯的選擇。
身高 & 體重? 浮點數看來不錯。 名字? 字串是不二之選!
不過在Python中,宣告變數並不用事先給定型別,他會依照你給他的初始值來決定變數的型別。
資料型態的轉換
常用的轉換函數:
int(x) : 把x轉換為整數
float(x) : 把x轉換為浮點數
str(x) : 把x轉換為字串
-
int(x [,base]) Converts x to an integer. The base specifies the base if x is a string.
-
float(x) Converts x to a floating-point number.
-
complex(real [,imag]) Creates a complex number.
-
str(x) Converts object x to a string representation.
-
repr(x) Converts object x to an expression string.
-
eval(str) Evaluates a string and returns an object.
-
tuple(s) Converts s to a tuple.
-
list(s) Converts s to a list.
-
set(s) Converts s to a set.
-
dict(d) Creates a dictionary. d must be a sequence of (key,value) tuples.
-
frozenset(s) Converts s to a frozen set.
-
chr(x) Converts an integer to a character.
-
unichr(x) Converts an integer to a Unicode character.
-
ord(x) Converts a single character to its integer value.
-
hex(x) Converts an integer to a hexadecimal string.
-
oct(x) Converts an integer to an octal string.
練習題
a="123"
b=456
計算出 a+b = 579
a="123"
b=456
計算出 a+b = 123456
讓使用者輸入資料:「input」
語法:
字串變數 = input("提示文字")
例如: name = input("請輸入大名:")
會提示使用者輸入一串文字,並儲存到變數name裡面,型態為「字串」,如果要變成數字,可在input的外面加上 int或float函數。
例如:
a = int(input("請輸入一個正整數"))
練習:
讓使用者輸入一個數字,計算該數字的平方為多少。
2-2 運算子
數學運算子
運算子 → 功能
- x + y → X加Y
- x - y →X減Y
- x * y →X乘Y
- x / y →X 除以Y
- x // y →X除以Y,只取整數解
- x % y →求X除以Y的餘數
- x ** y →X的Y次方
比較運算子
- x < y → X是否小於Y
- x <= y →X是否小於等於Y
- x > y →X是否大於Y
- x >= y →X是否大於等於Y
- x == y →X是否等於Y
- x != y →X是否不等於Y
布林運算子
- a or b → A或B其中一個條件成立就回傳True
- a and b → A或B兩個條件都成立才回傳True
- not A →如果A為True,則回傳False,反之則回傳True
練習1: 請寫一個程式,輸入華氏溫度,輸出攝氏溫度
測試資料: 華氏=100 攝氏=37.77...
華氏=10 攝氏=-12.22...
練習2: 請寫一個程式,輸入攝氏溫度,輸出華氏溫度
測試資料: 攝氏=-12.22 華氏=10.00...
攝氏=37.77 華氏=99.99...
練習3: 畢氏定理→輸入直角三角形的兩股(a,b)長度,算出斜邊(c)的長度
練習4:輸入a,b,c三值,輸出一元二次方程式的兩個根 (提示: 3的平方寫法 3**2 )
測試資料: a=1 b=-3 c=2 x1=2.0 x2=1.0
a=4 b=-5 c=1 x1=1.0 x2=0.25
提示
攝氏 = (華式-32) * 5/9
2-3 選擇敘述
程式語言基本三大結構
-
循序結構
-
選擇結構
-
重複結構(迴圈)
選擇結構 條件判斷
語法一
if 條件判斷 :
條件成立要做的事情
※ if 裡面的程式敘述要縮排! 要縮排! 要縮排! (很重要)
範例:
輸入一個正整數,判斷該數是不是偶數?
a=int(input("輸入一個正整數:"))
if a%2 ==0 :
print("偶數")
語法二
if 條件判斷 :
條件成立要做的事情
else:
不成立時--要做的事情
練習1:
輸入一個正整數,判斷該數為奇數或偶數?
練習2:
輸入一個成績,60分以上顯示「及格」,否則顯示「不及格」
練習3:
三角形判斷 : 輸入三個邊長,程式自動判斷是否能構成三角形
提示 : 任意兩邊和大於第三邊,就可以構成三角形
語法三
if 條件判斷1 :條件1成立要做的事情
elif 條件判斷2 :
條件2成立要做的事情
elif 條件判斷3 :
條件3成立要做的事情
......
elif 條件判斷N :
條件N成立要做的事情
else :
完全不成立--要做的事情 (以上皆非)
作業:
作業1:百貨公司促銷
某百貨公司週年慶促銷,凡購買達3000元打95折、達5000元打9折、一萬元以上打85折。 請設計程式,輸入購買金額,輸出實際要付的費用。
測試資料:
金額=2000 ==>折扣後 2000
金額=4000 ==>折扣後 3800
金額=6000 ==>折扣後 5400
金額=20000 ==>折扣後17000
作業2: 電影分級
目前台灣的電影分級制為:
0+ 普遍級(簡稱「普」級):一般觀眾皆可觀賞。
6+ 保護級(簡稱「護」級):未滿六歲之兒童不宜觀賞,六歲以上未滿十二歲之兒童需父母、師長或成年親友陪伴輔導觀賞。
12+ 輔導十二歲級(簡稱「輔十二」級):未滿十二歲之兒童不宜觀賞。
15+ 輔導十五歲級(簡稱「輔十五」級):未滿十五歲之人不宜觀賞。
18+ 限制級(簡稱「限」級):未滿十八歲之人不宜觀賞。
==> 請設計一個程式,輸入年齡後,顯示可以看的電影級別
測試資料:
年齡: 5 --> 可看普遍級
年齡:10 --> 可看普遍級及保護級
年齡:13 --> 可看普遍級、保護級及輔12
年齡:16 --> 可看普遍級、保護級、輔12及輔15
年齡:20 --> 你已成年,可看各級電影
作業3: BMI計算及判斷
身體質量指數(BMI)的計算方式為: 體重(kg) 除以 身高(m)平方
BMI的標準為:
BMI<18.5 體重過輕
18.5≦BMI<24 標準體重
24≦BMI<27 過重
BMI≧27 肥胖
==> 請設計一個程式,輸入身高(cm)及體重(kg),顯示個人的BMI值 , 並判斷身體質量指數的標準
作業4:平年與閏年之判斷
閏年定義為:
若為4的倍數就是閏年,但若為100的倍數就不是閏年,但若為400的倍數又是閏年
(換句話說 : 若為400的倍數必為閏年,其餘100的倍數不是閏年,其餘4的倍數是閏年)
==> 請設計一個程式閏年進行判斷 : 輸入西元年,顯示該年為閏年或平年
測試資料:
2020 -->閏年
2019 -->平年
2000 -->閏年
1900 -->平年
2-4 迴圈 (1) - FOR 迴圈
程式語言基本三大結構
- 循序結構
- 選擇結構
- 重複結構(迴圈)
迴圈結構
電腦每秒鐘可執行幾億次的指令,擁有強大的計算能力,程式中迴圈結構可以重複執行某個程式區塊許多次,如此才能善用電腦的計算能力。迴圈結構利用指定迴圈變數的初始條件、迴圈變數的終止條件與迴圈變數的增減值來控制迴圈執行次數。許多問題的解決都涉及迴圈結構的使用,例如:加總、排序、找最大值…等,善用迴圈結構才能有效利用電腦的運算能力與簡化程式碼。
一、.FOR迴圈
for迴圈語法 1
for 變數名稱 in range(最大值):
# 迴圈內要做的事情 例如以下指令可以顯示變數內容
print( 變數名稱 )
for迴圈語法 2
for 變數名稱 in range ( 起始值 , 終止值的下一個數 , 遞增量 ):
# 迴圈內要做的事情 例如以下指令可以顯示變數內容
print( 變數名稱 )
起始值若未指定,就是0
遞增量若未指定,就是1
for 最後記得加上冒號!
自我練習:
range( 10 ) => 產生 0 1 2 ... 9
range( n ) => 產生 0 1 2 ... n-1
range(0, 10 ) => 產生 ?
range(3, 10 ) => 產生 ?
range(3, 10, 2 ) => 產生 ?
range(2, 10, 3 ) => 產生 ?
range(5, 1, -1 ) => 產生 ?
range(1, 3, -1 ) => 產生 ?
範例1 : 印出 1 ~ 9
for i in range(1,10):
for i in range(1,10):
print(i )
範例2: 印出 1 ~ 9 ,每個數字以逗號間隔 ?
for i in range(1,10):
print(i , end=',')
範例3:印出 1 ~ 9 ,每個數字以「定位點」間隔 ?
for i in range(1,10):
print(i , end='\t')
練習1:
計算 1+2+3+...+50 的總和 (1275)
練習2:
計算 5+10+15+...+50 的總和 (275)
練習3:
計算1到100間,所有數字的平方和 (338350)
練習4 :計算17到31間,所有數字的立方和 (227520)
練習5:輸入正整數 N,計算 1+2+3+...+N 的總和
練習6:計算 1 到100 之間奇數的總和 (2500)
練習7:
輸入正整數A跟B,找出在A到B之間,所有5的倍數的總和
測試結果:
A=10
B=450
5的倍數的總和=20470
練習8:輸入正整數A跟B,找出在A到B之間,所有13的倍數的立方和
測試結果:
A=20
B=100
13的倍數的立方和=1720251
練習9:計算 5! (也就是計算 1x2x3x4x5 = 120)
練習10:計算 10! (也就是計算 1x2x...x10 = 3628800)
練習11:在1到100之間,找到2的倍數,或者5的倍數,將這些數加總起來是多少 ? (3050)
練習12:在1到100之間,找到2或5的倍數,但不是10的倍數,將這些數加總起來是多少 ? (2500)
二維迴圈 (巢狀迴圈)
範例: 產生三三乘法表
for i in range(1,4):
for j in range(1,4):
print(i*j, end=',')
print()
輸出:
1,2,3,
2,4,6,
3,6,9,
練習1:九九乘法表
(每個數字之間以「定位點」隔開)
練習2:畫星星 - 1
提示:
練習3:畫星星 - 2
提示:
練習4:畫星星 - 3
2-5 迴圈 (2) : while迴圈
while迴圈
while迴圈結構與for迴圈結構十分類似,while迴圈結構常用於不固定次數的迴圈,由迴圈中測試條件成立與否,決定是否跳出迴圈,測試條件為真時繼續迴圈,當測試條件為假時結束迴圈。例如:猜數字遊戲,兩人(A與B)玩猜數字遊戲,一人(A)心中想一個數,另一人(B)去猜,A就B所猜數字回答「猜大一點」或「猜小一點」,直到B猜到A所想數字,這樣的猜測就屬於不固定次數的迴圈,適合使用while而不適合使用for。
while指令後面所接測試條件,若為真時會不斷做迴圈內動作,直到測試條件的結果為假時跳出while迴圈。語法為:
while 執行迴圈的條件 :
程式區塊
如果要把 for 迴圈用 while來改寫,則可以寫成:
迴圈變數=初始值
while 迴圈變數 <= 終止值:
要重覆的程式
迴圈變數=迴圈變數+遞增(減)值
範例:
i = 3
sum = 0
while i < 13:
sum = sum + i
i = i + 3
print(sum)
while迴圈內迴圈變數由起始值變化到終止值,每重複執行一次迴圈變數就會遞增(減)值,重複執行迴圈內程式,直到超過終止值後停止執行。
補充:
Q1.如果執行到一半,沒有滿足條件時,該怎麼跳出while迴圈?
Ans:在中間插入 break 敘述
請測試以下結果:
i = 1
while i < 6:
print(i)
if i == 3:
break
i += 1
2.如果迴圈中想跳過某個數字,該怎麼做?
Ans:在中間插入 continue 敘述
i = 0
while i < 6:
i += 1
if i == 3:
continue
print(i)
3.萬一迴圈寫錯了,陷入無窮迴圈怎麼辦?
Ans: 按下鍵盤的 [Ctrl] + [C] 就可以中斷程式
作業
練習1: 將前面的 for 迴圈之九九乘法表,用 while迴圈來改寫
練習2:階乘計算:
輸入正整數M,計算N為多少時,其階乘值(N!)會大於等於M。
(N階乘表示為N!,其值為「1*2*3*…*(n-1)*n」,使用while迴圈計算,N!超過M的最小N值為何?)
測試值:
M=1000輸出:
7 階乘為 5040 大於 1000
練習3:猜數字遊戲
先內定一個數字(1~99),讓使用者來猜,每猜一次就會顯示「太大了」、「太小了」與「猜中了!」,當猜中數字後遊戲就結束,並顯示使用者一共猜了幾次,再根據猜的次數給予評分(例如「太厲害了」、「不錯喔」、「再加油」…)。
※進階版:將答案改為隨機產生
練習4:猜拳遊戲
由使用者跟電腦進行猜拳(1:剪刀、2:石頭、3:布),每猜一次電腦會亂數出拳,再判斷輸贏或平手,並紀錄下勝負場次。
當使用者輸入 0 表示不玩了,此時會顯示剛才的勝敗場次及勝率。
亂數函數 random()
使用方式:
在程式最前面加入 import random
random.randint(1,99) #可以產生一個1~99之間的正整數
2-6a 陣列(簡易版)
為什麼要用「陣列」(array)?
當我們要儲存的資料數量一多,光用單一「變數」會變得難以處理,例如要計算五筆成績的平均,可能需要這樣寫:
score1 = 75
score2 = 90
score3 = 63
score4 = 55
score5 = 88
sum = score1+score2+score3+score4+score5
print("平均分數為", sum / 5 )
如果成績更多筆,程式會變得更不好寫,因此我們需要一個可以儲存多個資料的「變數」,就好像置物櫃一樣,只要給它一個編號(索引值),到時候要放入物品(存入資料)或取出物品(讀取資料)只要給它編號就可以了。
前面那個例子使用了陣列之後,會變成以下程式:
score = [75, 90, 63, 55, 88]
sum = 0
for i in range(5):
sum += score[i]
print("平均分數為", sum/5)
程式將會更有效率而且簡化許多。
陣列的用法
要宣告(declare)陣列(在Python中我們目前用的是「串列」)的語法為:
陣列名稱 = [元素1, 元素2, 元素3, .....]
要取出陣列(串列)裡面的資料,語法為:
陣列名稱[索引值]
要注意的是,索引值是從 0 開始編號的,不是從1開始,所以上面的例子如果改寫成:
score = [75, 90, 63, 55, 88]
print (score[1])
得到的結果將是 90。
作業 1 :請自己設定10個同學的成績,算出總分及平均。
作業 2 :承上題,請在迴圈中使用if,找出該10名同學中最高分為幾分。
二維陣列
當資料的維度一多了之後,一維陣列已經無法儲存,例如每個同學都有數筆月考成績,要分別計算每個同學的平均分數,此時光用一維陣列已經不夠,因此我們可能會需要二維以上的陣列。
例如五個同學各有三筆成績,可以這樣寫:
score = [
[85, 67, 90],
[75, 90, 63],
[71, 55, 81],
[65, 91, 70],
[45, 80, 53]
]
每個同學先以一個陣列儲存(如 [85, 67, 90]),再將多個陣列以逗點隔開後,最外面在包上一組中括號,就變成了二維陣列。同樣的方式依此類推,可以變成三維、四維…陣列。
以上面的程式為例,如果要取出第三位同學的第二個成績,要怎麼寫呢?
答案是 score[2][1],你看出來了嗎?
要存入資料或取出資料的語法為:
陣列名稱[索引值1][索引值2]
索引值一樣都是從0開始。
如果要分別計算這5位同學的平均,可以這樣寫:
for i in range(5):
sum=0
for j in range(3):
sum += score[i][j]
print(i+1,"號同學的平均分數為", sum/3)
作業 3 : 請設計一個程式,以二維陣列來儲存5位同學、四科成績,並算出這5位同學的總分及平均。
作業 4 : 承上題,請找出最高分、最低分第一名的同學總分是幾分?
作業 5 : 承上題,請列出第一名的同學總分是幾分?
2-6b 陣列
面對資料量的增加,我們不太可能只用一個變數來儲存一筆資料,例如全班36個人,每人有10個成績,不可能利用360個變數名稱(例如a1_1、a1_2...... a36_9、a36_10)來儲存,這個時候我們需要更有效率的儲存方式,那就是陣列(Array)。陣列就像是置物櫃一樣,只要賦予它一個名稱跟編號(索引值),我們就可以將資料依照位置儲存進去,並且可以隨時取用、更新、刪除,再搭配迴圈的使用,便可快速替我們計算或處理大量的資料,非常方便。
Python裡面的「陣列」(Array)一共有四種類型:
-
串列(List)
串列(或稱「列表」)可以說是 Python 中最基礎的一種資料結構。所謂列表指的就是一群按照順序排序的元素(類似於其他程式語言的 array,但多一些額外功能)。 → 可排序、可修改、可重複、有索引
-
元組(Tuple)
Tuple 類似於 List 的兄弟,但是元素無法修改。 → 可排序、不可修改、可重複、有索引
-
字典(Dictionary)
字典類似 map,包含鍵值與對應的值,可以快速取出對應值。 → 不可排序、可修改、不可重複、有索引
-
集合(Set)
集合類似數學中的集合,裡面包含不重複的元素值。 → 不可排序、無索引、不可重複
表示方法:
- List:
a= ['張三', '李四' , 123]
- Tuple:
b = ('張三', '李四', 123)
- Dictionary :
c= {1:'一月', 2:'二月', 3:'三月'}
- Set:
d = {'張三', '李四', 123, 123}
串列(List)的基本用法
串列是Python中最基本的資料結構。串列中的每個元素都可儲存一筆資料
串列的第一個索引是0,第二個索引是1,依此類推。
串表是最常用的Python資料類型,使用「中括號」括起來,裡面有逗號隔開,串列的資料不需要具有相同的類型。
1.串列的建立
要建立一個串列,只要把逗號分隔的不同的資料項使用方括號括起來即可。如下所示:
list1 = [10, 20, 30, 40, 50 ]
list2 = ["a", "b", "c", "d"]
list3 = ['張三', '台中市西屯區寧夏路240號', "0912-000111", "2005/4/20", 170 , 65.3]
print(list1)
print(list2)
print(list3)
2.串列資料的取用
要存取串列中的值,只要在串列名稱之後加上「中括號」及索引值(記住第一個索引值是0)即可。
例如:
list1 = [10, 20, 30, 40, 50 ]
list2 = ["a", "b", "c", "d", "e", "f"]
print (list1[0])
print (list2[2:5])
3.串列資料的更新
要更新串列中的某個值,可以這樣寫:
list = [70, 60, 80, 90, 100 ]
print ("第4個元素為 : ", list[3])
list[3] = 95
print ("更新後的第4個元素為 : ", list[3])
輸出:
第4個元素為 : 90
更新後的第4個元素為 : 95
4.刪除串列的值
要刪除串列中的某的值:
list = [70, 60, 80, 90, 100 ]
print ("原始列表 : ", list)
del list[2]
print ("刪除第三個元素 : ", list)
輸出:
原始列表 : [70, 60, 80, 90, 100]
刪除第三個元素 : [70, 60, 90, 100]
5.增加串列的資料
用法:
串列名稱.append(資料)
例如:
fruit = [] #建立一個空串列
fruit.append("apple")
print(fruit)
串列與迴圈的整合
1.使用for迴圈(含索引值)
假設現在有五個成績,要列出這五個成績,我們可以這樣寫:
score = [70, 60, 80, 90, 100 ]
for i in range(5):
print(score[i])
如果不知道這個串列一共有幾個元素怎麼辦? 沒關係,我們可以使用 「len()」(length)這個函數。以上一題為例,有一個名為score的串列,只要用len(score)就可以知道裡面有幾個元素。
score = [70, 60, 80, 90, 100 ]
print(len(score))
結果為5。
所以上一個範例可以改寫成:
score = [70, 60, 80, 90, 100 ]
for i in range(len(score)):
print(score[i])
2.使用for迴圈(不含索引值)
其實for迴圈可以不必搭配 range(),直接這樣寫:
score = [70, 60, 80, 90, 100 ]
for i in score:
print(i)
如此一來 i 就會從串列第一個元素開始,每執行一圈就會取得一筆新的元素,直到串列結束為止。
這種用法雖然方便,但是無法指定要取得串列中的第幾個元素,所以各有利弊。
練習1:計算成績平均:
讓使用者依照座號輸入5筆成績並儲存到列表(List),計算出平均
版本1:不用list
sum=0
for i in range(___ , ___):
score = int(input("請輸入第" + str(i) + "筆成績:"))
sum = ______
print (______)
版本2:使用list
sum=0
score=[]
for i in range(1, 6):
s = int(input("請輸入第" + str(i) + "筆成績:"))
score.append(____)
for i in range(____):
sum += _________
print (sum/5)
二維陣列
前面介紹的是一維陣列,如果資料量一多的話,就變得不夠用了,例如每個同學都有10個成績,我們不可能用36個陣列來儲存。
因此我們需要使用到二維以上的陣列(串列),假設有三個同學,每個人有五個成績,可以這樣寫:
score = [
[70, 60, 80, 90, 100 ],
[91, 85, 73, 100, 63 ],
[66, 91, 55, 81, 75 ]
]
每個人的成績都用一組中括號括起來,然後這三組中括號再用逗點隔開,最後外面再用一組中括號包起來。當然你也可以選擇不要換行,全部15個數字寫成同一列也是可以的,但是會變得不易閱讀。
如果我們想取得第二個同學的第四個成績(100)要怎麼寫呢? 是不是 score[2][4]呢? 不是,答案是 score[1][3],可以自己試試看!
接著問題來了,一維陣列用一個for迴圈可以解決,那麼二維陣列呢? 很簡單,就用二維迴圈來解決!所以如果我想計算出這三個同學的總分各是幾分,可以這樣寫:
for i in range(3):
sum=0
for j in range(5):
sum+=score[i][j]
print(sum)
第一個中括號內的數字代表資料在第幾列(Y座標),第二個數字代表這一列的第幾個數字(X座標),如此一來就可以輕鬆計算出每個人的總分了,是不是很方便呢? 同樣的道理,我們可以把陣列擴充為三維、四維,甚至更高維度,不過要看程式的需求,否則維度太高將難以撰寫。
串列的常用函數
- append:在最後面附加一個元素
- clear:清空串列裡面的所有元素
- copy:複製一個串列,例如 list2 = list1.copy
- count:傳回某個數在串列中出現的次數,如list.count(60)
- index:傳回某個數在串列中第一次出現的索引值,如list.index(60)
- insert:在串列指定位置插入元素
- remove:移除第一個找到的元素,例如list.remove("a")
- reverse:反轉串列,如 list.reverse()
- sort:排序串列,如list.sort(), list.sort(reverse=True)
- max:找出串列裡面的最大值,如 print(max(score))
- min:找出串列裡面的最小值,如 print(min(score))
2-7 函數
函數(函式,function)是邏輯結構化和過程化的一種編程方法
如何自定函數 ?
def 函數名稱 (參數1, 參數2, ....) :
函數的詳細內容
:
return 傳回值
如何呼叫自定函數 ?
函數名稱(參數1, 參數2, ....)
傳回值 = 函數名稱(參數1, 參數2, ....)
範例1:輸入3小時25分,顯示等於多少秒數
def myfunc (h, m):
value = (h * 60 + m) * 60
return value
sec = myfunc(3, 25)
print (sec)
輸出結果為 12300
範例2:輸入圓的半徑,計算圓面積
def area(radius):
result = radius * radius * 3.14
return result
print(area(10))
輸出結果為 314.0
練習1:輸入兩個整數(例如首項=5、末項=10),計算兩數字之間(包含兩數字)所有整數總和 (參考答案 = 45 )
練習2: 輸入兩個整數(例如首項=5、末項=10),計算兩數字之間(包含兩數字)所有整數平方和 (參考答案=355)
練習3: 輸入兩個整數(首項=5、末項=10),計算兩數字之間(包含兩數字)所有奇數總和 (參考答案=21)
函數的三大好處
- 代碼重複使用
- 保持一致性
- 可擴展性
可參考: https://ithelp.ithome.com.tw/articles/10187997
Python的內建函數
len() :回傳資料的長度或資料包含的元素數量
>>> len("This is a book.")
15
>>> a = ['a', 'b', 123]
>>> len(a)
3
max()、min():回傳最大值、最小值
>>> max (100, 500, 50)
500
>>> min (100, 500, 50)
50
>>>
sorted():排序
排序規則:數字 < 大寫英文字母 < 小寫英文字母 < 中文
a=[3, 4, 1, 2, 5]
print(sorted(a))
如果是字串中的資料,也可以用「split」切開變成list,再去排序:
a="3 4 1 2 5 0"
b=a.split()
print(sorted(b))
type():顯示變數的資料型態
x = 123
y = 12.3
z = '123'
a = ['張三', '李四' , 123]
b = ('張三', '李四', 123)
c = {1:'一月', 2:'二月', 3:'三月'}
d = {'張三', '李四', 123, 123}
print (type(x))
print (type(y))
print (type(z))
print (type(a))
print (type(b))
print (type(c))
print (type(d))
輸出結果:
<class 'int'>
<class 'float'>
<class 'str'>
<class 'list'>
<class 'tuple'>
<class 'dict'>
<class 'set'>
2-8 常見程式範例
氣泡排序法(Bubble Sort Algorithm)
array=[5,3,4,6,9,1,7,2,0,8]
def BubbleSort(data):
n = len(data)
for i in range(n - 1):
for j in range(n - 1 - i):
if data[j] > data[j+1]:
temp = data[j]
data[j] = data[j+1]
data[j+1] = temp
return data
print(BubbleSort(array))
找出質數
lower = 100
upper = 200
for num in range(lower, upper+1):
if num > 1:
for i in range(2, num):
if num % i == 0:
break
else: #for 搭配else 會在跑完迴圈最後一圈之後執行else裡面的程式
print(num)
最小公倍數
(Least Common Mutiple, LCM)
def LCM(num1, num2):
if num1 > num2: #找出兩個數之中較大者
greater = num1
else:
greater = num2
while True:
if (greater % num1 == 0 ) and (greater % num2 == 0): #都能被兩個數整除
break
greater += 1
return greater
n1 = int(input("請輸入第一個數字:"))
n2 = int(input("請輸入第二個數字:"))
print("最小公倍數 = " , LCM(n1, n2))
最大公因數
(Greatest Common Divisor,GCD) 或 (Highest Common Factor, HCF)
def GCD(num1, num2):
if num1 > num2 :
smaller = num2
else:
smaller = num1
for i in range(1, smaller + 1):
if (num1 % i == 0) and (num2 % i == 0): #i都能被兩個數整除
factor = i
return factor
n1 = int(input("請輸入第一個數字:"))
n2 = int(input("請輸入第二個數字:"))
print("最大公因數 = ", GCD(n1, n2))
數字反向
n = int(input("請輸入一個數字:"))
def rev_num(num):
rev = 0
while num > 0:
reminder = num % 10
rev = (rev * 10) + reminder
num = num // 10
return rev
print("數字反向後=", rev_num(n)))
字串反向
s = input("請輸入字串:")
def rev_str(string):
x = ""
for i in string:
x = i + x
return x
print(rev_str(s))