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

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
添加回答
舉報