Python 階段綜合練習一
綜合之前的函數、數據結構、流程控制等,做以下實例練習:(建議先不要看代碼,自己先試着寫;代碼僅供參考,有多種實現方法)
1. 定義 is_Even 函數,傳一 int 參數,判斷是否是偶數,return True;不是,return False

1 '''is_Even''' 2 def is_Even(i): 3 if(i%2==0): 4 return True 5 else: 6 return False 7 print(is_Even(0),is_Even(1),is_Even(1))
2. 定義 is_Int 函數,傳一 float 參數,判斷是否是整數(如1.0 即整數),return True;不是,return False

1 '''is_Int''' 2 def is_Int(f): 3 if(f%1==0): 4 return True 5 else: 6 return False 7 print(is_Int(0),is_Int(1.0),is_Int(1.1))
3. 定義 digital_sum 函數,傳一 int 參數,return 其所有位數的數字相加的和;如:1234 返回 10(1+2+3+4); 900 返回 9 (9+0+0)

1 '''digital_sum''' 2 def digital_sum(i): 3 sum = 0 4 while(i/10>1): 5 sum += i%10 6 i = int(i/10) 7 sum += i 8 return sum 9 print(digital_sum(23423),digital_sum(900),digital_sum(0))

1 def digital_sum(i): 2 i = str(i) 3 sum = 0 4 for d in i: 5 sum += int(d) 6 return sum 7 print(digital_sum(23423),digital_sum(900),digital_sum(0))
4. 定義 factorial 函數,傳一 int 參數,return 其所有位數數字相乘的積;如:1234 返回 24 (1*2*3*4); 909 返回 0 (9*0*9)

1 '''factorial''' 2 def factorial(i): 3 result = 1 4 while(i/10>1): 5 result *= i%10 6 i = int(i/10) 7 result *= i 8 return result 9 print(factorial(1234),factorial(909),factorial(0))

1 '''factorial''' 2 def factorial(i): 3 i = str(i) 4 result = 1 5 for d in i: 6 result *= int(d) 7 return result 8 print(factorial(1234),factorial(909),factorial(0))
5. 定義 is_prime 函數,傳一 int 參數,判斷是否是質數(僅可被1或自己整除),若是,return True;不是,return False; 如:1 返回 True;2 返回 True;4 返回 False;13 返回 True
規定 0 不是質數,返回 False

1 '''is_prime''' 2 def is_prime(i): 3 result = True 4 for d in range(2,i): 5 if(i%d==0): 6 result = False 7 break 8 if(i==0): 9 result = False 10 return result 11 print(is_prime(1),is_prime(2),is_prime(3),is_prime(4),is_prime(13),is_prime(197),is_prime(201),is_prime(0))
6. 定義 reverse 函數,傳一 str 參數,將所有字符串字符倒置並 return 該字符串;如:"abcd" return "dcba"
備注:list.reverse() 及 list[::-1] 可表示 list 倒置

1 '''reverse''' 2 def reverse(s): 3 l = list(s) 4 new_l = [] 5 for i in range(len(l)-1,-1,-1): 6 new_l.append(l[i]) 7 return "".join(new_l) 8 print(reverse("ab cd"),reverse(""))

'''reverse''' def reverse(s): l = list(s) l.reverse() # l = l[::-1] return "".join(l) print(reverse("ab cd"),reverse(""))
7. 定義 anti_vowel 函數,傳一 str 參數,將字符串中所有的元音(a e i o u) 去除(注意大小寫),並return;
如:"Apple is red." return "ppl is rd."
備注:對於list,for item in list_name 即可遍歷list,可以不用下標的方式,參見下方的兩種方式(之后的例子也列出了兩種方式)

1 '''anti_vowel 1''' 2 def anti_vowel(s): 3 l = list(s) 4 new_l = [] 5 for i in range(len(l)): 6 if (l[i] not in {'a','e','i','o','u','A','E','I','O','U'}): 7 new_l.append(l[i]) 8 return "".join(new_l) 9 print(anti_vowel("Apple is red."))

