Description 统计学生出勤次数,n个学生,每个学生有学号和出勤记录,该记录为10位二进制位串,1为出勤,0为未出勤。 按出勤次数降序排列输出,如果出勤次数相同,按学号从小到大排序。 Input 输入的第一个数n为学生人数。后面跟n行数据,每行包括学号和一个10位的二进制位串,中间用空格间隔。 Output 输出学生的学号和出勤次数,按出勤次数从大到小排列,如果次数相同,按学号从小到大排序。 Sample Input 4 160101 1111111100 160102 1011111011 160103 1111111111 160104 1111111110 Sample Output 160103:10 160104:9 160101:8 160102:8 Hint 要求采用面向对象思想设计
时间: 2023-12-10 21:41:30 浏览: 153
以下是使用面向对象思想设计的Python代码实现:
```python
class Student:
def __init__(self, id, record):
self.id = id
self.record = record
def attendance_count(self):
return self.record.count('1')
def __lt__(self, other):
if self.attendance_count() == other.attendance_count():
return self.id < other.id
else:
return self.attendance_count() > other.attendance_count()
n = int(input())
students = []
for i in range(n):
id, record = input().split()
students.append(Student(id, record))
students.sort()
for student in students:
print(f"{student.id}:{student.attendance_count()}")
```
首先定义了一个名为`Student`的类,它有两个属性:学号`id`和出勤记录`record`。然后定义了一个`attendance_count`方法,用于计算学生的出勤次数。最后定义了一个`__lt__`方法,用于在排序时比较两个学生的出勤次数和学号。注意,在`__lt__`方法中,如果出勤次数相同,需要按学号从小到大排序。
在主程序中,首先读入学生人数`n`,然后依次读入每个学生的学号和出勤记录,并将其封装成一个`Student`对象存入列表`students`中。最后对`students`进行排序,并依次输出每个学生的学号和出勤次数。
阅读全文