Python字符串转整数及成绩统计功能实现遇阻求助
问题分析与解决方案
原代码存在的核心问题
- 文件读取指针耗尽:第一次遍历文件后,文件指针已移到末尾,后续所有
for record in Grades循环都会直接跳过,无法执行。 - 数据类型错误:
- 统计函数传入的是字符串
'grade'而非变量grade,函数无法处理有效数据。 - 从文件读取的成绩是字符串类型,未转换为整数,统计函数无法对字符串做数值计算。
- 统计函数传入的是字符串
- 输入与写入逻辑缺陷:仅获取一次用户输入并写入一行,无法处理多成绩输入;未考虑多成绩输入时的分隔处理。
- 统计逻辑缺失:总和(Total)、数量(Count)未实现计算;标准差错误调用
statistics.mean,应使用statistics.stdev(样本标准差)或statistics.pstdev(总体标准差)。 - 格式化语法错误:使用
%格式化时缺少必要元组结构,写法冗余。
修正后的完整代码
import statistics def main(): # 获取用户输入并写入文件,支持空格分隔的多成绩输入 grades_input = input("请输入学生成绩,用空格分隔:") with open('Grades.txt', mode='w') as grades_file: for grade in grades_input.split(): grades_file.write(f"{grade}\n") # 读取文件并转换为整数列表 grades = [] with open('Grades.txt', mode='r') as grades_file: for line in grades_file: stripped_line = line.strip() if stripped_line: grades.append(int(stripped_line)) # 空数据判断,避免报错 if not grades: print("没有有效的成绩数据") return # 计算所有统计指标 mean_val = statistics.mean(grades) total_val = sum(grades) count_val = len(grades) median_val = statistics.median(grades) min_val = min(grades) max_val = max(grades) std_val = statistics.stdev(grades) # 用pstdev可计算总体标准差 # 输出统计结果 print(f"均值(Mean): {mean_val:.2f}") print(f"总和(Total): {total_val}") print(f"数量(Count): {count_val}") print(f"中位数(Median): {median_val}") print(f"最小值(Min): {min_val}") print(f"最大值(Max): {max_val}") print(f"标准差(Std): {std_val:.2f}") print(f"学生成绩列表: {grades}") if __name__ == "__main__": main()
关键改进说明
- 一次性处理数据:将文件内容一次性读取并转换为整数列表,避免多次遍历文件的指针问题,同时方便后续统计计算。
- 完善输入逻辑:支持多成绩空格分隔输入,逐个写入文件,保证数据格式规范。
- 补全统计功能:实现总和、数量的计算,修正标准差的函数调用。
- 类型安全与容错:将字符串成绩转换为整数,添加空数据判断,避免空列表导致的运行报错。
- 简化输出格式:用f-string统一格式化输出,可读性更强、语法更简洁。
内容的提问来源于stack exchange,提问作者RustyShackleford
相关产品推荐
相关产品推荐

