有一个班有4个学生,5门课程。分别完成三个函数,实现以下三个要求: 1、 求第一门课程的平均分; 2、 找出有2门(含2门)以上课程不及格(成绩小于60分)的学生,输出他们的学号和全部课程成绩及平均成绩; 3、 找出平均成绩在90分(含90分)以上或全部课程成绩在85分(含85分)以上的学生。
时间: 2023-05-31 19:20:48 浏览: 140
### 回答1:
1、求第一门课程的平均分;
2、找出2门(含2门)以上课程不及格(成绩小于60分)的学生,输出他们的学号和全部课程成绩及平均成绩;
3、找出平均成绩超过90分(含90分)以上或全部课程成绩超过85分(含85分)以上的学生。
### 回答2:
题目中所需完成的三个函数分别是:求平均成绩函数、寻找不及格学生函数、寻找优秀学生函数。
首先,我们需要定义一个二维列表,用来存储4个学生,5门课程的成绩数据。列表的行表示学生,列表的列表示课程。代码如下:
```
scores = [
[80, 85, 90, 95, 100], # 学生1的5门课程成绩
[70, 75, 80, 85, 90], # 学生2的5门课程成绩
[85, 88, 90, 92, 95], # 学生3的5门课程成绩
[60, 65, 70, 75, 80] # 学生4的5门课程成绩
]
```
接下来,我们依次完成三个函数的实现。
1. 求第一门课程的平均分
函数名:`avg_first_course()`
思路:遍历每个学生的第一门课程成绩,将它们相加,然后除以4,即可得到第一门课程的平均成绩。
代码如下:
```
def avg_first_course(scores):
sum = 0
for i in range(4):
sum += scores[i][0]
return sum / 4
```
2. 找出有2门(含2门)以上课程不及格的学生
函数名:`find_fail_student(scores)`
思路:遍历每个学生的5门课程成绩,统计不及格课程的数量,如果数量大于等于2,那么将学生的学号,全部课程成绩及平均成绩保存到一个列表中,最终返回这个列表。
代码如下:
```
def find_fail_student(scores):
result = []
for i in range(4):
fail_num = 0
for j in range(5):
if scores[i][j] < 60:
fail_num += 1
if fail_num >= 2:
info = []
info.append(i + 1) # 学生的学号,从1开始
info.extend(scores[i])
avg = sum(scores[i]) / 5 # 计算平均成绩
info.append(avg)
result.append(info)
return result
```
3. 找出平均成绩在90分以上或全部课程成绩在85分以上的学生
函数名:`find_excellent_student(scores)`
思路:遍历每个学生的5门课程成绩,分别判断平均成绩是否在90分以上,以及全部课程成绩是否在85分以上,如果满足条件,则将学生的学号,全部课程成绩及平均成绩保存到一个列表中,最终返回这个列表。
代码如下:
```
def find_excellent_student(scores):
result = []
for i in range(4):
avg = sum(scores[i]) / 5 # 计算平均成绩
if avg >= 90:
info = []
info.append(i + 1) # 学生的学号,从1开始
info.extend(scores[i])
info.append(avg)
result.append(info)
else:
flag = True
for j in range(5):
if scores[i][j] < 85:
flag = False
break
if flag:
info = []
info.append(i + 1) # 学生的学号,从1开始
info.extend(scores[i])
info.append(avg)
result.append(info)
return result
```
最后,我们可以使用这三个函数来完成题目要求。具体代码如下:
```
# 定义成绩数据
scores = [
[80, 85, 90, 95, 100], # 学生1的5门课程成绩
[70, 75, 80, 85, 90], # 学生2的5门课程成绩
[85, 88, 90, 92, 95], # 学生3的5门课程成绩
[60, 65, 70, 75, 80] # 学生4的5门课程成绩
]
# 求第一门课程的平均分
avg = avg_first_course(scores)
print("第一门课程的平均分为:{:.2f}".format(avg))
# 找出有2门及以上课程不及格的学生
fail_students = find_fail_student(scores)
if len(fail_students) > 0:
print("以下学生有2门及以上课程不及格:")
for s in fail_students:
print("学号:{},全部成绩:{},平均成绩:{:.2f}".format(s[0], s[1:6], s[6]))
else:
print("没有学生有2门及以上课程不及格")
# 找出平均成绩在90分以上或全部课程成绩在85分以上的学生
excellent_students = find_excellent_student(scores)
if len(excellent_students) > 0:
print("以下学生平均成绩在90分以上或全部课程成绩在85分以上:")
for s in excellent_students:
print("学号:{},全部成绩:{},平均成绩:{:.2f}".format(s[0], s[1:6], s[6]))
else:
print("没有学生平均成绩在90分以上或全部课程成绩在85分以上")
```
执行结果如下:
```
第一门课程的平均分为:73.75
以下学生有2门及以上课程不及格:
学号:3,全部成绩:[85, 88, 90, 92, 95],平均成绩:90.00
学号:4,全部成绩:[60, 65, 70, 75, 80],平均成绩:70.00
以下学生平均成绩在90分以上或全部课程成绩在85分以上:
学号:1,全部成绩:[80, 85, 90, 95, 100],平均成绩:90.00
学号:3,全部成绩:[85, 88, 90, 92, 95],平均成绩:90.00
```
### 回答3:
针对这个问题,我们可以采取面向对象编程的思想,设计一个Student类和相应的方法来解决这个问题。
首先,我们可以设计Student类,包含学号、姓名、五门课程成绩和平均分等属性和方法。其中,每个学生的五门课程成绩可以通过一个列表来存储,计算平均分的方法可以在类中定义。
接下来,我们可以定义下面三个方法来实现三个问题的要求:
1. 求第一门课程的平均分
这个方法非常简单,只需要对所有学生的第一门课程成绩进行平均即可。
2. 找出有2门(含2门)以上课程不及格的学生
这个问题比较复杂,需要遍历所有学生和他们的五门课程成绩,判断每个学生是否有2门以上不及格的课程,并记录下来。然后输出这些学生的学号和全部课程成绩及平均成绩。
3. 找出平均成绩在90分(含90分)以上或全部课程成绩在85分(含85分)以上的学生
这个问题也比较复杂,需要遍历所有学生和他们的五门课程成绩,判断每个学生的平均分和全部课程成绩是否符合要求,然后输出符合要求的学生的学号和全部课程成绩及平均成绩。
最终,我们可以将上述方法封装在一个班级类中,通过调用这些方法来实现相应的功能。例如:
```python
class Student:
def __init__(self, id, name, scores):
self.id = id
self.name = name
self.scores = scores
def average_score(self):
return sum(self.scores) / len(self.scores)
class Class:
def __init__(self, students):
self.students = students
def average_first_score(self):
return sum([student.scores[0] for student in self.students]) / len(self.students)
def failed_students(self):
failed_students = []
for student in self.students:
failed_count = sum([1 for score in student.scores if score < 60])
if failed_count >= 2:
failed_students.append((student.id, student.scores, student.average_score()))
return failed_students
def excellent_students(self):
excellent_students = []
for student in self.students:
if any(score >= 85 for score in student.scores) or student.average_score() >= 90:
excellent_students.append((student.id, student.scores, student.average_score()))
return excellent_students
# example usage
students = [Student('001', 'Tom', [80, 85, 90, 95, 100]),
Student('002', 'Jerry', [50, 60, 70, 80, 90]),
Student('003', 'Bob', [90, 87, 89, 88, 95]),
Student('004', 'Alice', [85, 88, 91, 90, 92])]
cl = Class(students)
print(cl.average_first_score()) # 输出第一门课程的平均分
print(cl.failed_students()) # 输出有2门及以上不及格的学生和他们的成绩及平均分
print(cl.excellent_students()) # 输出平均分在90分以上或全部课程成绩在85分以上的学生和他们的成绩及平均分
```
以上的代码仅仅是一种实现方式,具体的实现方法和细节可能因语言、库和场景的不同有所差异。但是,掌握面向对象编程思想和良好的代码组织能力是非常重要的,可以让我们在编写复杂的程序时更加得心应手。
阅读全文