zoukankan      html  css  js  c++  java
  • 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))
  • 相关阅读:
    微人事项目-mybatis-持久层
    通过外键连接多个表
    springioc
    Redis 消息中间件 ServiceStack.Redis 轻量级
    深度数据对接 链接服务器 数据传输
    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
    sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
    sql server 远程备份 bak 删除
    冒泡排序
    多线程 异步 beginInvoke EndInvoke 使用
  • 原文地址:https://www.cnblogs.com/avention/p/8620738.html
Copyright © 2011-2022 走看看