关于#python#的问题:用python怎么做

用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)

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1089095
  • 除此之外, 这篇博客: 数据结构基本算法(python版本)中的 3.2 解题思路(每次循环将未排序部分起始元素作为初未排序部分的最小值,然后通过和未排序元素依次比较记录真正未排序部分最小值的下标,然后将初未排序部分的最小值和真正未排序部分最小值进行交换,与冒泡排序相比选择排序无需每次比较后直接更换相邻元素) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 同样分已排序和未排序,首先将每次循环中的未排序部分的起始元素视作初最小值元素,然后通过内循环依次比较大小找出未排序部分真正最小值元素的位置,将真正最小值的位置的元素和未排序部分的初最小值元素交换。
    在这里插入图片描述

该回答通过自己思路及引用到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 表达式按总分排序,并输出排名信息。

需要注意的是,上面的代码只是一个示例,可能需要根据实际情况进行修改和扩展。例如,可以添加异常处理、文件读写等功能,以实现更完整的应用程序。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