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

编写Python程序:排除指定科目计算成绩平均值(保留两位小数)

问题描述

编写Python程序,接收一个参数(科目名称),计算并输出排除该科目后的成绩平均值,结果保留两位小数。

给定字典:

grades = {'Biology':80, 'Physics':88, 'Chemistry':98, 'Math':89, 'English':79, 'Music':67, 'History':68, 'Art':53, 'Economics':95, 'Psychology':88}

示例:

  • 当参数为Biology时,应输出80.56
  • 当参数为Chemistry时,应输出78.56
用户错误代码
import sys

grades = {'Biology':80, 'Physics':88, 'Chemistry':98, 'Math':89, 'English':79, 'Music':67, 'History':68, 'Art':53, 'Economics':95, 'Psychology':88}

def average_grade():
    key = sys.argv[1]
    included_keys = grades.pop(key)

    average = sum(included_keys)/len(included_keys)
    return round(average, 2)

average_grade()
错误分析与修正

错误点:

  1. grades.pop(key)返回的是对应科目的分数(整数),而非剩余的成绩集合,直接对整数调用sum()和len()会触发类型错误。
  2. 使用pop()会修改原字典,若多次运行程序会导致字典内容丢失。
  3. 未处理输入科目不存在的情况,会引发KeyError。
  4. 函数仅返回结果但未打印,运行后看不到输出。

修正后的代码

import sys

grades = {'Biology':80, 'Physics':88, 'Chemistry':98, 'Math':89, 'English':79, 'Music':67, 'History':68, 'Art':53, 'Economics':95, 'Psychology':88}

def average_grade():
    if len(sys.argv) < 2:
        print("请输入科目名称作为参数")
        return
    
    key = sys.argv[1]
    if key not in grades:
        print(f"科目 {key} 不存在")
        return
    
    total = sum(grades.values()) - grades[key]
    count = len(grades) - 1
    average = total / count
    # 格式化输出确保严格保留两位小数
    print("{0:.2f}".format(average))

average_grade()

说明:

  • 先检查参数是否传入,避免索引错误。
  • 判断输入科目是否在字典中,防止KeyError。
  • 通过总和减去目标科目分数、总数量减1来计算平均值,不修改原字典。
  • 使用字符串格式化确保输出严格保留两位小数,避免round函数的精度问题(例如某些情况下round可能得到80.55而非80.56)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:01:10