1 '''anti_vowel 2''' 2 def anti_vowel(s): 3 l = list(s) 4 new_l = [] 5 for letter in l: 6 if (letter not in {'a','e','i','o','u','A','E','I','O','U'}): 7 new_l.append(letter) 8 return "".join(new_l) 9 print(anti_vowel("Apple is red."))
8. 定義 scrabble_score 函數,傳一 str 參數。預設一組詞典(見下方引用),根據詞典中字母對應的數值,將傳入參數的每個字母數值相加
(非字母不加,注意大小寫轉換);如:"Word !" 分別對應取 "w": 4 , "o": 1, "r": 1,"d": 2 , 相加為 4+1+1+2 = 8 return 該值
score = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2, "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3, "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1, "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4, "x": 8, "z": 10}

1 '''scrabble_score 1''' 2 def scrabble_score(s): 3 score = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2, "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3, "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1, "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4, "x": 8, "z": 10} 4 l = list(s) 5 sum = 0 6 for i in range(len(l)): 7 letter = l[i].lower() 8 if letter in score.keys(): 9 sum += score[letter] 10 return sum 11 print(scrabble_score("Word !"),scrabble_score("Hello World~!"))

1 '''scrabble_score 2''' 2 def scrabble_score(s): 3 score = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2, "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3, "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1, "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4, "x": 8, "z": 10} 4 l = list(s) 5 sum = 0 6 for letter in l: 7 letter = letter.lower() 8 if letter in score.keys(): 9 sum += score[letter] 10 return sum 11 print(scrabble_score("Word !"),scrabble_score("Hello World~!"))
9. 定義 censor 函數,傳兩個 str 參數:s, h;若 s 字符串中的單詞包含 h(全小寫)時(不區分大小寫,暫時僅考慮空格分隔的單詞),
將其隱藏,每個隱藏的字母顯示為 *;該方法為不完善的隱藏字符方法,如隱藏字符后有標點,則仍會顯示。(若需完善,可用正則表達式,后續學習)
如:censor("Fuck U fuck ... ","fuck") 會 return 字符串為 "**** U **** ... " ;
censor("My qq is: 1000100, pls add my QQ","qq") 會 return 字符串為 "My ** is: 1000100, pls add my **"
備注: str.split(" ") 可根據 " " 分隔字符串並返回為list; 字符串相乘,如 "*"*5 可輸出 "*****"

1 '''censor 1''' 2 def censor(s,h): 3 l = s.split(" ") 4 new_l = [] 5 for i in range(len(l)): 6 word_l = l[i].lower() 7 if word_l==h: 8 new_l.append("*"*len(h)) 9 else: 10 new_l.append(l[i]) 11 return " ".join(new_l) 12 print(censor("Fuck U fuck ... ","fuck")) 13 print(censor("My qq is: 1000100, pls add my QQ","qq"))

1 '''censor 2''' 2 def censor(s,h): 3 l = s.split(" ") 4 new_l = [] 5 for word in l: 6 if word.lower()==h: 7 new_l.append("*"*len(h)) 8 else: 9 new_l.append(word) 10 return " ".join(new_l) 11 print(censor("Fuck U fuck ... ","fuck")) 12 print(censor("My qq is: 1000100, pls add my QQ","qq"))
10. 定義 count_i 函數,傳兩個參數 l, item:l 為一 list,item 為任意類型元素;return l 中包含 i 的個數 ;
如: count_i([1,2,3,4,2,1,3,1.0,"1"],1) 會 return 3 (1.0 也可算入;"1" 不可算入)
count_i(["b","a","ab","a","","A"], "a") 會 return 2
count_i([["a"],"a"], ["a"]) 會 return 1; count_i([["a"],"a"], ["a "]) 會 return 0

1 '''count_item 1''' 2 def count_item(l,item): 3 count = 0 4 for i in range(len(l)): 5 if(l[i]==item): 6 count += 1 7 return count 8 print(count_item([1,2,3,4,2,1,3,1.0,"1"],1)) 9 print(count_item(["b","a","ab","a","","A"], "a")) 10 print(count_item([["a"],"a"], ["a"]),count_item([["a"],"a"], ["a "]))

