第1题 图书价格汇总
其实也可以不用类的方法也行。
直接读取分段。
类的方法:
一、定义一个图书集合类BookSet,该类包含以下属性:
- 存储全体图书的列表,形如[[图书名称, 图书价格], [图书名称, 图书价格], …]
- 方法属性fromString,作用是把符合输入格式的字符串转换为图书列表。
- 方法属性total,作用是计算图书总价。
- 构造函数__init__,作用是把图书列表初始化为空列表。
二、类定义外面,完成输入、生成BookSet类的实例,调用方法属性fromString转换得到图书列表,调用total方法计算总价格,最后输出。
第2题 求某个日期是一年中第几天(类的定义和使用)
一、 定义一个日期类Date,该类包含以下属性:
- 成员数据year, month和day,分别记住年份、几月几号。
- 构造函数内,创建以上数据属性,并初始化为输入的年月日。
- 方法属性days_of_year,作用是计算输入的日期是一年中的第几天。
- 方法属性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,该类包含以下属性:
- 数据属性a,记住边长。
- 方法属性seta,作用是设置边长。
- 方法属性get_area,作用是计算表面积。
- 方法属性get_volume,作用是计算体积。
- 方法属性disp,作用是输出体积和表面积。
- 构造函数__init__,把边长初始化为0,或者是指定的数值。
二、 类定义外面,定义Box对象,计算体积以及表面积,输出。代码如下。
ab = float(input()) obj = Box() obj.seta( ab ) obj.getvolume( ) obj.getarea( ) obj.disp( )
第4题 字符串处理
这一题使用内置的字符串类即可。无须自定义类。
第5题 数组元素交换
这一题使用内置的列表类即可。无须自定义类。sort()
第6题 查找单价最高和最低的书籍
定义书籍集合类,该类包含以下属性:
- 数据属性books,是一个列表,记住各类书籍的名称和价格。
- 方法addBook(),作用是往集合内添加一本书籍。
- 方法maxPrice(),作用是找出价格最大的书籍;
- 方法minPrice(),作用是找出价格最小的书籍。
第7题 学生排序
这一题使用内置的列表,无需自定义类。
第8题 2908 算日期
- 注意,“今年”指的是2024年。
- 创建一个日期类,包括以下属性:
a) 数据属性包括年/月/日。
b) 方法属性xiangge(),作用是计算该日期与5月18日相隔的天数.
c) 构造函数__init__有4个形参,依次是self,y, m, d,后三个参数接收年月日数值。
第9题 计算年龄
- 题目所讲的“提供成员变量的get、set方法;”,指的是包含以下方法属性:
a) get_year(),返回年份;set_year(y),设置年份,y是被设置的年份值。
b) get_month(), set_month(m),同上。
c) get_day(), set_day(d),同上。
第10题 类的定义与对象使用
- 题目所讲的“私有成员”,在Python中比较少用,理解为数据成员即可。
- 本题,学生类的构造函数有xuehao, xingming和nianling,分别用于初始化学号、姓名和年龄。
- 学生类有一个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成员,如xiaozhao zhangwuji zhaomin zhouzhiruo), [小组1的总分]), ((小组2成员), [小组2的总分]),…]。
- 注意,键盘输入的一行与上述结构不同。以“xiaozhao zhangwuji zhaomin zhouzhiruo 2 3 1 5 4”为例,这一行输入指出第2组是第1名,第3组是第2名,依次类推。
- 答辩记录表用一个列表来存储,结构形如:[((小组1成员,如xiaozhao zhangwuji zhaomin zhouzhiruo), [小组1给出的排名,如2 3 1 5 4]), ((小组2成员), [小组2给出的排名…]),…]
- 把答辩记录表转换为小组评分表,对小组评分表进行排序,即可得到结果。
代码如下。
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))