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

Python如何结合用户输入、循环使用tabulate模块输出学生分数统计表格

优化后完整代码
import numpy as np
from tabulate import tabulate

# 评级判定函数
def get_score_rank(score):
    if score < 40:
        return "NOT SATISFACTORY"
    elif score <= 74:
        return "SATISFACTORY"
    elif score <= 89:
        return "GOOD"
    else:
        return "EXCELLENT"

if __name__ == "__main__":
    marks = []
    # 录入分数逻辑
    while True:
        input_content = input("Enter the marks of the students(entering STOP would end the process): ").strip()
        if input_content.lower() == "stop":
            break
        # 异常处理避免非法输入导致崩溃
        try:
            marks.append(float(input_content))
        except ValueError:
            print("Invalid input, please enter a number or STOP")
    
    if not marks:
        print("No marks entered")
        exit()
    
    # 计算平均分
    avg_score = np.mean(marks)
    print(f"The average marks are {avg_score:.2f}")

    # 生成表格数据
    table_data = []
    for s in marks:
        format_score = int(s) if s.is_integer() else s
        table_data.append([format_score, get_score_rank(s)])
    
    # 输出表格
    print("\n分数评级结果:")
    print(tabulate(table_data, headers=["Score", "Rank"], tablefmt="grid"))
核心优化说明
  • 移除冗余导入:删除了全程未使用的array导入,tabulate仅导入需要的tabulate方法而非全部内容,更符合Python编码规范
  • 简化输入逻辑:将首次输入合并到while True循环中,无需额外处理录入结束后删除列表最后一个元素的操作,同时新增非法输入异常处理,避免用户输入非数字内容时程序崩溃
  • 复用判断逻辑:将等级判定封装为独立函数,避免原代码中重复写两次完全相同的判断分支,整体代码行数精简近40%
  • 简化数值计算:直接调用numpy内置的mean方法计算平均值,无需手动循环累加
  • 统一分数格式化:使用三元表达式处理整数/浮点型分数的展示逻辑,无需分开写if/else分支处理输出
tabulate表格实现逻辑

tabulate支持直接传入二维列表生成表格,每一个子列表对应表格的一行数据,实现步骤如下:

  1. 提前初始化空列表table_data
  2. 每处理一个分数,就将[格式化后的分数, 对应评级]作为子列表追加到table_data中
  3. 调用tabulate方法时传入table_data,通过headers参数指定表头,tablefmt参数指定表格样式即可生成格式化的输出表格

内容的提问来源于stack exchange,提问作者Tanmay Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:09:03