学号:
姓名:
练习题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)
1−1/2+1/3−1/4+1/5−1/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
您选择了退出程序。再见!