【python】习题第10周题解

简介: 【python】习题第10周题解

第1题 图书价格汇总

其实也可以不用类的方法也行。

直接读取分段。

类的方法:

一、定义一个图书集合类BookSet,该类包含以下属性:

  1. 存储全体图书的列表,形如[[图书名称, 图书价格], [图书名称, 图书价格], …]
  2. 方法属性fromString,作用是把符合输入格式的字符串转换为图书列表。
  3. 方法属性total,作用是计算图书总价。
  4. 构造函数__init__,作用是把图书列表初始化为空列表。

二、类定义外面,完成输入、生成BookSet类的实例,调用方法属性fromString转换得到图书列表,调用total方法计算总价格,最后输出。

第2题 求某个日期是一年中第几天(类的定义和使用)

一、 定义一个日期类Date,该类包含以下属性:

  1. 成员数据year, month和day,分别记住年份、几月几号。
  2. 构造函数内,创建以上数据属性,并初始化为输入的年月日。
  3. 方法属性days_of_year,作用是计算输入的日期是一年中的第几天。
  4. 方法属性is_leap_year,作用是判断一个年份是否是闰年。方法days_of_year内部调用is_leap_year方法。

二、类定义外面,输入年月日之后,生成Date对象,调用days_of_year方法计算结果并输出。

第3题 立方体类的实现

方法一

a=int(input())
print("{} {}".format(a*a*a,a*a*6))

方法二

一、定义立方体类Box,该类包含以下属性:

  1. 数据属性a,记住边长。
  2. 方法属性seta,作用是设置边长。
  3. 方法属性get_area,作用是计算表面积。
  4. 方法属性get_volume,作用是计算体积。
  5. 方法属性disp,作用是输出体积和表面积。
  6. 构造函数__init__,把边长初始化为0,或者是指定的数值。

二、 类定义外面,定义Box对象,计算体积以及表面积,输出。代码如下。

ab = float(input())
    obj = Box()
    obj.seta( ab )
    obj.getvolume( )
    obj.getarea( )
    obj.disp( )

第4题 字符串处理

这一题使用内置的字符串类即可。无须自定义类。

第5题 数组元素交换

这一题使用内置的列表类即可。无须自定义类。sort()

第6题 查找单价最高和最低的书籍

定义书籍集合类,该类包含以下属性:

  1. 数据属性books,是一个列表,记住各类书籍的名称和价格。
  2. 方法addBook(),作用是往集合内添加一本书籍。
  3. 方法maxPrice(),作用是找出价格最大的书籍;
  4. 方法minPrice(),作用是找出价格最小的书籍。

第7题 学生排序

这一题使用内置的列表,无需自定义类。

第8题 2908 算日期

  1. 注意,“今年”指的是2024年。
  2. 创建一个日期类,包括以下属性:
    a) 数据属性包括年/月/日。
    b) 方法属性xiangge(),作用是计算该日期与5月18日相隔的天数.
    c) 构造函数__init__有4个形参,依次是self,y, m, d,后三个参数接收年月日数值。

第9题 计算年龄

  1. 题目所讲的“提供成员变量的get、set方法;”,指的是包含以下方法属性:
    a) get_year(),返回年份;set_year(y),设置年份,y是被设置的年份值。
    b) get_month(), set_month(m),同上。
    c) get_day(), set_day(d),同上。

第10题 类的定义与对象使用

  1. 题目所讲的“私有成员”,在Python中比较少用,理解为数据成员即可。
  2. 本题,学生类的构造函数有xuehao, xingming和nianling,分别用于初始化学号、姓名和年龄。
  3. 学生类有一个info函数,作用是输出学生信息,输出格式参照题目要求。

第11题 sdust-Java-学生成绩读取与排序

下为参考答案。使用了字典,以学号为键,学生对象为值。

class Student():
    def __init__(self, sno, sname, kc, cj):
        self.sno = sno
        self.sname = sname
        self.cj_list = [(kc, cj)]
        
    def insert_cj(self,kc, cj):
        self.cj_list.append((kc, cj))
        
    def avg(self):
        #self.cj_list是[(课程名, 成绩), (课程名, 成绩), ...]
        return sum([cj[1] for cj in self.cj_list]) / len(self.cj_list)
    
xh_stu = {}  #学号为键,学生对象为值
while True:
    line = input()
    if line=="exit":
        break
    xm, xh, kc, cj = line.split(',')
    if xh in xh_stu:
        xh_stu[xh].insert_cj(kc, int(cj))
    else:
        xh_stu[xh] = Student(xh, xm, kc, int(cj))
