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

Python中如何让用户输入多个值传递给带可变参数的自定义函数

原函数隐患修复

你当前编写的score函数存在两个小问题,建议先修复避免后续报错:

  1. 遍历**quiz的循环每次都会覆盖e的值,只会生效最后一个传入的关键字参数值
  2. 如果没有传入任何关键字参数或作业参数,会出现变量未定义的报错
    修复后的函数参考:
def score(midterm, final, practice, *assignments, **quiz):
    a = 0.25 * midterm
    b = 0.25 * final
    c = 0.2 * practice
    # 计算作业加权分
    if not assignments:
        d = 0
    else:
        avg_assign = sum(assignments)/len(assignments)
        d = 0.05 * avg_assign
    # 计算quiz加权分,和原有逻辑保持一致取第一个关键字参数值
    e = 0
    if quiz:
        e = 0.25 * list(quiz.values())[0]
    return a + b + c + d + e
手动输入参数实现方案
if __name__ == '__main__':
    # 收集3个固定位置参数
    midterm = int(input("请输入期中成绩:"))
    final = int(input("请输入期末成绩:"))
    practice = int(input("请输入练习成绩:"))

    # 收集不定数量的作业成绩,支持任意个输入
    assign_input = input("请输入作业成绩,多个成绩用空格分隔:")
    assignments = list(map(int, assign_input.strip().split()))

    # 收集quiz参数
    quiz_score = int(input("请输入quiz成绩:"))
    quiz_dict = {"quiz": quiz_score}

    # 参数解包调用函数
    total = score(midterm, final, practice, *assignments, **quiz_dict)
    print(f"最终成绩:{total:.2f}")

逻辑说明

  • 作业输入时按照提示输入任意数量的数值,用空格分隔即可,输入1个就对应1次作业,输入3个就对应3次作业,自动适配数量
  • 调用函数时用*对作业列表解包、**对quiz字典解包,完全匹配原函数的参数定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:54:03