Python读取文本文件成绩遇类型转换及删除最低分问题求助
处理成绩文件:删除最低分并计算平均分
我来帮你搞定这个问题!你现在遇到的两个核心问题——把文本成绩转成整数、找到并删除最低分,咱们一步步来解决:
首先,解决文本转整数的问题
你用readlines()获取的每一行内容都是带换行符的字符串(比如'92\n'),所以需要先去掉多余的空白字符,再转换成整数。咱们可以把这些成绩存到一个整数列表里,方便后续操作。
然后,找到并删除最低分
用Python内置的min()函数就能轻松拿到列表里的最低分,再用remove()方法删除第一个出现的最低分(如果有多个相同最低分,你要是想删除所有的可以用列表推导式,后面我会提到)。
最后,重新写入文件并计算平均分
把处理后的成绩列表重新写入文件,再用sum()和len()计算剩余成绩的平均分。
下面是修改后的完整代码,我加了详细注释:
try: # 读取文件内容,用with语句自动管理文件关闭 with open('homework.txt', 'r') as homeworkFile: lines = homeworkFile.readlines() # 把每行文本转换成整数,处理掉换行和空格 scores = [] for line in lines: # 跳过空行(如果文件里有多余空行的话) stripped_line = line.strip() if stripped_line: scores.append(int(stripped_line)) # 可选:验证是否读取到了预期的12个成绩 if len(scores) != 12: print("警告:文件中的成绩数量不是12个!") # 确保列表不为空再进行后续操作 if scores: # 找到最低分并删除第一个出现的该分数 min_score = min(scores) scores.remove(min_score) # 重新写入处理后的成绩到文件 with open('homework.txt', 'w') as homeworkFile: for score in scores: homeworkFile.write(f"{score}\n") # 计算并打印平均分,保留两位小数更直观 average = sum(scores) / len(scores) print(f"删除最低分后的平均分是:{average:.2f}") else: print("错误:文件中没有有效成绩!") # 针对性处理常见异常 except FileNotFoundError: print("Error: 文件不存在!") except ValueError: print("Error: 文件中包含非数字的内容!") except Exception as e: print(f"Error: 发生未知错误 - {e}")
额外说明
- 我用了
with语句来打开文件,它会自动帮你关闭文件,比手动调用close()更安全可靠。 - 如果你的文件里可能有多个相同的最低分,想要全部删除的话,可以把删除那部分代码改成:
min_score = min(scores) scores = [score for score in scores if score != min_score] - 代码里加了多种异常处理,覆盖了文件不存在、内容不是数字等常见问题,让程序更健壮。
内容的提问来源于stack exchange,提问作者Griffin Christoffers
相关产品推荐
相关产品推荐