stu_list = list(xh_stu.values())
stu_list.sort(key=lambda s: s.sno)  #按学号从小到大排序
stu_list.sort(key=Student.avg, reverse=True) #按平均分降序排序
for rank, stu in enumerate(stu_list):
    print("No{}:{},{}".format(rank+1, stu.sno, stu.sname))

第12题 课程设计排名统计

  1. 本题无需使用自定义类来实现。
  2. 安排一个列表,存储小组评分表,结构形如:[((小组1成员,如xiaozhao zhangwuji zhaomin zhouzhiruo), [小组1的总分]), ((小组2成员), [小组2的总分]),…]。
  3. 注意,键盘输入的一行与上述结构不同。以“xiaozhao zhangwuji zhaomin zhouzhiruo 2 3 1 5 4”为例,这一行输入指出第2组是第1名,第3组是第2名,依次类推。
  4. 答辩记录表用一个列表来存储,结构形如:[((小组1成员,如xiaozhao zhangwuji zhaomin zhouzhiruo), [小组1给出的排名,如2 3 1 5 4]), ((小组2成员), [小组2给出的排名…]),…]
  5. 把答辩记录表转换为小组评分表,对小组评分表进行排序,即可得到结果。

代码如下。

n = int(input())
dbcjb = []  #答辩成绩表
for i in range(n):
    line = input().split()
    dbcj= [(line[0], line[1], line[2], line[3])]
    dbcj += [int(s) for s in line[4:]]
    dbcjb.append(dbcj)
# print(dbcjb)
xzpfb = [[dbcjb[xz][0], 0] for xz in range(0, n)] #小组评分表,总分初始化为0分
# print('xzpfb:', xzpfb)
for i in range(0, n):  #对于每一个小组给出的评分
    for rank, xz in enumerate(dbcjb[i][1:]): 
        xzpfb[xz-1][1] += rank
xzpfb.sort(key=lambda xzpf: sum(xzpf[1:]))
for rank, xz in enumerate(xzpfb):
    print(rank+1, *(xz[0]))

第13题 领装备

直接看题

第14题 宿舍谁最高

下面的代码定义了两个类。StudentClass是宿舍类;Student是单个学生类。

class StudentClass():
    def __init__(self, classid):
        self.classid = classid
        self.members = []    #记住
    def add_member(self, member):
        '''添加宿舍的学生'''
        self.members.append(member)
    def highest(self):  #得出最高的学生
        return max(self.members, key=Student.get_height)
class Student():
    def __init__(self, sname, height, weight):
        self.sname = sname
        self.height = height
        self.weight = weight
    def get_height(self):
        return self.height
n = int(input())
id_class = { }   #宿舍号为键,宿舍对象为值
for i in range(n):  #读入n个学生,归入各个宿舍
    sinfo = input().split()
    classid = '0'*(6-len(sinfo[0])) + sinfo[0]  #宿舍号凑成6位
    st = Student(sinfo[1], int(sinfo[2]), int(sinfo[3]))
    if classid in id_class:
        id_class[classid].add_member(st)  #向宿舍添加学生
    else:
        student_class = StudentClass(classid)  #创建一个宿舍类
        student_class.add_member(st)
        id_class[classid] = student_class  #新建一个宿舍
    # print("i:", i)
class_list = sorted(id_class.items())  #以宿舍号从小到大排序
for classid, students in class_list:  #classid是宿舍号,students是宿舍对象
    t = students.highest()
    print("{} {} {} {}".format(classid, t.sname, t.height, t.weight))


相关文章
|
3天前
|
物联网 Python
2024年Python最全信息技术导论——物联网技术习题整理(1),Python面试题库
2024年Python最全信息技术导论——物联网技术习题整理(1),Python面试题库
2024年Python最全信息技术导论——物联网技术习题整理(1),Python面试题库
|
8天前
|
Python
【python】习题 第10周
【python】习题 第10周
|
8天前
|
Python
【python】习题第9周
【python】习题第9周
|
8天前
|
数据安全/隐私保护 Python
【python】习题第8周
【python】习题第8周
|
8天前
|
Python
【python】习题第7周(下)
【python】习题第7周(下)
|
8天前
|
自然语言处理 Python
【python】习题第7周(上)
【python】习题第7周(上)
|
8天前
|
Python
【python】习题 6-10周(下)
【python】习题 6-10周(下)
|
8天前
|
自然语言处理 数据安全/隐私保护 Python
【python】习题 6-10周(中)
【python】习题 6-10周(中)
|
8天前
|
Python
【python】习题 6-10周(上)
【python】习题 6-10周(上)
|
8天前
|
Python
【python】习题 1-5周(下)
【python】习题 1-5周(下)