You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.6:如何基于列表与insert方法构建指定功能函数

完善Python交互列表功能:按姓名/分数插入+计算平均分

嗨,我来帮你梳理并完善这个功能!咱们先拆解原代码里的几个小问题,再一步步实现你想要的交互效果:

原代码里的核心问题

  1. avg函数错误地将输入列表X重置为空,导致根本无法计算平均分
  2. main_function里有变量名拼写错误(qurstion→question)
  3. 缺少循环输入多个成员的逻辑,也没实现按姓名/分数排序插入的核心需求
  4. 没有触发计算平均分的入口逻辑

修正后的完整代码

def insert_member(n, X, sort_by):
    # 按姓名或分数排序插入新成员
    if sort_by == 'n':
        # 按姓名首字母升序插入(不区分大小写)
        for i in range(len(X)):
            if n[0].lower() < X[i][0].lower():
                X.insert(i, n)
                return X
        X.append(n)
    elif sort_by == 'm':
        # 按分数升序插入(若要降序可将<改为>)
        for i in range(len(X)):
            if n[1] < X[i][1]:
                X.insert(i, n)
                return X
        X.append(n)
    return X

def avg(X):
    # 计算列表中所有成员的平均分
    if not X:  # 处理空列表情况,避免除以零错误
        return 0.0
    marks = [member[1] for member in X]  # 提取所有分数
    average = sum(marks) / len(marks)
    return average

def main_function():
    X = []
    sort_type = None  # 记录用户选择的排序方式('n'或'm')
    
    while True:
        if not sort_type:
            # 初始选择:开始新列表或退出
            question = input("\nPress 's' to start with new list or 'q' to quit: ").lower()
            if question == 'q':
                print("Exiting program...")
                break
            elif question == 's':
                # 选择排序方式并验证输入有效性
                sort_type = input("\nInsert members into list by name ('n') or by marks ('m'): ").lower()
                while sort_type not in ['n', 'm']:
                    sort_type = input("Invalid input! Please enter 'n' for name or 'm' for marks: ").lower()
                print("Enter name and marks, type 'AVERAGE' when done.")
            else:
                print("Invalid input! Please enter 's' or 'q'.")
        else:
            # 循环输入成员信息,直到输入'AVERAGE'触发计算
            name_input = input("Name: ").strip()
            if name_input.upper() == 'AVERAGE':
                # 输出所有成员信息和平均分
                print("\n--- Average Calculation ---")
                for member in X:
                    print(f"{member[0]} has a mark of: {member[1]}")
                average_score = avg(X)
                print(f"Average: {average_score:.1f}")
                # 重置状态,允许重新开始或退出
                X = []
                sort_type = None
            else:
                # 处理分数输入,确保是整数
                try:
                    marks_input = int(input("Marks: ").strip())
                    new_member = [name_input.title(), marks_input]
                    X = insert_member(new_member, X, sort_type)
                    print(f"X: {X}")
                except ValueError:
                    print("Invalid marks! Please enter a number.")

if __name__ == "__main__":
    main_function()

功能说明与测试效果

  • 排序插入:选择'n'时按姓名首字母升序插入,选择'm'时按分数升序插入(可自行修改为降序)
  • 交互流程:从初始选择→排序方式→循环输入成员→触发平均分计算→回到初始状态,形成完整闭环
  • 输入验证:对排序方式、分数输入做了有效性校验,避免程序崩溃

测试你的期望场景,输出如下:

Press 's' to start with new list or 'q' to quit: s

Insert members into list by name ('n') or by marks ('m'): n
Enter name and marks, type 'AVERAGE' when done.
Name: samantha
Marks: 45
X: [['Samantha', 45]]
Name: billy
Marks: 30
X: [['Billy', 30], ['Samantha', 45]]
Name: rudy
Marks: 75
X: [['Billy', 30], ['Rudy', 75], ['Samantha', 45]]
Name: AVERAGE

--- Average Calculation ---
Billy has a mark of: 30
Rudy has a mark of: 75
Samantha has a mark of: 45
Average: 50.0

内容的提问来源于stack exchange,提问作者Jefford M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:15:22