Python函数课后练习

学号:
姓名:

练习题1

编写⼀个函数cacluate, 可以接收任意多个数,返回的是⼀个元组.元组的第⼀个值为所有参数的平均值, 第⼆个值是小于平均值的所有数.
然后调用该函数,传入5个输入参数:1,2,3,4,5,
实现输出:“平均值为:3.00,小于平均值的数有:[1, 2]”(输出的平均值保留2位小数)

  • 不利用sum和len等函数
def cacluate(*args):    #接收任意多个数,输出为元组
    num = 0
    s = 0
    for x in args:
        s += x 
        num +=1 
    
    avg = s / num   #计算平均数
    lower_avg = []     #定义⼀个空列表,存放⽐平均值小的所有数
    for item in args:    #遍历所有数
        if item < avg:
            lower_avg.append(item)    #把⽐平均值小的加⼊到列表中
    return avg,lower_avg    #返回平均值,以及列表
result = cacluate(1,2,3,4,5)
print(f"平均值为:{result[0]:.2f},小于平均值的数有:{result[1]}")
平均值为:3.00,小于平均值的数有:[1, 2]
  • 利用sum等函数
def cacluate(*args):    #接收任意多个数,输出为元组
    avg = sum(args) / len(args)   #计算平均数
    lower_avg = []     #定义⼀个空列表,存放⽐平均值小的所有数
    for item in args:    #遍历所有数
        if item < avg:
            lower_avg.append(item)    #把⽐平均值小的加⼊到列表中
    return avg,lower_avg    #返回平均值,以及列表
avgOfData,lower_avg = cacluate(1,2,3,4,5)
print(f"平均值为:{avgOfData:.2f},小于平均值的数有:{lower_avg}")
平均值为:3.00,小于平均值的数有:[1, 2]
  • 利用列表推导式
def cacluate(*args):    #接收任意多个数,输出为元组
    num = 0
    s = 0
    for x in args:
        s += x 
        num +=1 
    
    avg = s / num   #计算平均数
    lower_avg = [i for i in args if i<avg]     #列表推导式生成列表
    return avg,lower_avg    #返回平均值,以及列表
avgOfData,lower_avg = cacluate(1,2,3,4,5)
print(f"平均值为:{avgOfData:.2f},小于平均值的数有:{lower_avg}")
平均值为:3.00,小于平均值的数有:[1, 2]

练习题2

编写函数orderList, 接收⼀个列表和⼀个整数k, 返回⼀个新列表.
函数需求:

  • 将列表下标k之前对应(不包含k)的元素逆序;
  • 将下标k及之后的元素逆序
    然后写一段代码生成一个列表list1,包含10个1~100之间的随机整数,先打印输出list1,再调用该函数后将结果打印输出

例如:

  • 输入参数[49, 24, 7, 19, 74, 85, 64, 75, 45, 5],4
  • 调用函数返回:[19, 7, 24, 49, 5, 45, 75, 64, 85, 74]
def orderList(listInput,k):    #传⼊两个参数
    if k < 0 or k > len(listInput):    #判断传⼊的参数k值是否合法
        return 'error'    #不合法返回error
    else:
        return listInput[:k][::-1] + listInput[k:][::-1]    #合法进⾏反转
import random
list1 = []
for i in range(10):
    list1.append(random.randint(1,100))      #⽣成⼀个有10个1~100随机数的列表
    
print(list1)

print(orderList(list1,4))   #调⽤函数
[49, 24, 7, 19, 74, 85, 64, 75, 45, 5]
[19, 7, 24, 49, 5, 45, 75, 64, 85, 74]
#10个1~100随机数的列表的列表导出式
list1 = [random.randint(1,100) for i in range(10)]
list1
[10, 53, 47, 49, 100, 99, 15, 96, 17, 80]

练习题3

设计一个函数statScore,统计输入的成绩列表中“优(>=90)良([80,90))中([60-80))差(小于60)”各占多少个,结果用字典的形式表示。
然后假设成绩列表scores=[68、75、32、99、78、45、88、72、83、78],调用该函数将结果打印输出:{‘优’: 1, ‘良’: 2, ‘中’: 5, ‘差’: 2}。

def statScore(scores):
    A,B,C,D = 0,0,0,0
    for score in scores:
        if score>=90:
            A += 1 
        elif score>=80:
            B += 1 
        elif score>=60:
            C += 1
        else:
            D += 1 
    return {"优":A,"良":B,"中":C,"差":D}
scores=[68,75,32,99,78,45,88,72,83,78]
statScore(scores)
{'优': 1, '良': 2, '中': 5, '差': 2}

练习题4

定义一个函数get_max_socre,输入用字典表示的学生的各个成绩,返回学生考试成绩的最高分的科目和分数。
譬如:输入:dic = {‘语文’: 90,‘数学’: 97,‘英语’: 98},输出:英语,98

def get_max_socre(score_dic):
    """
    返回学生考试成绩的最高分的科目和分数
    :param score_dic:
    :return:
    """
    max_score = 0
    max_score_course = ''
    for course, score in score_dic.items():
        if score > max_score:
            max_score = score
            max_score_course = course

    return max_score_course, max_score
dic = {
    '语文': 90,
    '数学': 97,
    '英语': 98
}
course, score = get_max_socre(dic)
print(course, score)
英语 98

练习题5

设计函数accSum(n),实现计算表达式 1 − 1 / 2 + 1 / 3 − 1 / 4 + 1 / 5 − 1 / 6 + … + ( − 1 ) n / ( n + 1 ) 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6+… +(-1)^n/(n+1) 11/2+1/31/4+1/51/6++(1)n/(n+1) 的和。
写段无限循环代码,接受输入n的值,输出表达式计算结果。输入为0时跳出循环。
在代码段中,尽可能完美的实现对输入的异常进行相应的处理,并实现友善的人机输入输出接口。

def accSum(n):
    res = 1 
    for i in range(1,n+1):
        if i%2 == 0:
            res += (1/(i+1))
        else:
            res -= (1/(i+1))
    return res
while True:
    try:
        n = int(input("请输入非负整数n(0-退出):"))
    except:
        print("您输入的不是一个整数,请重试!")
        continue 
    if n == 0:
        print("您选择了退出程序。再见!")
        break 
    elif n < 0:
        print("您输入的不是一个非负整数,请重试!")
        continue 
    else:
        print(f"您输入的n是{n},表达式的结果是{accSum(n)}")
请输入非负整数n(0-退出):1
您输入的n是1,表达式的结果是0.5
请输入非负整数n(0-退出):2
您输入的n是2,表达式的结果是0.8333333333333333
请输入非负整数n(0-退出):0
您选择了退出程序。再见!
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值