Делаем свой кредитный калькулятор на Python
easy

Делаем свой кредитный калькулятор на Python

Простой, но полезный

Сегодня поставим Python на практические рельсы — сделаем простой кредитный калькулятор. В приложении будут поля для годовой процентной ставки, срока и суммы кредита, чтобы рассчитывать ежемесячные платежи и общую сумму. В будущем его можно допилить — добавить возможность досрочного погашения, пересчёт процентов и всё остальное. 

Если вы ни разу не программировали на Python, почитайте сначала это:

Как установить Python на компьютер и начать на нём писать.

Устанавливаем и подключаем библиотеку

Чтобы создать графический интерфейс нашего кредитного калькулятора, используем библиотеку tkinter. Для этого установим её в систему командой в терминале:

pip install tkinter

Если pip не работает, используйте pip3 

pip3 install tkinter

Делаем свой кредитный калькулятор на Python

После этого импортируем библиотеку и подключаем её:

from tkinter import *

Мы уже использовали библиотеку tkinter в других проектах, почитайте, если интересно:

Рисуем интерфейс

Нашему кредитному калькулятору нужны поля для ввода данных и кнопка, по нажатию которой он будет производить расчёты. Для этого мы нарисуем:

  • поле для ввода годовой процентной ставки;
  • поле для ввода количества лет в сроке кредита;
  • поле для ввода суммы кредита;
  • кнопку «Рассчитать».

Получится несложный интерфейс и самый простой калькулятор, но для старта этого достаточно. Разместим эти элементы на форме.

# создаём класс для калькулятора
class LoanCalculator:
    # инициализируем класс
    def __init__(self):
        # стартуем tkinter, чтобы создать окно графического интерфейса
        root=Tk()
        # задаём размеры окна
        root.geometry("500x300")
        # задаём название окна калькулятора
        root.title("Кредитный калькулятор")
        # задаём цвет окна калькулятора, например пыльно-серый
        root.config(bg='#a39ea0')
        # задаём расположение, стиль шрифта и пояснительный текст для поля годовой процентной ставки
        Label(root,text="Годовая ставка, %", font=('Arial,15,bold'),bg='#a39ea0').place(x=10,y=10)
        # задаём расположение, стиль шрифта и пояснительный текст для поля срока кредита
        Label(root, text="Срок, лет", font=('Arial,15,bold'),bg='#a39ea0').place(x=10,y=50)
        # задаём расположение, стиль шрифта и пояснительный текст для поля суммы кредита
        Label(root, text="Сумма кредита", font=('Arial,15,bold'),bg='#a39ea0').place(x=10,y=90)
        # задаём расположение, стиль шрифта и пояснительный текст для вывода ежемесячного платежа
        Label(root, text="Ежемесячный платёж:", font=('Arial,15,bold'),bg='#a39ea0').place(x=10,y=150)
        # задаём расположение, стиль шрифта и пояснительный текст для вывода общей суммы выплаты
        Label(root, text="Общая сумма выплаты:", font=('Arial,15,bold'),bg='#a39ea0').place(x=10,y=190)
        # добавляем поле для ввода годовой процентной ставки
        self.annualinterestVar=StringVar()
        Entry(root, textvariable=self.annualinterestVar,font=('Arial,15,bold')).place(x=220,y=10)
        # добавляем поле для ввода количества лет кредит
        self.numberofyearsVar=StringVar()
        Entry(root, textvariable=self.numberofyearsVar,font=('Arial,15,bold')).place(x=220,y=50)
        # добавляем поле для ввода суммы кредита
        self.loanamountVar=StringVar()
        Entry(root, textvariable=self.loanamountVar,font=('Arial,15,bold')).place(x=220,y=90)
        # добавляем строку вывода расчёта ежемесячного платежа
        self.monthlypaymentVar=StringVar()
        Label(root, textvariable=self.monthlypaymentVar,font=('Arial,15,bold'),bg='#a39ea0').place(x=220,y=150)
        # добавляем строку вывода расчёта общей суммы выплаты
        self.totalpaymentVar=StringVar()
        Label(root, textvariable=self.totalpaymentVar,font=('Arial,15,bold'),bg='#a39ea0').place(x=220,y=190)
        # добавляем кнопку, задаём её расположение, надпись и стиль шрифта
        Button(root, text="Рассчитать",font=('Arial,15,bold'),command=self.calculateloan).place(x=180,y=240)
        # запускаем окно
        root.mainloop()

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

