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

如何在主函数中正确调用套餐计费相关的自定义Python函数?

套餐计费程序函数整合方案

问题概述

我开发了一套用于套餐计费程序的自定义Python函数,需要在主函数中按规则调用完成功能,要求如下:

  1. 输入处理仅可使用getPackage、validPackage、getHours、validHours函数及程序控制结构;
  2. 计费计算仅可使用calculatePkg_A、calculatePkg_B、calculatePkg_C函数及程序控制结构;
  3. 输出需展示所选套餐、使用时长及月度费用。

各函数功能说明:

  • getPackage:获取用户输入的套餐类型(A/B/C);
  • validPackage:验证套餐输入是否为A/B/C;
  • getHours:获取用户输入的使用时长(浮点型);
  • validHours:验证时长是否在0-720之间;
  • calculatePkg_A/B/C:根据对应套餐规则计算月度费用。

当前主函数调用逻辑存在问题,需指导正确整合调用方式,现有代码如下:

def getPackage(v):
    v=str(input("Choose a package. Must be A, B, or C"))

def validPackage(l):
    if l != "A" or l!="B" or l!="C":
        print("Input must be A,B,C. Please choose a valid package")
        
def getthehours(z):
        z=str(input("Enter a number of hours between 0 and 720"))

def validhours(gethours):
    if gethours<0 or gethours>720:
        print("Invalid number. Numbers must be between 0 to 720")
    else:
        print("GOOD HOUR CHOICE")

def calculatepkg_A(hoursprovided):
    if hoursprovided<50:
        print("Your cost is $15 per month")
    elif hoursprovided>50:
        x=hoursprovided-50
        print((2*x)+15)

def calculatepkg_B(hoursprovided):
    if hoursprovided<100:
        print("Your cost is $20 per month")
    elif hoursprovided>100:
        x=hoursprovided-100
        print((1.5*x)+20)

def calculatepkg_C(hoursprovided):
    if hoursprovided<150:
        print("Your cost is $25 per month")
    elif hoursprovided>=150:
        x=hoursprovided-150
        print((1*x)+25)      
    
def main():
    n=str(input("Choose a package. Must be A, B, or C"))
    l=float(input("Choose a number of hours between 0 and 720"))
    getPackage(n)
    validhours(l)
    if n=="A":
        calculatepkg_A(l)
    elif n=="B":
        calculatepkg_B(l)
    elif n=="C":
        calculatepkg_C(l)

原代码问题分析

  1. 函数无返回值:getPackage、getthehours仅修改内部参数(Python参数传递为赋值传递,外部变量不受影响),未返回输入结果,导致主函数无法获取有效输入;
  2. 验证逻辑错误:validPackage用or判断,会导致任何输入都触发错误提示(比如输入"A"时,l!="B"为真,条件成立),应改为and或直接判断是否在合法列表中;
  3. 函数命名不规范:不符合要求的命名(如getthehours应改为getHours,validhours改为validHours),且主函数未调用validPackage验证套餐;
  4. 主函数违规输入:主函数直接调用input获取值,未使用指定的输入处理函数;
  5. 输出不符合要求:计算函数单独打印费用,无法统一展示套餐、时长和费用信息。

修正后的完整代码

def getPackage():
    # 获取套餐输入,返回处理后的大写值
    return input("Choose a package. Must be A, B, or C: ").strip().upper()

def validPackage(package):
    # 验证套餐合法性,返回布尔值
    if package not in ["A", "B", "C"]:
        print("Input must be A,B,C. Please choose a valid package")
        return False
    return True

def getHours():
    # 获取时长输入,转换为浮点型并返回,处理非数字输入
    while True:
        try:
            hours = float(input("Enter a number of hours between 0 and 720: ").strip())
            return hours
        except ValueError:
            print("Please enter a valid number.")

def validHours(hours):
    # 验证时长范围,返回布尔值
    if hours < 0 or hours > 720:
        print("Invalid number. Numbers must be between 0 to 720")
        return False
    return True

def calculatePkg_A(hoursprovided):
    # 返回套餐A的计算费用
    if hoursprovided <= 50:
        return 15.0
    extra_hours = hoursprovided - 50
    return 15 + (2 * extra_hours)

def calculatePkg_B(hoursprovided):
    # 返回套餐B的计算费用
    if hoursprovided <= 100:
        return 20.0
    extra_hours = hoursprovided - 100
    return 20 + (1.5 * extra_hours)

def calculatePkg_C(hoursprovided):
    # 返回套餐C的计算费用
    if hoursprovided <= 150:
        return 25.0
    extra_hours = hoursprovided - 150
    return 25 + (1 * extra_hours)      
    
def main():
    # 循环获取合法套餐输入
    package = getPackage()
    while not validPackage(package):
        package = getPackage()
    
    # 循环获取合法时长输入
    hours = getHours()
    while not validHours(hours):
        hours = getHours()
    
    # 根据套餐计算费用
    if package == "A":
        cost = calculatePkg_A(hours)
    elif package == "B":
        cost = calculatePkg_B(hours)
    else:
        cost = calculatePkg_C(hours)
    
    # 统一输出结果
    print(f"\n套餐选择: {package}")
    print(f"使用时长: {hours:.2f} 小时")
    print(f"月度费用: ${cost:.2f}")

if __name__ == "__main__":
    main()

关键修改说明

  • 输入函数调整:getPackage、getHours改为直接返回输入值,无需传入参数,避免传递无效问题;
  • 验证函数优化:返回布尔值,方便主函数循环判断,直到用户输入合法;
  • 计算函数调整:所有计算函数返回费用数值,由主函数统一组织输出,符合展示要求;
  • 主函数逻辑修正:完全使用指定函数处理输入,循环验证确保合法性,最后统一展示所有信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:55:16