код в функцию def - PullRequest
       5

код в функцию def

1 голос
/ 06 августа 2020

Я новичок в Python и пытаюсь решить одно из моих упражнений: Ниже приведен код, описывающий рост денег, который начинался со 100 долларов и который со временем растет со скоростью 3% в год. Баланс в конце данного года равен балансу * ставка предыдущего года.

balance = 100.0
rate = 0.03

print(0, round(balance,2))
for n in range(1,11):
    balance = round(balance * (1 + rate), 2)
    print(n, round(balance,2))

Я получаю желаемый результат, распечатанный каждый год в течение 10 лет. Теперь, как мне взять приведенный выше код и превратить его в функцию с помощью следующих инструкций? :

Напишите функцию с именем complex, которая принимает три входа: баланс, скорость и num_periods. Эта функция должна принимать начальный баланс, фиксированную процентную ставку и количество периодов времени, за которые должен быть начислен баланс. Вы захотите, чтобы ваша функция возвращала текущий баланс (т.е. сумму основной суммы плюс все начисленные проценты) в конце функции, чтобы вы знали, сколько у вас денег, если вы хотите их реинвестировать.

Полагаю, я должен получить тот же результат, что и в приведенном выше коде?

Ответы [ 6 ]

1 голос
/ 07 августа 2020

Попробуйте следующее:

def compound(balance, rate, num_periods):
    for i in range(num_periods + 1):
        print(round(balance * (1 + rate)**i, 2))


print(compound(100, 0.03, 10))
1 голос
/ 06 августа 2020

Другой способ go - использовать lambda:

compound = lambda balance, rate, num_periods: balance * ( 1 + rate)**num_periods

Использование:

print (round(comp_interest(100.0,0.03,10), 2))

Поскольку лямбда-функция для вас неприемлема, вот функция для форматированного вывода введите подсказки и строки документации:

def compound(balance: float, rate: float, num_periods: float):
    """Calculate balance with compund interest

    Keyword arguments:

    balance: starting balance
    rate: interest rate(1 > rate > 0)
    num_periods: number of interest num_periods

    """
    for n in range(1, num_periods+1):
        balance *= (1 + rate)
        print(f"{n:2}, {round(balance,2)}") 
    return round(balance, 2)

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

1 голос
/ 06 августа 2020

Что-то вроде ...

def compound(balance, rate, num_periods):
    return balance * (1 + rate)**num_periods

print(compound(100, 0.03, 10))

Это основная c временная стоимость денег. Обратите внимание, что num_periods в этом случае ежегодно (как вы сказали, 10 лет).

1 голос
/ 06 августа 2020

Три ваших входа - это баланс, ставка и num_periods, которые соответствуют переменным balance, rate и 2-му числу в методе диапазона. Ваша функция должна выглядеть очень похоже на приведенный выше код, за исключением тех переменных, которые являются входами функции:

def compound(balance, rate, num_periods):
    for n in range(1, num_periods):
        balance = round(balance * (1 + rate), 2)
    
    return round(balance, 2)

Обратите внимание, что использование функции round внутри for-l oop может привести к ошибкам округления. Чтобы избежать этого, возьмите нашу функцию round внутри for-l oop

0 голосов
/ 07 августа 2020

Tahnks @tinstaafl, я не могу использовать lamda, так как это не часть упражнения. Этот код возвращает почти то, что мне нужно, хотя его следует немного сместить, но я не могу понять, как.

def compound(balance, rate, num_periods):
for n in range(1, num_periods):
    balance = round(balance * (1 + rate), 2)
    print(n, round(balance,2)) 
return round(balance, 2)
print(compound(100, 0.03, 10))

Мой желаемый результат:

0 100.0
1 103.0
2 106.09
3 109.27
4 112.55
5 115.93
6 119.41
7 122.99
8 126.68
9 130.48
10 134.39
0 голосов
/ 07 августа 2020

Спасибо, ребята. Очень полезно. Я тестировал приведенный ниже код, и он вернул одно значение по желанию.

def compound(balance, rate, num_periods):
for n in range(1, num_periods):
    return balance * (1 + rate)**num_periods
print(compound(100, 0.03,10))

Что мне не хватает, если бы я возвращал промежуточные итоги, начиная с 0-10 лет. Это будет выглядеть так:

0 100.0
1 103.0
2 106.09
3 109.27
4 112.55
5 115.93
6 119.41
7 122.99
8 126.68
9 130.48
10 134.39
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...