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支持直接传入二维列表生成表格,每一个子列表对应表格的一行数据,实现步骤如下:
- 提前初始化空列表
table_data - 每处理一个分数,就将
[格式化后的分数, 对应评级]作为子列表追加到table_data中 - 调用
tabulate方法时传入table_data,通过headers参数指定表头,tablefmt参数指定表格样式即可生成格式化的输出表格
内容的提问来源于stack exchange,提问作者Tanmay Gupta
相关产品推荐
相关产品推荐

