2013-04-18 2 views
0

Предположим, у вас есть инвестиционный план, в который вы инвестируете определенную фиксированную сумму в начале каждого года. Вычислить общую стоимость инвестиций в конце прошлого года. Вклад будет представлять собой объем инвестиций в год, процентную ставку и количество лет инвестиций.Будущая стоимость ежегодных инвестиций

Эта программа рассчитывает будущую стоимость постоянных ежегодных инвестиций. Введите ежегодные инвестиции: 200 Введите годовую процентную ставку: +0,06 Введите количество лет: 12 Значение в 12 лет: +3576,427533818945

Я пытался несколько различных вещей, как показано ниже, но мне это не дает 3576,42, это дает мне всего 400 долларов. Есть идеи?

principal = eval(input("Enter the yearly investment: ")) 
apr = eval(input("Enter the annual interest rate: ")) 
years = eval(input("Enter the number of years: ")) 
for i in range(years): 
    principal = principal * (1+apr) 
print("The value in 12 years is: ", principal) 
+6

Кто идея заключается в том, что использовать 'eval' вместо' float'? шлепнуть! –

+0

@gnibbler +1 для указания этого. Нехороший питомец: вы имеете в виду *, чей *, а не * кто есть *. –

+1

@DarshanComputing, конечно. Вы также должны ненавидеть [HTTP_referer] (http://en.wikipedia.org/wiki/HTTP_referer) :) –

ответ

0

Как указано в комментариях, вы не должны использовать eval() здесь. (Более подробную информацию об eval можно найти in the Python Docs). - Вместо этого измените свой код на использование float() или int(), где это применимо, как показано ниже.

Кроме того, в вашем заявлении print() напечатаны скобки и запятая, которые, как я ожидаю, вам не нужны. Я очистил его в коде ниже, но если бы вы хотели, это то, что вы не стеснялись вернуть.

principal = float(input("Enter the yearly investment: ")) 
apr = float(input("Enter the annual interest rate: ")) 

# Note that years has to be int() because of range() 
years = int(input("Enter the number of years: ")) 

for i in range(years): 
    principal = principal * (1+apr) 
print "The value in 12 years is: %f" % principal 
2

Если это ежегодно инвестиции, вы должны добавить его каждый год:

yearly = float(input("Enter the yearly investment: ")) 
apr = float(input("Enter the annual interest rate: ")) 
years = int(input("Enter the number of years: ")) 

total = 0 
for i in range(years): 
    total += yearly 
    total *= 1 + apr 

print("The value in 12 years is: ", total) 

С вашими входами, это выводит

('The value in 12 years is: ', 3576.427533818945) 

Update: Отвечая на вопросы из комментарии, чтобы уточнить, что происходит:

1) Вы может использовать int() для yearly и получить тот же ответ, что хорошо, если вы всегда вкладываете целую валюту. Использование float работает так же хорошо, но также позволяет, например, количество 199.99.

2) += и *= являются удобными сокращениями: total += yearly средства total = total + yearly. Это немного легче набрать, но что более важно, оно более четко выражает смысл. Я прочитал его, как этот

for i in range(years): # For each year 
    total += yearly # Grow the total by adding the yearly investment to it 
    total *= 1 + apr # Grow the total by multiplying it by (1 + apr) 

Чем дольше форма просто не так ясно:

for i in range(years):  # For each year 
    total = total + yearly # Add total and yearly and assign that to total 
    total = total * (1 + apr) # Multiply total by (1 + apr) and assign that to total 
+0

Этот смертный, 'years' должен быть' int() ' – mdierker

+0

@mdierker Спасибо, я действительно исправил это до вашего комментария. Я отправил его перед запуском, и, должно быть, была задержка до того, как SO покажет вам свои изменения. –

+0

Gotcha, nice catch :) – mdierker

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