# вызываем класс калькулятора, чтобы запустить программу
LoanCalculator()

Запускаем скрипт и видим готовую форму. Она пока ничего не умеет, но туда уже можно что-то писать:

Делаем свой кредитный калькулятор на Python

Программируем расчёты

Чтобы наш калькулятор работал, нужно указать в коде, что программа должна делать с нашими данными.

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

Используем формулу:

общая сумма выплаты = ежемесячный платёж × 12 × срок

В коде мы используем две команды — float и int. Они работают так: float возвращает значения в десятичном формате, а int — целочисленные. Ещё мы используем форматирование вывода: format(10.2f), так мы получим 10 символов: семь цифр перед запятой, восьмой символ — десятичная и две цифры после неё.

    # определяем функцию расчёта общей суммы выплаты
    def calculateloan(self):
        # определяем формулу, по которой будет рассчитываться ежемесячный платёж по кредиту
        monthlypayment=self.getmonthlypayment
(float(self.loanamountVar.get()),float(self.annualinterestVar.get()) / 1200, int(self.numberofyearsVar.get()))
        self.monthlypaymentVar.set(format(monthlypayment, '10.2f'))
        # определяем формулу, по которой будет рассчитываться общая сумма выплаты по кредиту
        totalpayment=float(self.monthlypaymentVar.get()) * 12 * int(self.numberofyearsVar.get())
        self.totalpaymentVar.set(format(totalpayment, '10.2f'))

Для расчёта ежемесячного платежа используем формулу:

ежемесячный платёж = [сумма кредита × ежемесячная процентная ставка / (1 − 1 / 1 + ежемесячная процентная ставка) ^ количество лет × 12].

    # определяем функцию расчёта ежемесячного платежа
    def getmonthlyPayment(self,loanamount,monthlyinterestrate,numberofyears):
        # определяем формулу, по которой будет рассчитываться ежемесячный платёж
        monthlypayment=loanamount * monthlyinterestrate / (1-1 / (1 + monthlyinterestrate) ** (numberofyears * 12))
        return monthlypayment

Запускаем калькулятор

Проверим программу в деле: введём конкретные значения во все поля и посмотрим, какой у нас получится ежемесячный платёж и сколько денег нам в итоге придётся заплатить.

Вот что будет на старте до нажатия кнопки «Рассчитать»:

Делаем свой кредитный калькулятор на Python

Теперь нажимаем и смотрим на результат:

Делаем свой кредитный калькулятор на Python

Что дальше

Этот калькулятор можно доработать, например добавить такие штуки:

  • кнопку очистки полей; 
  • подсчёт переплаты сверх суммы кредита;
  • расчёт по месяцам, а не по годам; 
  • расчёт платежей и остатка при досрочном погашении части кредита.

А самое главное — проверку на правильность введённых данных. Например, чтобы программа сообщала, если мы вместо цифр введём что-то другое, и подсвечивала поля с ошибочными данными.

Попробуйте сделать это сами, мы в вас верим!

