亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

內部檢查系統錯誤 - 傳遞命令行參數

內部檢查系統錯誤 - 傳遞命令行參數

一只萌萌小番薯 2023-06-27 17:25:52
您好,我正在 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 projectimport sysimport mathargs = sys.argvif 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))
查看完整描述

2 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

我合理的解釋是,它的發生是由于無限循環,很可能是等待解析系統參數向量時出現錯誤。這里也提到了同樣的問題(信用計算器階段 4 - 內部系統檢查錯誤),但沒有提出解決方案。

不要通過命令行解析輸入,而是嘗試使用argparse等模塊并預設輸入的值。

這是一個脫離上下文的示例,展示了如何使用它

import argparse

? ??

# check command line options

parser = 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 values

print(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}")


查看完整回答
反對 回復 2023-06-27
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

終于我找到問題所在和解決辦法了!如 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=False


parser = 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:

pass

elif args.type is not None and args.payment is not None and args.periods is not None and args.interest is not None:

pass


查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號