第二章 基礎課程

2-1 資料型態

PRINT:永遠是跟世界打聲招呼的第一個程式

print語法是在print函式中放進你要印的東西,比如 print(我要印這個)。說聲 Hello World,跟程式的世界打聲招呼吧!

 

第一個跟世界打招呼的程式!

print的內容可以是變數(variable): print(a),數字(init): print(1234),或是字串(string): print(‘abc123’)

變數

基本資料型態

變數在程式中,扮演中儲存資料的角色。將資料儲存下來,就可在需要的時候拿出來用。

在程式中,每個變數會有自己的型別。那型別是什麼呢? 簡單來說,型別決定了這個變數可用來儲存什麼樣格式的資料,並且定義了相對應的操作。

簡單舉例,Python中常見的基本型別有:int (整數)、float (浮點數)、str (字串)。

從上述你大概可以知道,如果要今天存放年齡,整數會是不錯的選擇。

身高 & 體重? 浮點數看來不錯。 名字? 字串是不二之選!

不過在Python中,宣告變數並不用事先給定型別,他會依照你給他的初始值來決定變數的型別

 

 

 

 

 

 





資料型態的轉換

 

常用的轉換函數:

int(x) :    把x轉換為整數
float(x) : 把x轉換為浮點數
str(x) :    把x轉換為字串

 

  1. int(x [,base]) Converts x to an integer. The base specifies the base if x is a string.

  2. float(x) Converts x to a floating-point number.

  3. complex(real [,imag]) Creates a complex number.

  4. str(x) Converts object x to a string representation.

  5. repr(x) Converts object x to an expression string.

  6. eval(str) Evaluates a string and returns an object.

  7. tuple(s) Converts s to a tuple.

  8. list(s) Converts s to a list.

  9. set(s) Converts s to a set.

  10. dict(d) Creates a dictionary. d must be a sequence of (key,value) tuples.

  11. frozenset(s) Converts s to a frozen set.

  12. chr(x) Converts an integer to a character.

  13. unichr(x) Converts an integer to a Unicode character.

  14. ord(x) Converts a single character to its integer value.

  15. hex(x) Converts an integer to a hexadecimal string.

  16. 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 運算子

 

數學運算子


運算子 → 功能

 

比較運算子

 

布林運算子

 

 

練習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中最基本的資料結構。串列中的每個元素都可儲存一筆資料

串列的第一個索引是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座標),如此一來就可以輕鬆計算出每個人的總分了,是不是很方便呢? 同樣的道理,我們可以把陣列擴充為三維、四維,甚至更高維度,不過要看程式的需求,否則維度太高將難以撰寫。

 

串列的常用函數

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))