# импортируем библиотеку tkinter
from tkinter import *
# создаём класс для калькулятора
class LoanCalculator:
    # инициализируем класс
    def __init__(self):
        # стартуем tkinter, чтобы создать окно графического интерфейса
        root=Tk()
        # задаём размеры окна
        root.geometry("500x300")
        # задаём название окна калькулятора
        root.title("Кредитный калькулятор")
        # задаём цвет окна калькулятора, например пыльно-серый
        root.config(bg='#a39ea0')
        # задаём расположение, стиль шрифта и пояснительный текст для поля годовой процентной ставки
        Label(root,text="Годовая ставка, %", font=('Arial,15,bold'),bg='#a39ea0').place(x=10,y=10)
        # задаём расположение, стиль шрифта и пояснительный текст для поля срока кредита
        Label(root, text="Срок, лет", font=('Arial,15,bold'),bg='#a39ea0').place(x=10,y=50)
        # задаём расположение, стиль шрифта и пояснительный текст для поля суммы кредита
        Label(root, text="Сумма кредита", font=('Arial,15,bold'),bg='#a39ea0').place(x=10,y=90)
        # задаём расположение, стиль шрифта и пояснительный текст для вывода ежемесячного платежа
        Label(root, text="Ежемесячный платёж:", font=('Arial,15,bold'),bg='#a39ea0').place(x=10,y=150)
        # задаём расположение, стиль шрифта и пояснительный текст для вывода общей суммы выплаты
        Label(root, text="Общая сумма выплаты:", font=('Arial,15,bold'),bg='#a39ea0').place(x=10,y=190)
        # добавляем поле для ввода годовой процентной ставки
        self.annualinterestVar=StringVar()
        Entry(root, textvariable=self.annualinterestVar,font=('Arial,15,bold')).place(x=220,y=10)
        # добавляем поле для ввода количества лет кредит
        self.numberofyearsVar=StringVar()
        Entry(root, textvariable=self.numberofyearsVar,font=('Arial,15,bold')).place(x=220,y=50)
        # добавляем поле для ввода суммы кредита
        self.loanamountVar=StringVar()
        Entry(root, textvariable=self.loanamountVar,font=('Arial,15,bold')).place(x=220,y=90)
        # добавляем строку вывода расчёта ежемесячного платежа
        self.monthlypaymentVar=StringVar()
        Label(root, textvariable=self.monthlypaymentVar,font=('Arial,15,bold'),bg='#a39ea0').place(x=220,y=150)
        # добавляем строку вывода расчёта общей суммы выплаты
        self.totalpaymentVar=StringVar()
        Label(root, textvariable=self.totalpaymentVar,font=('Arial,15,bold'),bg='#a39ea0').place(x=220,y=190)
        # добавляем кнопку, задаём её расположение, надпись и стиль шрифта
        Button(root, text="Рассчитать",font=('Arial,15,bold'),command=self.calculateloan).place(x=180,y=240)
        # запускаем окно
        root.mainloop()
    # определяем функцию расчёта общей суммы выплаты
    def calculateloan(self):
        # определяем формулу, по которой будет рассчитываться ежемесячный платёж по кредиту
        monthlypayment=self.getmonthlypayment
(float(self.loanamountVar.get()),float(self.annualinterestVar.get()) / 1200, int(self.numberofyearsVar.get()))
        self.monthlypaymentVar.set(format(monthlypayment, '10.2f'))
        # определяем формулу, по которой будет рассчитываться общая сумма выплаты по кредиту
        totalpayment=float(self.monthlypaymentVar.get()) * 12 * int(self.numberofyearsVar.get())
        self.totalpaymentVar.set(format(totalpayment, '10.2f'))
    # определяем функцию расчёта ежемесячного платежа
    def getmonthlyPayment(self,loanamount,monthlyinterestrate,numberofyears):
        # определяем формулу, по которой будет рассчитываться ежемесячный платёж
        monthlypayment=loanamount * monthlyinterestrate / (1-1 / (1 + monthlyinterestrate) ** (numberofyears * 12))
        return monthlypayment
# вызываем класс калькулятора, чтобы запустить программу
LoanCalculator()

Код:

Химани Бансал

Текст:

Инна Долога

Редактор:

Михаил Полянин

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Мария Дронова

Соцсети:

Юлия Зубарева

Любишь Python? Зарабатывай на нём!
Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.
Попробовать бесплатно
Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy