python.第六章课后题

# 课后题

# 1.

from math import *
def area(r):
    return pi * r ** 2

print('半径为3.5的圆的面积:{:.3f}'.format(area(3.5)))
print('半径为2.9的圆的面积:{:.3f}'.format(area(2.9)))
# 半径为3.5的圆的面积:38.485
# 半径为2.9的圆的面积:26.421

m = area(6.2)
n = area(3.3)
print('圆环面积:{:.3f}'.format(m - n))
# 圆环面积:86.551
# 参考答案
# def area(r):
# 
#     return round(pi*r**2,2)
# 
# from math import pi
# 
# print(area(3.5),area(2.9))
# 
# 38.48 26.42
# 
# #圆环面积πR²-πr²
# 
# print(area(6.2) - area(3.3))
# 
# 86.55000000000001


# 2.

def showMsg(n,name):
    for i in range(n):
        print("Happy Birthday {}".format(name))

showMsg(3,'wzm')

# Happy Birthday wzm
# Happy Birthday wzm
# Happy Birthday wzm
# 参考答案
# def showMsg(n,name):
# 
#     for i in range(n):
# 
#         print("Happy Birthday {}".format(name))
# 
# showMsg(2,'小明')
# 
# Happy Birthday 小明
# 
# Happy Birthday 小明
# 3.
# 已知成绩列表 s = {'小李':[77,54,57],'小张':[89,66,78],'小陈':[90,93,80],'小杨':[69,58,93]}
# 输出结果为:{'小李': 62, '小张': 77, '小陈': 87, '小杨': 73}
def avg(a,b,c):
    return int((a + b + c) / 3)

s = {'小李':[77,54,57],'小张':[89,66,78],'小陈':[90,93,80],'小杨':[69,58,93]}
s1 = {}
for k,v in s.items():
    # print(v)
    a = v[0]
    b = v[1]
    c = v[2]
    av = avg(a,b,c)
    s1[k] = av

print(s1)

# {'小李': 62, '小张': 77, '小陈': 87, '小杨': 73}


# 参考答案
# def avg(a,b,c):
#
#     return int((a+b+c)/3)
#
# s = {'小李':[77,54,57],
#
#      '小张':[89,66,78],
#
#      '小陈':[90,93,80],
#
#      '小杨':[69,58,93]}
#
# dict_n = {}
#
# for k,v in s.items():
#
#     dict_n[k] = avg(v[0],v[1],v[2])
#
# print(dict_n)
#
# {'小李': 62, '小张': 77, '小陈': 87, '小杨': 73}


# 4.

# 已知成绩列表 s={'小李':[77,54],'小张':[89,66,78,99],'小陈':[90],'小杨':[69,58,93]}
# # 输出结果为:{'小李':65,'小张':83,'小陈':90,'小杨': 73}3]}

def avg(lst):
    return int(sum(lst)/len(lst))

s={'小李':[77,54],'小张':[89,66,78,99],'小陈':[90],'小杨':[69,58,93]}

s2 = {}
for k,v in s.items():

    s2[k] = avg(v)

print(s2)

# {'小李': 65, '小张': 83, '小陈': 90, '小杨': 73}

# 参考答案
# def avg(lst):
# 
#     return int(sum(lst)/len(lst))
# 
# s = {'小李':[77,54],
# 
#      '小张':[89,66,78,99],
# 
#      '小陈':[90],
# 
#      '小杨':[69,58,93]}
# 
# dict_n = {}
# 
# for k,v in s.items():
# 
#     dict_n[k] = avg(v)
# 
# print(dict_n)
# 
# {'小李': 65, '小张': 83, '小陈': 90, '小杨': 73}
# 5.

# dict={'01':[67,88,45],'02':[97,68,85],'03':[97, 98, 95],'04':[67,48,45],'05':[82,58,75],'06':[96,49,65]}

dict={'01':[67,88,45],'02':[97,68,85],'03':[97, 98, 95],'04':[67,48,45],'05':[82,58,75],'06':[96,49,65]}


# ①
def more85(dic):

    n = []
    for k,v in dic.items():
        for i in range(3):           # 函数体 用列表生成式 的等价写法
            if v[i] < 85: break      # n = [k for k, v in dic.items() if all(x >= 85 for x in v[:3])]               
        else:
            n.append(k)

    return n

print('每门成绩均大于等于 85 的学生的学号:')
print(more85(dict)

# # 每门成绩均大于等于 85 的学生的学号:
# # ['03']



# 参考答案

# # (1)
#
# def avg_select(dict):
#
#     num_85 = []
#
#     for k,v in dict.items():
#
#         if min(v)>85:
#
#             num_85.append(k)
#
#     return num_85
#
# print(avg_select(dict))
#
# ['03']


# ②
def avg3(dic):

    a = {}
    for k,v in dic.items():
        a[k] = (round(sum(v)/len(v),2),sum(v))
    return a

print('每一个学号对应的平均分和总分,结果保留两位小数:')
print(avg3(dict))

# 每一个学号对应的平均分和总分,结果保留两位小数:
# {'01': (66.67, 200), '02': (83.33, 250), '03': (96.67, 290), '04': (53.33, 160), '05': (71.67, 215), '06': (70.0, 210)}
# 参考答案
# # (2)
# 
# def avg(dict):
# 
#     avg_d = {}
# 
#     for k, v in dict.items():
# 
#         d_v = [0, 0]
# 
#         d_v[0] = round(sum(v)/len(v),2)
# 
#         d_v[1] = sum(v)
# 
#         avg_d[k] = d_v
# 
#     return avg_d
# 
# print(avg(dict))
# 
# {'01': [66.67, 200], '02': [74.0, 222], '03': [96.67, 290], '04': [53.33, 160], '05': [71.67, 215], '06': [70.0, 210]}

# ③
def rank(dic):
    b = {}
    for k,v in dic.items():
        b[k] = sum(v)
    return sorted(b.keys(),key= lambda x:b[x])

print('按总分升序排列的学号列表:')
print(rank(dict))

# 按总分升序排列的学号列表:
# ['04', '01', '06', '05', '02', '03']
# 参考答案
# # (3)
# 
# def sum_score(dict):
# 
#     list_sum = []
# 
#     dict_n = {}
# 
#     for k, v in dict.items():
# 
#         dict_n[k] = sum(v)
# 
#     list_n = [(v,k) for k,v in dict_n.items()]
# 
#     list_n.sort()
# 
#     for i in list_n:
# 
#         list_sum.append(i[1])
# 
#     return list_sum
# 
# print(sum_score(dict))
# 
# ['04', '01', '06', '05', '02', '03']


# 6.
# 用递归方法求数列“1,1,1,3,5,9,17,31...”的前 20 项

def sequence(n):
    if n == 1 or n == 2 or n == 3: return 1
    else: return sequence(n-1) + sequence(n-2) + sequence(n-3)

print('数列“1,1,1,3,5,9,17,31...”的前 20 项:')
for i in range(1,20+1):
    print("{:<8}".format(sequence(i)),end=' ' if i % 5 != 0  else "\n")

# 1        1        1        3        5
# 9        17       31       57       105
# 193      355      653      1201     2209
# 4063     7473     13745    25281    46499
# 参考答案
# def fact(n):
# 
#     if n in [1,2,3]:
# 
#         return 1
# 
#     else:
# 
#         return  fact(n-1) + fact(n-2) + fact(n-3)
# 
# list_f =[]
# 
# for i in range(1,21):
# 
#     list_f.append(fact(i))
# 
# print(list_f)
# 
# [1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201, 2209, 4063, 7473, 13745, 25281, 46499]
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值