1 '''count_item 2''' 2 def count_item(l,i): 3 count = 0 4 for item in l: 5 if(item==i): 6 count += 1 7 return count 8 print(count_item([1,2,3,4,2,1,3,1.0,"1"],1)) 9 print(count_item(["b","a","ab","a","","A"], "a")) 10 print(count_item([["a"],"a"], ["a"]),count_item([["a"],"a"], ["a "]))
11. 定義 purify 函數,傳一 list 參數;去除該 list 中所有的奇數(該list中全為int元素)
如: purify([3,1,5,2,6,1,4]) 會 return [2,6,4]

1 '''purify 1''' 2 def purify(l): 3 l_new = [] 4 for i in range(len(l)): 5 if(l[i]%2==0): 6 l_new.append(l[i]) 7 return l_new 8 print(purify([3,1,5,2,6,1,4]))

1 '''purify 2''' 2 def purify(l): 3 l_new = [] 4 for i in l: 5 if(i%2==0): 6 l_new.append(i) 7 return l_new 8 print(purify([3,1,5,2,6,1,4]))
12. 定義 multiple 函數,傳可變參數(該參數全為float),return 所有可變參數相乘的積,無參數則返回 None;
如:multiple(3,2) return 6;multiple(3.5,2) return 7.0;multiple(3.5,2,3) return 21.0;multiple(3,2,0,3,) return 0;
備注:函數調用可變個數的參數,在其參數名前加*,如*args,這些參數將被包裝進一個元組

1 '''multiple 1''' 2 def multiple(*f): 3 m = 1 4 if(len(f)==0): 5 return None 6 else: 7 for i in range(len(f)): 8 m *= f[i] 9 return m 10 print(multiple(2,3),multiple(3.5,2),multiple(3.5,2,3),multiple())

1 '''multiple 2''' 2 def multiple(*f): 3 m = 1 4 if(len(f)==0): 5 return None 6 else: 7 for i in f: 8 m *= i 9 return m 10 print(multiple(2,3),multiple(3.5,2),multiple(3.5,2,3),multiple())
13. 定義 remove_duplicate 函數,傳一參數 list,刪除 list 中重復的項;
如 remove_duplicate([1,2,3,1.0,1,"1"]) return [1,2,3,"1"]
備注:可用轉換為集合set 來去重,但無法保留 list 之前的順序

1 '''remove_duplicate 1''' 2 def remove_duplicate(l): 3 l_new = [] 4 for i in range(len(l)): 5 if l[i] not in l_new: 6 l_new.append(l[i]) 7 return l_new 8 print(remove_duplicate([1,2,3,1.0,1,"1"]))

1 '''remove_duplicate 2''' 2 def remove_duplicate(l): 3 l_new = [] 4 for i in l: 5 if i not in l_new: 6 l_new.append(i) 7 return l_new 8 print(remove_duplicate([1,2,3,1.0,1,"1"]))

1 '''remove_duplicate 3''' 2 def remove_duplicate(l): 3 return list(set(l)) 4 print(remove_duplicate([1,2,3,1.0,1,"1"]))
14. 定義 median 函數,傳一參數 list,該 list 中元素均為float或int數值;
若 list 長度為奇數,return 該list 最中間的數;若 list 長度為偶數,return 該 list 最中間兩個數的平均數;若 list 為空,return none
如 median([3,4,2]) return 3; median([7,2,3,4]) return 3.5 (3+4/2)
備注:須先對 list 排序,用 sorted(list_name)

1 '''median''' 2 def median(l): 3 l = sorted(l) 4 l_len = len(l) 5 if l_len == 0: 6 return None 7 elif l_len%2 == 1: 8 return l[int((l_len-1)/2)] 9 else: 10 return (l[int((l_len)/2)] + l[int((l_len)/2)-1])/2 11 print(median([]),median([3,4,2]),median([7,2,3,4]))