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

Python调用comput()报缺少必填位置参数r、h错误如何解决

报错根因

你现在碰到的报错是两个代码写法问题叠加导致的:

  1. 自定义模块program5_1_module末尾多写了一行无参调用comput()。Python在导入模块时,会从上到下执行模块里所有写在顶层的代码,你主程序刚执行import program5_1_module这行,就会自动跑这行comput(),但你定义的comput函数明确要求传入r、h两个位置参数,无参调用直接就触发了你看到的TypeError: comput() missing 2 required positional arguments: 'r' and 'h'报错,这是当前报错的直接诱因。
  2. 就算你删掉了这行多余的调用,主程序还会触发第二个错误:你用import 模块名的方式导入时,模块内的函数属于模块独立命名空间,直接在主程序里写comput(rate, hours)会报NameError,找不到这个函数。另外你在pay()函数里把计算得到的薪资变量也命名为pay,和函数名重名,虽然不会立刻报错,但属于容易出问题的坏写法。
修正方案

按下面的步骤改就能正常运行:

  • 第一步:删掉program5_1_module文件末尾多余的comput()调用。如果需要在模块文件里写自测代码,一定要放到if __name__ == '__main__':代码块里,这样只有直接运行这个模块文件时才会执行自测逻辑,被其他文件导入时不会触发。
  • 第二步:修正主程序里comput函数的调用方式,要么在调用时加上模块名前缀,要么调整导入语句直接把函数导入当前命名空间。
  • 可选优化:把pay()函数里存薪资的变量改个名字,不要和函数同名;主程序的入口逻辑也放到if __name__ == '__main__':块里,避免被其他文件导入时自动执行。
修正后完整代码

模块文件 program5_1_module.py

def comput(r, h):
    if h <= 40:
        p = r * h
    else:
        p = r * 40 + (r * 1.5 * (h - 40))
    return p

# 模块内自测代码,被导入时不会执行
if __name__ == '__main__':
    # 可以在这里写测试逻辑,比如测试计算45小时时薪20的薪资:
    # print(comput(20, 45))
    pass

主程序文件

import program5_1_module


def main():
    pay()
    pay()
    pay()

def pay():
    name = input('Enter employee name: ')
    rate = float(input(f'Enter hourly rate for {name}: '))
    hours = float(input(f'Enter hours for {name} this week: '))

    # 加模块前缀调用函数,同时修改变量名避免和函数重名
    total_pay = program5_1_module.comput(rate, hours)
    print(f'Pay for {name} is ${total_pay:,.2f}')


if __name__ == '__main__':
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:21:19