# Leo's計算機期末考複習 ## 知識點 ---- ### 輸入語法 #### 文字轉數字串列 ```python= # 範例一 int 可以 換成 float arr = list(map(int,input().solit())) # 範例二 int 可以 換成 float 或是被去掉 arr = [int(i) for i in input().split()] ``` ### print 輸出 (採用f-string) 1. 基本輸出 ```python= print(f"{var:參數} ....")#型式 # 範例一 小數點顯示前後兩位 print(f"{var:2.2f}") print("%2.2f" %var) #用法相同 # 範例二 百分比顯示(註記:Python 可能會有誤差) var = 0.9 print(f"{var:.2%}") #print 90.00% print(f"{var:.0%}") #只顯示 小數點前面 # 範例三 字串顯示 串列 print(f"{string}") print(f"{list_x}") ``` 2.print 可帶參數sep(把串列用間隔字符連接起來) ,end (結尾加的參數) ```python= print(".....",end = "\n")#預設 end 結尾是換行 #串列 好用功能 sep() list_x = [1,2,3,4,5] # output = 1+2+3+4+5 print(list_x,sep = "+") #連接串列用 ``` ### 常用函數 ```python= # 串列處理 arr = [1,2,3,4,5] x = arr[:] #複製arr的串列內所有數值到x x = arr[1:2] # x = arr[::-1] #反向複製 arr內所有數值到x [5,4,....] ##################### arr.index(x) # 返回數值為x的索引值 arr.append(1) # 在串列最後面加入數值1 =>[1,2,3,4,5,1] arr.remove(1) #移除 最早出現為1的數值 =>[2,3,4,5,1] ##################### arr.sort() #降序排列 arr.reverse() #串列倒過來 與 arr[::-1] 相同 ###################### sum(list_x) # 陣列總和 max(list_x) # 數值最大 min(list_x) # 數值最小 abs(-1) # 返回絕對值 ``` ## 程式參考 ### 1207 作業四 #### Print #### 圓 --- 注意小數點.2f #### 分組問題 --- ```python= # 助教寫的會有小bug 當 number > 組數 才會成立 print('第 {} 組'.format((number-1)//g+1)) # if number % 組數 != 0: groupth = (number//組數)+1 else: groupth = number//組數 print(f"第{groupth}組") ``` ### 1214 作業五 #### Math --- ```python= # def f(x,y) : # return 2*x**3 + x*(y**2) + 2*x*y + 5*x # 上下等價 f = lambda x, y: 2*x**3 + x*(y**2) + 2*x*y + 5*x x = int(input("x : ")) y = int(input("y : ")) print(f"ans = {f(x,y)}") ``` #### 迴文 --- ```python= s = input("請輸入一段字串 : ").upper() print(f"{s == s[::-1]}") ``` #### Calculate Score --- *注意 輸入有可能是 float ```python= name, s1 ,s2,s3 = input("").split(" ") s1,s2,s3 = float(s1),float(s2),float(s3) print(f"{name} 的總分為 {s1+s2+s3:.2f},平均值 {s1+s2+s3/3:.2f}") # 輸出 print(f"{name} 是否及格: {s1+s2+s3 >= (60)*3}") ``` #### Max Value 給定一個數字陣列 nums(不需使用 input 自行輸入),請自行選擇該陣列的不同索引值 i 和 j,找到 i 跟 j 可以滿足下式得到最大值。 ```python= nums.sort() print(f"{(nums[-2] -1)*(nums[-1] -1)}") ``` #### 將數字變為 0 --- ```python= num = int(input("num = "))#轉成整數 time = 0 while num != 0 : if num % 2 == 0 :# even num = num // 2 else :# odd num -= 1 time += 1 #輸出 print(f"{time}") ``` ### 1221 作業六 #### 階乘 ```python= def factorial(n): if n == 1 or n == 0 : return 1 else : return n * factorial(n-1) ``` #### Sum of Array [1,2,3,4,5] => [1,3,6,10,15] ```python= nums = [1,2,3,4,5] runningSum = [0]*len(nums) #生成 num長度的串列 for i in range(len(nums)): runningSum[i] = sum(nums[0:i+1]) print(f"Running Sum = {runningSum}") ``` #### 斐波納器數列 ```python= def fib(nth): if nth == 0 or nth == 1 : return nth else: return fib(nth - 1) + fib(nth - 2) ``` #### Balanced string 輸入一段僅包含 A、B 的字串,切割此字串,判斷這個字串有幾個相等數量的 A、B 字串。 **其實用for迴圈做會比較快,遞迴有點浪費時間** ```python= def process(a, b, st, sum_of_parts): # if we can't pop it that means me have done all the things ,so we can return it . try: temp = st.pop(0) except: return sum_of_parts # count the number of A and B if temp == 'A': a += 1 else: b += 1 if a == b: sum_of_parts += 1 a = 0 b = 0 return process(a, b, st, sum_of_parts) s = list(input("input:"))#字串切成串列 print(f"output: {process(0, 0, s, 0)}") ``` ### 助教大補帖 --- #### 公英制轉換 ```python= cm = 172.72 inch = cm/2.54 print(f"{cm}公分 = {int(inch//12)}尺{int(inch%12)}吋") ``` #### 組合 ```python= def n_(n): if n == 1 : return 1 else : return n*n_(n-1) def C(n,k): return n_(n)//(n_(k)*n_(n-k)) ``` #### 有效括號 ```python= def Is_real(st, index, count): if index == len(st): # 表示算完 if count == 0: # 剛好 平衡 (())(()) return True else: # 有可能不平衡 (())(( return False else: # 判斷 if st[index] == "(": count += 1 else: count -= 1 # 如果 小於1 直接return False 代表先出現左括號 if count < 0: #))(( return False else: # return 很重要 少了 return 最後的數值傳不回去 return Is_real(st, index + 1, count) while 1: braket = input("請輸入括號:") if braket == 'q': exit() if Is_real(braket, 0, 0): print("True") else: print("False") ``` #### 重疊總面積 ```python= def fill(A,rec): Area = 0 for i in range(rec[0],rec[2]): # x範圍 for j in range(rec[1],rec[3]): # y範圍 if A[i][j]!= 1 :#沒被填過 A[i][j] = 1 Area += 1 return Area if __name__ == '__main__': n = int(input("n = ")) rec_n = [] for i in range(n): # append [1 1 2 2] as rec[0] and so on rec_n.append(list(map(int, input().split()))) # rec_n = [[1, 1, 10, 10], [5, 7, 25, 30],[10, 10, 40 ,35]] Space = [[0 for i in range(51)] for j in range(51)] Area = 0 for rec in rec_n: Area += fill(Space, rec) print(f"Area = {Area}") ``` #### 質數生成 ```python= # prime number def isPrime(n): if n % 2 == 0: return False # 3 以後的偶數都不是質數 else: for j in range(3,int(n**0.5)+1,2): # 判斷奇數就好 if n % j == 0:#到n-1 前只要有任何一個整除就不是質數 return False # 度過驗證 就是 質數 return True if __name__ == '__main__': n = int(input("n = ")) print("2、", end="") for i in range(3, n+1): if isPrime(i): print(f"{i}、", end="") ```