3.3.5 案例精選


  1 編寫函數計算圓的面積。

 1 from math import pi as PI  2 
 3 def circle_area(r):  4     if isinstance(r,(int,float)):  5         return PI * r * r  6     else:  7         print('You must give an integer or float as radius.')  8 
 9 print('# 半徑為3的圓的面積:',circle_area(3))
10 # 半徑為3的圓的面積: 28.274333882308138

  

  2 編寫函數,接受任意多個實數,返回一個元組,其中第一個元素為所有參數的平均值,其他元素為所有參數中大於平均值的實數。

 1 #實現過程 1
 2 def get_num1(*a):  3 
 4     avg = sum(a)/len(a)  5 
 6     l = [avg]  7 
 8     for i in a:  9         if i > avg: 10  l.append(i) 11 
12     return tuple(l) 13 
14 #實現過程 2
15 def get_num2(*a): 16 
17     avg = sum(a)/len(a) 18 
19     t1 = (avg,) 20 
21     def is_bigger(n): 22         return n > avg 23 
24     t2 = tuple(filter(is_bigger,a)) 25 
26     return t1 + t2 27 
28 
29 
30 #實現過程 3
31 def get_num3(*para): 32     avg = sum(para)/len(para) 33     g = [i for i in para if i > avg]   #列表推導式
34     return (avg,) + tuple(g) 35 
36 print(get_num3(1,2,3,4,5,6,7,8,9)) 37 
38 #(5.0, 6, 7, 8, 9)

   

  3 編寫函數,接收字符串參數,返回一個元組,其中第一個元素為大寫字母的個數,第二個元素為小寫字母的個數。

 1 # 我的實現過程
 2 
 3 def get_num(s):  4 
 5     #先判斷傳入的參數是否為字符串,如果不是結束程序。
 6     if not isinstance(s,str):  7         return '在調用該函數時,請傳入字符串作為參數'
 8     else:  9         #定義一個變量表示大寫字母的個數
10         a = 0 11         #定義一個變量表示小寫字母的個數
12         b = 0 13 
14         #判斷如果s是空字符串,就沒有必要進行下去了,結束程序
15         if s is '': 16             return '空字符串就沒有必要繼續處理了,結束'
17         else: 18             #遍歷字符串,如果字符串的某個元素是小寫字母,就b加1,是大寫字母就 a加1
19             for i in s: 20                 if i.islower(): 21                     b += 1
22                 if i.isupper(): 23                     a += 1
24     return (a,b) 25 
26 print(get_num(''))     #空字符串就沒有必要繼續處理了,結束
27 print(get_num(123))    #在調用該函數時,請傳入字符串作為參數
28 print(get_num('123'))  #(0, 0)
29 print(get_num('hdwfegbngvjhdsafvdweBFEWIQAFBVDSAJFGQWEfkejdashgfFVBEQIRFAgfbewirfgvn BGEKFA'))   #(34, 41)
30 
31 
32 #作者的實現過程
33 def demo(s): 34     result = [0,0] 35     for ch in s: 36         if 'a' <= ch <= 'z': 37             result[1] += 1
38         elif 'A' <= ch <= 'Z': 39             result[0] += 1
40 
41     return tuple(result) 42 
43 print(demo('hdwfegbngvjhdsafvdweBFEWIQAFBVDSAJFGQWEfkejdashgfFVBEQIRFAgfbewirfgvn BGEKFA'))   #(34, 41)

 

  4  編寫函數,接收包含20個整數的列表lst和一個整數k作為參數,返回新列表。處理規則:將列表lst中下標k之前的元素逆序,下標k之后的元素逆序,然后將整個列表lst中所有元素逆序。

 1 def get_num(lst,k):  2 
 3     # 判斷lst是不是列表,是列表再進行接下來的操作
 4     if not isinstance(lst,list):  5         return '要求參數lst是列表類型的數據哦,程序結束'
 6     else:  7 
 8         # 判斷傳入的列表的元素個數是否為20個
 9         if not len(lst) == 20 : 10             return '您輸入列lst的元素個數不足20個,程序結束'
11         # 判斷傳入的參數k的值是否過大或過小,防止引起下標越界的報錯
12         if k > 18 or k < 0: 13             return '您輸入的參數k的值不在0-18的范圍內,會引起下標訪問越界'
14 
15     #根據傳入的參數k分隔lst
16     l1 = lst[:k] 17     l2 = lst[k:] 18 
19     l1.sort(reverse=True) 20     l2.sort(reverse=True) 21 
22     lr = l1  + l2 23 
24     return l1,l2,sorted(lr,reverse=True) 25 
26 
27 print(get_num([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],7)) 28 
29 
30 #作者的代碼
31 def demo(lst,k): 32     x = lst[:k] 33  x.reverse() 34     y = lst[k:] 35  y.reverse() 36     r = x + y 37     return list(reversed(r)) 38 
39 #作者的代碼好簡潔啊,但健壯性就查了點,很容易因為調用者傳入的參數不符合要求而出現異常

 

  5 編寫函數,接收整數參數t,返回斐波那契數列中大於t的第一個數。

 1 def get_num(t):  2 
 3     a = b =1
 4 
 5     while True:  6         a , b = b , a + b  7 
 8         if t < a :  9             return a 10         elif t > a and t < b: 11             return b 12 
13 
14 print(get_num(-1))    #1
15 print(get_num(7))     #8
16 print(get_num(100))   #144

 

  6 編寫函數,接收一個包含若干整數的列表參數lst,返回一個元組,其中第一個元素為列表lst中的最小值,其余元素為最小值在lst中的下標。

 

 1 import random  2 
 3 def get_num(lst):  4 
 5     # 由於要求列表中的元素都要是整數,所以先判斷元素
 6     t = tuple(lst)  7     for i in t:  8         if not isinstance(i,int):  9             return 'lst中的元素 i = {}不是整數,不符合要求,請重新傳入符合要求的列表'.format(i) 10 
11     #開始找列表中元素的最小值
12     m = min(lst) 13 
14     #對列表做一個轉換,
15     l1 = list(enumerate(lst)) 16 
17     #獲取列表元素的下標
18     l2 = [] 19 
20     for tu in l1: 21         if tu[1] == m: 22  l2.append(tu[0]) 23 
24     return (m,) + tuple(l2) 25 
26 l = list(range(1,100)) 27 random.shuffle(l) 28 l.append(1) 29 print(l) 30 print(get_num(l)) 31 
32 #[11, 60, 19, 25, 16, 24, 87, 67, 20, 44,
33 # 7, 10, 84, 73, 37, 42, 56, 68, 43, 91,
34 # 26, 3, 8, 14, 71, 94, 5, 31, 32, 34,
35 # 9, 17, 36, 69, 29, 12, 92, 41, 52, 57,
36 # 15, 74, 65, 82, 77, 75, 18, 47, 86, 45,
37 # 49, 2, 22, 64, 62, 33, 54, 1, 66,38,
38 # 88, 78, 30, 70, 58, 80, 95, 93, 79,55,
39 # 51, 6, 4, 40, 48, 39, 35, 89, 21,96,
40 # 90, 63, 81, 27, 61, 99, 72, 85, 98,23,
41 # 50, 53, 59, 28, 97, 76, 46, 13, 83,1]
42 
43 
44 #執行結果: (1, 57, 99)

 作者的實現過程:

 1 import random  2 
 3 def demo(lst):  4     m = min(lst)  5     result = (m,)  6     position = [index for index,value in enumerate(lst) if value == m]  7     result += tuple(position)  8 
 9     return result 10 
11 x = [random.randint(1,100) for i in range(50)]   #隨機生成50條記錄
12 
13 print(demo(x)) 14 #函數的執行結果 (2, 30, 39)

 

  7 編寫函數,接收一個整數t作為參數,打印楊輝三角前 t 行。

 1 
 2 def demo(t):  3     result = [[1],[1,1]]  #默認了前兩項,從第三項開始加起的。
 4     line = [1,1]  5 
 6     for i in range(2,t):  7         r = []  8         for j in range(0,len(line) - 1):  9             r.append(line[j] + line[j+1]) 10 
11         line = [1] + r +  [1] 12  result.append(line) 13     return result 14 
15 def output(result): 16     for item in result: 17         print(item) 18 
19 output(demo(10))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM