前往
大廳
主題

巨量人生

小魚Tuna | 2022-11-10 00:28:47 | 巴幣 0 | 人氣 119

第二章
一般宣告
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

創作回應

更多創作