内部检查系统错误 - 传递命令行参数

您好,我正在 HyperSkill 的信用计算器项目工作,在检查信用计算器最后阶段的代码结果时,当我尝试检查它时,我收到“内部系统检查错误”。该代码正在我的 IDE(pycharm) 上运行,但不知何故出现“内部系统检查错误”。您能帮忙解决一下吗?

项目描述:本阶段需要实现以下功能:

计算差异化支付。为此,用户可以运行指定利息、周期数和信用本金的程序。能够计算与前一阶段相同的年金支付值(本金、期数和支付金额)。用户使用命令行参数指定所有已知参数,因此将会有一个未知参数。这是用户想要计算的值。处理无效参数。如果参数无效,最好显示错误消息“参数不正确”。程序的最终版本应该可以从命令行运行并解析以下参数:

  • --type,表示支付类型:“annuity”或“diff”(有区别的)。如果 --type 既没有指定为“annuity”也没有指定为“diff”,或者根本没有指定,则显示错误消息。

python Creditcalc.py --principal=1000000 --periods=60 --interest=10 参数错误

  • --付款,指每月付款。对于--type=diff,每月的付款额不同,因此我们无法计算期数或本金,因此它与-- payment 的组合也是无效的:

python Creditcalc.py --type=diff --principal=1000000 --interest=10 -- payment=100000 参数错误

  • --principal 用于计算两种类型的付款。您可以通过了解利息、年金付款和期数来获得其价值。

  • --periods 参数表示偿还信用所需的月数和/或年数。它是根据利息、年金支付和本金计算的。

  • --利息指定时不带百分号。请注意,它可以接受浮点值。我们的信用计算器无法计算利息,因此这些参数不正确:

python Creditcalc.py --type=annuity --principal=100000 -- payment=10400 --periods=8 参数错误

我的代码:

# Stage 4/4 of the credit calculator project

import sys

import math


args = sys.argv


if len(sys.argv) == 5:

    type1 = sys.argv[1].split('=')[1]

    credit_principal = int(sys.argv[2].split('=')[1])

    periods = int(sys.argv[3].split('=')[1])

    credit_interest = float(sys.argv[4].split('=')[1])

    nominal_interest = credit_interest / (12 * 100)


    if type1 == 'diff' or type1 == 'annuity' and credit_principal > 0 \

            and credit_interest > 0 and periods > 0:


        if type1 == "diff":


            sum_diff_payments = 0

            for i in range(1, periods + 1):

                montly_diff_payment = math.ceil(credit_principal / periods + nominal_interest * (

                        credit_principal - credit_principal * (i - 1) / periods))

                sum_diff_payments += montly_diff_payment

                print(f"Month {i}: payment is {montly_diff_payment}")

            print("\nOverpayment =", int(sum_diff_payments - credit_principal))



一只萌萌小番薯
浏览 153回答 2
2回答

守着星空守着你

我合理的解释是,它的发生是由于无限循环,很可能是等待解析系统参数向量时出现错误。这里也提到了同样的问题(信用计算器阶段 4 - 内部系统检查错误),但没有提出解决方案。不要通过命令行解析输入,而是尝试使用argparse等模块并预设输入的值。这是一个脱离上下文的示例,展示了如何使用它import argparse    # check command line optionsparser = argparse.ArgumentParser()parser.add_argument("--type", dest="type_of_payment", type=str, choices=["diff", "annuity"], required=True, help="Add some help text here")parser.add_argument("--periods", dest="period_count", type=int, required=True)parser.add_argument("--payment", dest="monthly_payment", type=float, required=True)parser.add_argument("--interest", dest="credit_interest", type=float, required=True)parser.add_argument("--principal", dest="credit_principal", type=float, required=True)args = parser.parse_args()# show the valuesprint(f"Type of payment: {args.type_of_payment}")print(f"Periods: {args.period_count}")print(f"Payment: {args.monthly_payment}")print(f"Interest: {args.credit_interest}")print(f"Principal: {args.credit_principal}")

慕斯709654

终于我找到问题所在和解决办法了!如 HyperSkill 项目示例所示 - 正确的参数可以是五个,并且它们可以是不同的元素。例子:> python creditcalc.py --type=annuity --principal=1000000 --periods=60 --interest=10和> python creditcalc.py --type=annuity --payment=8722 --periods=120 --interest=5.6是正确的输入,注意元素的差异。第一个中没有付款参数,第二个中有主要参数。因此,根据输入参数的类型,其顺序将不同,但长度相同。首先,需要使用 argparser 声明所有参数并设置 required=Falseparser = argparse.ArgumentParser()parser.add_argument("--type", type=str, choices=["diff", "annuity"], required=False)parser.add_argument("--principal", type=float, required=False)parser.add_argument("--periods", type=int, required=False)parser.add_argument("--payment", type=float, required=False)parser.add_argument("--interest", type=float, required=False)读取变量的参数:args, leftovers = parser.parse_known_args()然后找出传递了哪些参数 - 要么你需要计算> python creditcalc.py --type=annuity --payment=8722 --periods=120 --interest=5.6或者> python creditcalc.py --type=diff --principal=1000000 --payment=104000或者> python creditcalc.py --type=annuity --principal=500000 --payment=23000 --interest=7.8您可以使用简单的 if 语句来检查它,如下所示:if args.type is not None and args.principal is not None and args.periods is not None and args.interest is not None:passelif args.type is not None and args.payment is not None and args.periods is not None and args.interest is not None:pass
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python