用python怎么做?(二维列表)
项目运行效果:
输入
请定义学生人数3
请定义课程数量2
请输入第1门课的名称语文
请输入第2门课的名称数学
请输入第1个学生的姓名张三
请输入张三的语文成绩78
请输入张三的数学成绩99
请输入第2个学生的姓名李四
请输入李四的语文成绩99
请输入李四的数学成绩102
请输入第3个学生的姓名王五
请输入王五的语文成绩120
请输入王五的数学成绩108
输出
姓名语文数学总分平均分排名
王五 120 108 228 114.0 1
李四 99 102 201 100.5 2
张三 78 99 177 88.5 3
任务分解
完成学生的各科成绩的录入
l将各学生的成绩进行遍历输出
l完善各学生的总分、平均分信息
l按学生的总分排序后输出、完善排名信息
参考学习:
# 定义学生人数和课程数量
student_num = int(input('请定义学生人数: '))
course_num = int(input('请定义课程数量: '))
# 定义课程名称列表
course_names = []
for i in range(course_num):
course_name = input(f'请输入第{i+1}门课的名称: ')
course_names.append(course_name)
# 定义学生信息列表
students = []
for i in range(student_num):
student = {}
student['姓名'] = input(f'请输入第{i+1}个学生的姓名: ')
for course_name in course_names:
student[course_name] = int(input(f"请输入{student['姓名']}的{course_name}成绩: "))
students.append(student)
# 计算总分和平均分
for student in students:
total_score = 0
for course_name in course_names:
total_score += student[course_name]
student['总分'] = total_score
student['平均分'] = total_score / course_num
# 按总分排序
students.sort(key=lambda x: x['总分'], reverse=True)
# 输出结果
print('姓名', end=' ')
for course_name in course_names:
print(course_name, end=' ')
print('总分 平均分 排名')
for i, student in enumerate(students):
print(student['姓名'], end=' ')
for course_name in course_names:
print(student[course_name], end=' ')
print(student['总分'], student['平均分'], i+1)
同样分已排序和未排序,首先将每次循环中的未排序部分的起始元素视作初最小值元素,然后通过内循环依次比较大小找出未排序部分真正最小值元素的位置,将真正最小值的位置的元素和未排序部分的初最小值元素交换。
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
以下是一个示例代码,可以实现您的需求:
# 定义学生人数和课程数量
num_students = int(input("请定义学生人数:"))
num_courses = int(input("请定义课程数量:"))
# 定义课程名称列表和学生信息列表
course_names = []
students = []
# 输入课程名称
for i in range(num_courses):
course_name = input("请输入第{}门课的名称:".format(i + 1))
course_names.append(course_name)
# 输入学生信息
for i in range(num_students):
student = {}
student["name"] = input("请输入第{}个学生的姓名:".format(i + 1))
student["scores"] = []
for j in range(num_courses):
score = int(input("请输入{}的{}成绩:".format(student["name"], course_names[j])))
student["scores"].append(score)
students.append(student)
# 遍历输出学生信息
print("姓名", end="\t")
for course_name in course_names:
print(course_name, end="\t")
print("总分", "平均分", "排名", sep="\t")
for i, student in enumerate(students):
print(student["name"], end="\t")
for score in student["scores"]:
print(score, end="\t")
total_score = sum(student["scores"])
avg_score = total_score / num_courses
student["total_score"] = total_score
student["avg_score"] = avg_score
print(total_score, avg_score, sep="\t")
# 按总分排序后输出排名信息
sorted_students = sorted(students, key=lambda x: x["total_score"], reverse=True)
print("姓名", "总分", "平均分", "排名", sep="\t")
for i, student in enumerate(sorted_students):
print(student["name"], student["total_score"], student["avg_score"], i + 1, sep="\t")
在上面的代码中,首先定义了学生人数和课程数量,然后通过循环输入课程名称和学生信息,并计算每个学生的总分和平均分。最后通过 sorted
函数和 lambda
表达式按总分排序,并输出排名信息。
需要注意的是,上面的代码只是一个示例,可能需要根据实际情况进行修改和扩展。例如,可以添加异常处理、文件读写等功能,以实现更完整的应用程序。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