2015-03-31 3 views
2

Я должен написать простую программу, чтобы сделать следующее:Кредитные карты баланс упражнения в Python

Принимая следующие входы:

  1. непогашенный остаток на кредитной карте
  2. Годовая процентная ставка как десятичная цифра

Я должен печатать фиксированный ежемесячный платеж и количество месяцев (не более 12 и, возможно, меньше), которое требуется для погашения долга. Я также должен напечатать баланс в конце (вероятно, отрицательное число).

Предполагается, что проценты усугубляются ежемесячно в соответствии с балансом в начале месяца (до оплаты за этот месяц). Ежемесячный платеж должен быть кратным 10 долларов США и должен быть одинаковым за все месяцы. В результате этой схемы баланс может стать отрицательным.

Таким образом, процентная ставка = годовая процентная ставка/12,0
Обновленный баланс каждый месяц = ​​ Старый баланс * (1 + процентная ставка) - минимальный ежемесячный платеж

Теперь, люди, принадлежащие к этой проблеме при условии, тестовый примера для того, что было бы правильная программа:

>>> 
Enter the outstanding balance: 1200 
Enter annual interest rate: 0.18 
RESULT 
Monthly payment to pay off debt in 1 year: 120 
Number of months needed: 11 
Balance: -10.05 
>>> 

Это программа, которую я написал (я установил входы к тому же, как указаны выше, с тем, чтобы увидеть, если программа работает как надо:

## ob = float (raw_input ("Enter the outstanding balance:")) 
##accir = float(raw_input("Enter annual interest rate:")) 

ob = float (1200) 
mp = float (0) 
n = float (0) 

while rb >= 0: 
      rb = ob 
      mp += 10 
      n += 1 
      rb = (rb*(1 + (accir/12.0)**n) -   n*mp) 

print "Result:" 
print "Monthly payment to pay off debt in one year:" , mp 
print "Number of months needed:" , n 
print "Balance:" , rb 

Кажется нормально, но когда я запускаю его я получаю это:

>>> 
Result: 
Monthly payment to pay off debt in one year: 110.0 
Number of months needed: 11.0 
Balance: - 10.0 
>>> 

Что по сравнению с правильным выходом я писал ранее выше, немного отличается.

Извините за беспорядочную запись, я не знаю, как писать код на этом форуме. Кроме того, обратите внимание, что я не писал вопрос и программы точно так же, как и у меня, но более или менее одинаковый.

В чем проблема? Благодарю.

+0

Не отвечая на вопрос, но я не уверен, что вы можете сказать 'month_rate = annual_rate/12' из-за сложного интереса. Например. Если годовая ставка составляла 12%, а мой долг составлял 100 долларов США, то я ожидал, что годовой процент составит 12 долларов. но если вы добавите 1% к балансу в месяц '(100 * 1.01^12)', вы получите процент от $ 12.68. –

+0

@TomDalton Фактически ежемесячная ставка, как я ее написал. Авторы этой проблемы предоставляют эту информацию. – user224530

+0

@ user224530 Я вернулся к последней ревизии. Если вы хотите, чтобы этот ответ был удален, отметьте его и сообщите модератору. – Mailerdaimon

ответ

0

С одной стороны следует выяснить, с чего начать - как разработать ежемесячную ставку по годовой ставке. Общая формула соединения интереса:

At = A0(1 + r)^t 

, где В представляет собой общее количество в момент времени т, А0 была сумма в момент времени 0 и г является скоростью. Перегруппировка для г:

r = (At/A0)^1/t - 1 

Заметим, что при/A0 действует годовая ставка плюс 1, и в этом случае мы хотим т быть 12. Таким образом, способ получить ежемесячную ставку, чтобы указать APR как десятичный, добавьте один, замените его на вышеуказанное соотношение, поднимите его до одной двенадцатой, а затем вычтите.

https://math.stackexchange.com/questions/902687/bactracking-to-find-compound-interest/902693#902693

Во всяком случае, вот ответ:

def main(rb): 
    count = 0 
    while rb > 0: 
     rb = round(rb*(0.18/12 + 1) - 120, 2) 
     count += 1 
     #print(count, rb) 
    return count, rb 

print(main(input('Balance: '))) #Balance: 1200 

Я использовал определение месячной ставки вы получили, потому что вы должны использовать его, даже если он должен читать RB * (1.18 * * (1,0/12)). 1.0 устанавливает истинное деление в python2. Если любая версия запускается в python3, к вводу должна быть применена функция int; python2 предполагает это.

NB Если первоначальный баланс превышает 7999, проценты превысят минимальные платежи, и программа войдет в бесконечный цикл.

Смежные вопросы