第二章
一般宣告
a = 5 #宣告變數a並指派資料「5」
a = 8 #指派資料「8」給相同的變數名稱
print(a) #呼叫a
計算 BMI 值:
height = 160 / 100 #身高,將公分轉換成公尺
weight = 50 #體重
BMI = weight / (height ** 2 ) #計算BMI值
print (BMI) #在螢幕上輸出BMI變數的值
換行效果
str3 = “你好\n我是柯小綸” #因使用「\n」而自動換行
print(str3)
你好
我是柯小綸
字串
str1 = "Hello"
str2 = str1+" World"
print(str2)
Hello World
刪除字串
My_str="ABBABBAAB"
print(My_str.replace(“A”,“”)) #刪除A
print(My_str.replace(“AB”,“ ”)) #相連的"AB"的字串才會被替換
BBBBB
B BA
布林值
a = 5 #變數a為5
b = 3 #變數b為3
print(a < b) #判斷變數a是否小於變數b
False
使用轉換函式
a = 12 + int(“30”) #將字串轉換成整數
print(a)
42
輸入與輸出-input() 輸入
a = int(input("請輸入數字:")) # 將輸入的數字字串轉換為整數
print(a)
輸入與輸出-print() 輸出
name1 = "Jack"
name2 = "Mary"
print("Hello my name is", name1, "!")
print("Hello my name is", name2, "!")
預設參數
name1 = "Jack"
name2 = "Mary"
print(name1, name2, sep=" ")
print() # 輸出空行,因為預設 end="\n"
print(name1, end="★")
print(name2, end="★")
Jack Mary
Jack★Mary★
格式化字元
print("進度%d%%完成" % (100))
進度100%完成
控制浮點數的小數位數
a = 1.23456 #原本的小數位數為5
print("%.1f, %.2f, %.3f" % (a, a, a))
1.2, 1.23, 1.235
控制資料的欄寬
print("%3d" % (1))
print("%3d" % (12))
print("%3d" % (123))
1
12
123
字串 .format() 方法
n1, n2 = 100, 120
print("今天的零用錢有{}元,明天的零用錢有{}元" .format(n1, n2))
今天的零用錢有100元,明天的零用錢有120元
控制資料的對齊方式
print(“{:>5}”.format(“★”)) #靠右
print(“{:^5}”.format(“★”)) #置中
print(“{:<5}”.format(“★”)) #靠左
驗收成果 1- 格式印出
print("|"+format(3.1415,"<10.4f")+"|") #靠左印出
print("|"+format("python","^10s")+"|") #置中印出
print("|"+format("azure",">10s")+"|") #靠右印出
算術運算子
a = 10
a += 1 #a = a + 1,a = 11
a -= 2 #a = a - 2,a = 9
a *= 2 #a = a * 2,a = 18
a /= 3 #a = a / 3,a = 6.0
a %= 4 #a = a % 4,a = 2.0
a **= 3 #a = a ** 3,a = 8.0
print(a)
運算子優先級
print( 8 + 4 * 6 - 23)
print( 5 * 6 ** 2)
print(30 / 5 * 2)
第三章
串列
My_list1 = list() #返回一個空串列
print(My_list1)
取得串列中的元素
My_list = [0, 1, 2, 3, 4, 5, 6]
print(My_list[2]) #第三個元素
print(My_list[-2]) #倒數第二個元素
2
5
添加元素進串列
My_list = [0, 1, 2, 3]
My_list .append(4)
print(My_list)
[0, 1, 2, 3, 4]
修改串列中的元素
My_list = [0, 1, 2, 3]
My_list .insert(0, "A") #將元素A插在第一個位置
print(My_list)
刪除串列中的元素
My_list = [0, 1, 2, 3] #宣告一串列
My_list .clear() #清空元素變成空字串
print(My_list)
取得元素個數
My_list = ["A", "B", "C", "D", "E"]
print(len(My_list))
檢查是否具有某個元素
My_list = ["A", "B", "C", "D", "E"]
print(“A” in My_list) #判斷串列是否有A元素
print("F" in My_list) #判斷串列是否有F元素
print(“F” not in My_list) #判斷串列是否不含有F元素
True
Falue
True
取得最大值與最小值
My_list1 = [12, 85, 49, 63, 8, 52, 101]
My_list2 = ["A", "Y", "P", "Z", "a", "z"]
print(max(My_list1))
print(min(My_list1))
print(max(My_list2))
print(min(My_list12)
#ASCII碼a的值為97,A的值為65
101
8
z
A
排序元素
My_list = [40, 20, 100, 0, 80]
My_list = sorted(My_list)
print(My_list) #預設值為升序排列
My_list = sorted(My_list, reverse=True) #改成True為遞減排列
print(My_list)
[0, 20, 40, 80, 100]
[100, 80, 40, 20, 0]
建立字典
My_dict1 = {} #建立空字典
My_dict2 = {"a":57, "b":26, "c":38}
My_dict3 = {1:"one", 2:"two", 3:"three"}
My_dict1 = dict()#返回一個空字典
print(My_dict)
取得字典中的元素
My_dict1 = {"a":57,"b":26, "c":38}
My_dict2 = {1:"one", 2:"two", 3:"three"}
print(My_dict1 ["a"] )
print(My_dict2[2] )
添加元素進字典
My_dict = {"a":1, "b":2, "c":3}
My_dict["d"] = 3#新增一對未在字典中的鍵值
print(My_dict)
{ 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 3}
刪除字典中的元素
My_dict = {"A":1,"B":2, "C":3, "D":4}
print(My_dict.pop("A")) #刪除“A”鍵並回傳其值
1
建立元組
My_tuple1 = tuple() #返回一個空元組
print(My_tuple1)
My_tuple2 = tuple("1234") #將字串轉換成元組
print(My_tuple2)
My_tuple3 = tuple([12,15,16,21]) #將字串轉換成元組
print(My_tuple3)
()
('1', '2', '3', '4')
(12, 15, 16, 21)
取得元組中的元素
My_tuple =("tiramisu","waffle","sorbet","marshmallow","macaron")
print(My_tuple) #取出全部的元素
print(My_tuple[2]) #取出第三個元素
print(My_tuple[-2]) #取出倒數第二個元素
('tiramisu', 'waffle', 'sorbet', 'marshmallow', 'macaron')
sorbet
marshmallow
建立集合
My_set1 = {1, 2, 2, 3, 3, 4}
print(My_set1)
My_set2 = {"a", "b", "c", "d"}
print(My_set2)
{1, 2, 3, 4} #重複的值會被刪除
{'b', 'd', 'c', 'a'}
添加元素至集合
My_set = set()
My_set.add(33)
My_set.add("abc")
print(My_set)
{'abc', 33}
刪除集合中的元素
My_set = {1, 2, 3, 4, 5}
print(My_set)
My_set.remove(1)
print(My_set)
超集合
a = {"a","b","c"}
b = {"a","b"}
c = {"a","b","d"}
print(a.issuperset(b)) #a具有b的所有元素
print(a >= b)
print(a >= c) #a不具有c的所有元素
True
True
False
集合運算
a ={"Adam","Dwan","Jack","Jenny","Loli","Mary","Tommy"}
b ={"Adam","Cherry","David","Iris","Jack","Jenny","Mary"}
print(a.union(b))
print(a | b)
{'Loli', 'Jack', 'Mary', 'Cherry', 'Adam', 'Iris', 'David', 'Jenny',
'Dwan', 'Tommy'}
{'Loli', 'Jack', 'Mary', 'Cherry', 'Adam', 'Iris', 'David', 'Jenny',
'Dwan', 'Tommy'}
集合運算
交集
a ={"Adam","Dwan","Jack","Jenny","Loli","Mary","Tommy"}
b ={"Adam","Cherry","David","Iris","Jack","Jenny","Mary"}
print(a.intersection(b))
print(a & b)
{'Mary', 'Adam', 'Jenny', 'Jack'}
{'Mary', 'Adam', 'Jenny', 'Jack'}
差集
a ={"Adam","Dwan","Jack","Jenny","Loli","Mary","Tommy"}
b ={"Adam","Cherry","David","Iris","Jack","Jenny","Mary"}
print(a. difference(b))
print(a - b)
{'Loli', 'Dwan', 'Tommy'}
{'Loli', 'Dwan', 'Tommy'}
對稱差集
a ={"Adam","Dwan","Jack","Jenny","Loli","Mary","Tommy"}
b ={"Adam","Cherry","David","Iris","Jack","Jenny","Mary"}
print(a.symmetric_difference(b))
print(a ^ b)
print((a - b) | (b - a) )
{'Loli', 'Cherry', 'Iris', 'David', 'Dwan', 'Tommy'}
{'Loli', 'Cherry', 'Iris', 'David', 'Dwan', 'Tommy'}
{'Loli', 'Iris', 'David', 'Cherry', 'Dwan', 'Tommy'}
切片、range
My_list = [0, 1, 2, 3, 4, 5, 6, 7] #這三個結果是一樣的
print(My_list[2:6])
print(My_list[-6:-2])
print(My_list[-6:6])
[2, 3, 4, 5]
[2, 3, 4, 5]
[2, 3, 4, 5]
第四章
if 條件判斷
降雨機率 = float(input("請輸入降雨機率(範圍為0~1):")) #輸入降雨機率(範圍為0~1):0.8
if 降雨機率 > 0.4 :#條件式的後方需要以冒號結尾
print(“記得帶傘”) #將屬於該條件區域的程式碼縮排
if⋯else⋯
age = int(input(“請輸入年齡: ”)) #輸入年齡為11歲
if age >= 18 :#條件式的後方需要以冒號結尾
print(“成年”) #將屬於該條件區域的程式碼縮排
else :#條件式的後方需要以冒號結尾
print(“未成年”)
請輸入年齡:11
未成年
if⋯elif⋯else
age = int(input("請輸入年齡: "))
if(a<12)or(a>=65):
print("半票")
elif 12 <= age < 19 :
print("學生票")
else :
print("全票")
請輸入年齡:66
半票
請輸入年齡:18
學生票
請輸入年齡:22
全票
條件判斷的強制轉型
if "abc":#當條件判斷為字串型態且不為空字串時,將會轉型為True
print("True")
else :
print("false")
if 111:#當條件為數值型態且大於0時,將會轉型為True
print("True")
else:
print("false")
if 0 : #當條件為數值型態且等於0時,將會轉型為False
print("True")
else :
print("false")
if [] : #當條件為容器型態且為空串列時,將會轉型為False
print("True")
else :
print("false")
if "" : #當條件為字串型態且為空字串時,將會轉型為False
print("True")
else :
print("false")
True
True
false
false
false
條件運算子
a = int(input("輸入a="))
a = a if a > 0 else None
print(a)
範例-一般條件式
a = int(input("輸入a="))
if a > 0 :
a = a
else :
a = None
print(a)
輸入a=-2
None
驗收成果 1- 判斷成績等第
score=eval (input(“輸入成績:”)) #取得輸入的內容,轉換資料型態後,指派給score變數
if score>100 or score<0 :
print(“輸入的成績有誤”) #判斷輸入的內容是否超出範圍,如果超出則輸出錯誤訊息
elif score>=90 :
print(“A”) #如果成績大於90分,則成績等級為A
elif score>=80 :
print(“B”) #如果成績介於80-89分,則成績等級為B
elif score>=70 :
print(“C”) #如果成績介於70-79分,則成績等級為C
elif score>=60 :
print(“D”) #如果成績介於60-69分,則成績等級為D
else:
print(“E”) #如果成績小於60分,則成績等級為E
判斷資料型態
c=eval(input("請輸入內容:")) #取得輸入的內容,並指派給變數c
if type(c) == int:
print(c, "是數值型態") #判斷輸入的資料型態是否為數值型態
elif type(c) == str:
print(c, "是字串型態") #判斷輸入的資料型態是否為字串型態
else:
print(c, "是容器型態") #輸入的資料型態既不是字串和數值時,則為容器型態
判斷閏年
year=eval(input("請輸入年份:")) #取得輸入的內容,並指派給變數year
if year % 400 == 0 or year % 100 ==0 or year % 4 == 0:
print("%d年是閏年" % year) #判斷輸入的年份同時為4、100和400的倍數,即為閏年
else:
print("%d年不是閏年" % year) #其餘年份皆為平年
三角形判斷
a,b,c = eval(input('請輸入三個數字(請以逗號隔開):’)) #取得使用者輸入的內容,並分別 指派給變數a,b,c
if a+b>c and b+c>a and c+a>b:
print("輸入的三個數字可以組成三角形") #使用「任兩邊的和必定大於第三邊」的原理來進行條件的判斷
else:
print("輸入的三個數字無法組成三角形") #如果其中一個條件不符合,則無法組成三角形
pass 與 continue
for i in range(10,20):
if i%2==0:
continue#當i是偶數時跳過這輪迴圈
print(i)
11
13
15
17
19
for⋯in⋯
字串
a = "abcdef"
for i in a:
print(i) #迴圈每次要執行內容
range 函式
for i in range(5):
print(i)
串列
My_list = ["python","js","SQL"]
for i in My_list:
print(i)
for⋯in⋯else⋯
for i in range(5):
print(i)
else:
print("結束")
break
score_list = [60,99,15,77,55,13,59,78]
a = int(input("請輸入要找的分數(0到100間):"))
for i in score_list :
if i == a :
print("有%d分" % a)
break
else :
print("沒有%d分" % a)
請輸入要找的分數(0到100間):60
有60分
巢狀迴圈
for i in range(5):
for j in range(i):
print("*",sep="",end="")
print()
九九乘法表
for i in range(1,10): #設計外層迴圈,並且從1開始執行9次
for j in range(1,10): #設計內層迴圈,並且從1開始執行9次
print(“%dx%d=%d” % (i,j,i*j), end=“\t”) #輸出變數I,j和i*j的內容,並以一個tab(跳脫字元為\t)作為結尾換行。
print() #在畫面上輸出空白字元控制畫面的排版
BMI 表
print("kg\cm|" ,end="") #輸出kg\cm排版文字
for i in range(150,191,5):#設計外層迴圈,並且從150開始間隔為5,執行8次
print("%4d " % i ,end="") #輸出身高的數值
print("\n-----+--------------------------------------------") #輸出排版的分隔線
for i in range(40,91,5):#設計外層迴圈,並且從40開始間隔為5
print("%5d|" %i ,end="") #輸出體重的數值
for j in range(150,191,5):#設計內層迴圈,並且從150開始間隔為5,作為身高
bmi=i/(j/100)**2#計算BMI的數值體重/身高(公尺)^2
print("%2.1f " % bmi ,end="") #在畫面上輸出BMI數值
print() #在畫面上輸出空白字元控制畫面的排版方式
數值排序
nums=[] #宣告儲存數字的串列變數nums
for i in range(5): #設計迴圈執行5次
num=eval(input("num %d:" % (i+1)))
nums.append(num) #取得使用者輸入的內容,並且儲存至串列num中
for i in range(5): #設計外層迴圈執行5次
for j in range(5): #設計內層迴圈執行5次
if nums[i]>nums[j]: #設定當串列中出現較大數字的條件式
temp=nums[i] #將較大與較小的數交換位置
nums[i]=nums[j]
nums[j]=temp
print("交換後:")
for i in range(5):
print(nums[i]) #設計迴圈來依序輸出串列中的內容至畫面
印出1-n中的完全平方數
n=eval(input("請輸入n:")) #取得輸入的數字,並指派給變數n
for i in range(1,n+1): #設定迴圈的執行次數為輸入數字的次數
if i**2 <= n: #將每個數字平方比較比較是否大於輸入的數字
print(i**2)) #輸出符合條件的完全平方數
階乘迴圈
n=eval(input("請輸入n:")) #取得輸入的內容,並指派給變數n
for i in range(1,n+1): #設定迴圈的執行次數為變數n次
factorial=1 #設定預設的階乘基數為1
for j in range(1,i+1): #設定第二層迴圈的執行次數,作為各階層需要計算的次數
factorial*=j #將階層基數乘上目前迴圈的執行次數
print("%d!=%d" % (i,factorial)) #輸出結果至畫面
偶數總和
n=eval(input("請輸入n:")) #取得輸入的內容,並指派給變數n
sum=0#設定加總的變數初始值為0
for i in range(1,n+1):#設定迴圈的執行次數為變數n次
if i%2==0:#設定條件式,當該數字可以能夠2整除,即為偶數
sum+=i #將符合條件的偶數與負責加總的變數sum相加
print("1-{}間,偶數總和為".format(n),(sum)) #輸出sum的內容至畫面
找出最大值
maxNum=0#宣告一個變數,用來儲存最大值
for i in range(5):#設定迴圈的執行次數為 5 次
n=eval(input("num %d:" %(i+1))) #取得使用者輸入的內容,並指派給變數 n
if n>maxNum:#設定當輸入的數值大於最大值時執行條件式
maxNum=n#將目前最大值的變數指派給使用者輸入的數值
print("最大值=%d" %maxNum) #輸出最大值的數字
while 條件式迴圈
i= 0
while i < 5 :#從0跑到4,因為5沒有小於5,所以跳出
print (i) #印出迴圈內容
i+=1#將i加1
while⋯else⋯
i=0
while i < 5:#從0跑到4,因為5沒有小於5,所以跳出
print(i)
i +=1
else:#跳出迴圈執行else
print("結束")
無窮迴圈
a,b = 3,3
while a == b: # a永遠等於b,並且沒有a不等於b的程式執行
print("a等於b")
搭配if條件式和break關鍵字避免無窮迴圈
while True:
a = input("輸入4結束迴圈:")
if a=="4":
break
print("輸入的是",a)
1-n 中的完全平方數
n=eval(input("請輸入n:")) #取得使用者輸入的內容,並指派給變數n
i=1#設定平方數的計算基數為1
while i**2<=n:#設定迴圈條件為i的平方小於輸入的內容時結束
print(i**2) #輸出完全平方數i
i+=1#在每次輸出數字時將平方數的計算基數加1
位數總和
n=eval(input("請輸入n:")) #取得使用者輸入的內容,並指派給變數n
sum=0#設定加總的預設值為0
while n>0:#設定迴圈的條件為,當變數n小於0時結束
sum+=n%10#將變數sum加上變數n除以10的餘數
n=int(n/10) #將變數n重新指派給除以10後的整數
print(sum) #輸出加總的數字
整數反轉
n=int(input("n:")) #取得使用者輸入的內容,並指派給變數n
ans=""#設定空字串來儲存文字
while n>0:#設定迴圈的條件為,當變數n小於0時結束
ans+=str(n%10) #將變數ans加上變數n除以10的餘數(字串型態)
n=int(n/10) #將變數n重新指派給除以10後的整數
print(ans) #輸出加總的文字
成績調整-迴圈
score=[10,20,30,40,50]
new_score=[]
for i in score:
new_score.append(int(i**0.5*10))
print(new_score)
成績調整-生成式
score=[10,20,30,40,50]
new_score=[int(i**0.5*10) for i in score]
print(new_score)
串列生成式
print([i for i in range(1,10) if i%2==0]) #使用巢狀,可以建立出全部的排列組合
print([a+b for a in "abc" for b in "123"])
[2, 4, 6, 8]
['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']
集合生成式
print({i for i in range(1,10) if i%2==0})
print({a+b for a in "abc" for b in "123"})
字典生成式
dt={1:24, 2:86, 3:44, 4:79, 5:100, 6:56, 7:97, 8:59, 9:88, 10:10}
print({k:v for k,v in dt.items() if v>59})
鍵值調換
My_dict = {1:"Mary",2:"Tom",3:"Jenny"}
print({v:k for k,v in My_dict.items()})
{'Mary': 1, 'Tom': 2, 'Jenny': 3}
成績統計
scoreList=[] #用來儲存全部成績
score=0#儲存成績
while True:#迴圈直到break
score=eval(input("成績:")) #讓使用者輸入成績
if score==-1:#如果成績等於 -1 則結束回圈
break#結束迴圈
scoreList.append(score) #將成績加入scoreList中
average=sum(scoreList)/len(scoreList) #計算平均
print(“平均=%s” % average) #印出平均
scoreList=sorted(scoreList)[::-1] #將scoreList由小到大排序並反轉
print(“由大到小排列:”)
for i in range(len(scoreList)):#遍歷scoreList
print(scoreList[i]) #將所有值一一印出
尋找眾數
nums={} #nums={}使用字典來存放數字
for i in range(10):#迴圈i跑10次
n=eval(input("number%2d:" % (i+1))) #輸入n
if n in nums:#若n有在nums裡面
nums[n]+=1#nums中key為n的值加一
else:#若n不在字典nums中
nums[n]=1#則將key為n的值設為1
print(nums) #印出字典
maxKey=0#最大值的key
maxVal=0#最大值的value
for i in nums:#i迴圈依序造訪nums中的值
if nums[i]>maxVal:#若nums[i]的值大於目前最大值的value
maxVal=nums[i] #將最大值的value設為nums[i]
maxKey=I#將最大值的key設為i
print("眾數為%d,出現%d次" % (maxKey,maxVal)) #印出結果
第五章
函式定義方式
def hello():# 宣告函式
print("easy coding") # 函式提供的功能,需縮排至定義的區塊內
hello()
easy coding
5-1(一) 函式定義方式
def hello():# 宣告函式
print("easy coding") # 函式提供的功能,需縮排至定義的區塊內
hello() # 呼叫以執行定義的函式
easy coding
5-1(一) 函式定義方式
def hello(a):
print(a)
hello(3)
5-1(二) 參數注入
def hello(a):
print(a)
hello(3)
hello()
Traceback (most recent call last):
File “”, line 11, in TypeError: hello() missing 1 required positional argument: 'a'
#錯誤:hello()函式少了1個參數
5-1(二) 參數注入
def hello(a,b):
print(a)
print(b)
hello(2,3) #這個時候a=2 , b=3
hello(3,2) #這個時候a=3 , b=2
2
3
3
2
5-1(二) 參數注入
def hello(a,b):
print(a)
print(b)
hello(b=3, a=2) # 直接指定特定變數給特定參數
5-1(三) 回傳值
def max(a, b):
if(a>b):
return a# 傳入的第一個參數比較大時回傳
else:
return b# 傳入的第二個參數比較大時回傳
print(222) # 由於程式碼已經回傳結果(return),因此不會被執行
a = max(3,58) # 宣告一個參數來取得函式回傳結果
print(a)
5-1(三) 回傳值
def hello():
print("easy coding")
a = hello()
print(a)
easy coding
None
5-2(一) 預設參數
def power(x, n=2):
return x ** n #次方的計算可以使用 Python提供的 ** 來方法來進行
print(power(2))
print(power(2, 3))
print(power(2, 4))
4
8
16
5-2(二) 可變長度參數
def show_type(*args):
for i in args:
# 使用 __name__ 來輸出資料型態
print(i, ":", type(i).__name__)
show_type(200, 3.5, "sss")
200 : int
3.5 : float
sss : str
5-2(二) 可變長度參數
def show(a, b):
print(a)
print(b)
a = [2, 3]
show(*a) # 加上星號時,會以 a[0] a[1] 的方式傳入函式
2
3
5-2(二) 可變長度參數
def avg(**kwargs):
result = 0
for i in kwargs:
result += kwargs[i]
print(i, ":", kwargs[i])
print("平均:", result/len(kwargs) ,"分")
print(type(kwargs))
avg(國文=90, 英文=80, 數學=70)
國文 : 90
英文 : 80
數學 : 70
平均: 80.0 分
<class 'dict'>
驗收成果 1- 質數表
def isPrime(n):# 宣告 isPrime 函式,回傳 n 是否為質數
for i in range(2,int(n**0.5)+1):# 給出要篩數值的範圍 n,找出以內的質數
if n%i==0:# n若能被 2 到根號 n 之間任一整數整除,
return False# 能被整除即為和數,
return True# 不能整除反之為質數。
prime=[] # 用來儲存質數
for i in range(2,30):#
if isPrime(i):# 判斷 i 是否為質數
prime.append(i) # 若 i 為質數,則將 i 加入prime中
print("i\j|" ,end="") # 用於排版
for i in prime:#
print("%3d " % i ,end="") #
print("\n---+----------------------------------------")
for i in prime:# i 依序造訪 prime 中所有值
print("%3d|" % i ,end="")
for j in prime:# j 依序造訪 prime 中所有值
print("%3d " % (i*j) ,end="") # 將 i 乘以 j 的值印出
print() # 換行
i\j| 2 3 5 7 11 13 17 19 23 29
---+----------------------------------------
2| 4 6 10 14 22 26 34 38 46 58
3| 6 9 15 21 33 39 51 57 69 87
5| 10 15 25 35 55 65 85 95 115 145
7| 14 21 35 49 77 91 119 133 161 203
11| 22 33 55 77 121 143 187 209 253 319
13| 26 39 65 91 143 169 221 247 299 377
17| 34 51 85 119 187 221 289 323 391 493
19| 38 57 95 133 209 247 323 361 437 551
23| 46 69 115 161 253 299 391 437 529 667
29| 58 87 145 203 319 377 493 551 667 841
驗收成果 2- 回傳面積的函式
def getArea(x,y=None,z=None):# 設定 getArea 函式,預設參數 y、z 為 None
area=0# 宣告 area 變數用來存放面積
if y!=None and z!=None:# 判斷是否有收到 y 及 z 參數
s=(x+y+z)/2# 利用海龍公式得到三角形面積
area=(s*(s-x)*(s-y)*(s-z))**0.5# 並將值傳給變數 area
return area# 回傳
elif y!=None:# 判斷是否收到 y 的參數
area=x*y# 計算三角形的面積
return area# 回傳
area=x**2*3.14# 計算圓面積並將值傳給變數area
return area# 回傳
x=eval(input(“x:”)) # 輸入變數 x
y=eval(input(“y:”)) # 輸入變數 y
z=eval(input(“z:”)) # 輸入變數 z
print('圓面積'+str(getArea(x))) # 傳入一個參數呼叫 getArea 函式並將其印出
print(‘矩形面積’+str(getArea(x,y))) # 傳入二個參數呼叫 getArea 函式並將其印出
print(‘三角形面積’+str(getArea(x,y,z))) # 傳入三個參數呼叫 getArea 函式並將其印出
5-3(一) 函式變數
def my_map(iter, func):
for i in iter:
func(i)
my_map([1,2,3],print)
1
2
3
5-3(一) 函式變數
from random import randint
def pack(func, *args):
return func(*args)
print(pack(randint, 0, 100))
72 #由於是隨機亂數的關係,因此每次結果皆為不同
5-3(二) 裝飾器
def int_required(func):
def result(n):
if isinstance(n, int):
return func(n)
return "請輸入整數"
return result
@int_required
def is_prime(n):
if n<2:
return False
for i in range(2,n):
if n % i == 0:
return False
return True
print(is_prime(2))
print(is_prime(3))
print(is_prime(4))
print(is_prime(2.3))
print(is_prime("2"))
True
True
False
請輸入整數
請輸入整數
驗收成果 1- 猜數字
from random import randint# 引入 randint 函式用來產生亂數
ans=randint(1,100) # 產生 1-100 的亂數
cnt=0# 用來計算使用者猜了幾次
n=0# 用來記錄使用者輸入的數字
while n!=ans:# 如果使用者輸入的答案不符就一直執行迴圈
n=eval(input(“猜數字n=”)) # 輸入使用者猜的數字
cnt+=1# 使用者猜後 cnt 增值 1
If n>ans:# 如果使用者猜的數字太大
print(“數字太大”) # 則提示使用者數字太大
elif n<ans:# 反之
print(“數字太小”) # 則提示使用者數字太小
# 若是猜對了則跳出迴圈
print(“BINGO!!一共猜了%d次” % cnt) # 提示使用者猜對了,並告訴使用者猜了幾次
猜數字 n=46
數字太小
猜數字 n=58
數字太小
猜數字 n=70
數字太大
猜數字 n=65
數字太小
猜數字 n=68
數字太大
猜數字 n=67
BINGO!!一共猜了6次
驗收成果 2- 大樂透
import random#引入 random 函式庫來產生隨機亂數
def random_create(x,y,z):#宣告一隨機產生數字的函式,可接收亂數範圍參
數 x,y 及亂數 個數 z
print(random.sample(range(x,y), z)) #使用迴圈控制來重複執行 6 次
random_create(1,49,6) #呼叫宣告的函式
輸出結果:
[34, 32, 31, 25, 10, 9]
5-4 匿名函式
a = [(2,5,9,8,7),(1,6,8),(6,3),(4,4,4,4)]
def sort_tuple_by_len(tup):
return len(tup)
a.sort(key=sort_tuple_by_len)
print(a)
[(6, 3), (1, 6, 8), (4, 4, 4, 4), (2, 5, 9, 8, 7)]
avg = lambda a,b: (a+b)/2
print(avg(2,3))
2.5
5-4 匿名函式
a = [(2,5,9,8,7),(1,6,8),(6,3),(4,4,4,4)]
a.sort(key=lambda tup:len(tup))
print(a)
[(6, 3), (1, 6, 8), (4, 4, 4, 4), (2, 5, 9, 8, 7)]
遞迴
def Fib(n):
if n == 0:
return 0
if n == 1:
return 1
return Fib(n-1) + Fib(n-2)
def power(x, a):
if a == 0:
return 1
return x**a
print(Fib(10))
ans = [str(power(2,i)) for i in range(11)]
print(‘,’ .join(ans))
55
1,2,4,8,16,32,64,128,256,512,1024
驗收成果 1- 階乘遞迴
def factorial(n):# 宣告 factorial 函式
if n==0:# 當 n 等於 0,即為 factorial(0)
return 1# 則回傳 1(True)
else:
return n*factorial(n-1) # 當 n 不等於 n 時,回傳 n * factorial(n-1)
n=eval(input("n=")) # 輸入 n
for i in range(1,n+1):# 迴圈控制 1 到 n+1 次
print("%d!=%d" % (i,factorial(i))) # 印出結果
def factorial(n):# 宣告 factorial 函式
if n==0:# 當 n 等於 0,即為 factorial(0)
return 1# 則回傳 1(True)
else:
return n*factorial(n-1) # 當 n 不等於 n 時,回傳 n * factorial(n-1)
n=eval(input("n=")) # 輸入 n
for i in range(1,n+1):# 迴圈控制 1 到 n+1 次
print("%d!=%d" % (i,factorial(i))) # 印出結果
輸入:
n=5
輸出結果:
1!=1
2!=2
3!=6
4!=24
5!=120