0

オンラインコース(Python入門)の問題で少し問題があります。基本的に、残高と年利が与えられた場合、バイナリ検索を使用して毎月最低の固定支払いを見つけ、1年の債務を清算するように指示されます(0.01ドルに四捨五入)。私のソリューションをオンライン採点者にアップロードすると、次のエラーのみが表示されます。

「ソリューションの実行に問題がありました。ソリューションを実行できませんでした。」

私はおそらく無限ループに入っていますか?もしそうなら、私はその方法がよくわかりません。元のコードは以下に掲載されています。これを読んでくれてありがとう!

MonthlyInterestRate = annualInterestRate/12
month = 1
LB = balance/12
UB = balance*(2.7/12)
check = balance
while abs(balance) > 10:
    payment = (LB + UB)/2
    while month <= 12:
        balance = (balance - payment)*(1 + MonthlyInterestRate)
        month = month + 1
    if balance > 10:
        LB = payment
        balance = check
    elif balance < -10:
        UB = payment
        balance = check
    else:
        print('Lowest Payment: ' + str(payment))
        break
4

1 に答える 1

2

考えられる原因は、内側のwhileループの後に月の値をリセットしないことであると思われます。つまり、innerが一度実行されると、二度と実行されることはありません。これは、バランスの値が変化せず、無限ループに陥ることを意味します。

月を使用して設定された回数だけ反復するので、実際には内部ループを次のように変更する必要があります。

for m in range(month):
    balance = (balance - payment)*(1 + MonthlyInterestRate)

編集:

それをスクラッチします。関数をいじってみると、開始バランスが13より大きい場合、関数はすぐにいくつかに収束するようです。バランスが10未満の場合、関数はバランスを減らし、確実に終了しません。バランスが13未満の場合、1回の反復で終了するようです。

そして、私はさまざまな年利で関数をテストしましたが、結果にまったく違いはありません。収束数は開始バランスの約90%のようです。これは1つの中断された関数です。

于 2012-10-15T22:16:29.113 に答える