Сегодня поставим Python на практические рельсы — сделаем простой кредитный калькулятор. В приложении будут поля для годовой процентной ставки, срока и суммы кредита, чтобы рассчитывать ежемесячные платежи и общую сумму. В будущем его можно допилить — добавить возможность досрочного погашения, пересчёт процентов и всё остальное.
Если вы только начинаете знакомиться с языком программирования Python, посмотрите наш мастрид — в нём мы собрали самое важное и интересное для старта.
Устанавливаем и подключаем библиотеку
Чтобы создать графический интерфейс нашего кредитного калькулятора, используем библиотеку tkinter. Для этого установим её в систему командой в терминале:
pip install tkinter
Если pip не работает, используйте pip3:
pip3 install tkinter
После этого импортируем библиотеку и подключаем её:
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()
Запускаем скрипт и видим готовую форму. Она пока ничего не умеет, но туда уже можно что-то писать:
Программируем расчёты
Чтобы наш калькулятор работал, нужно указать в коде, что программа должна делать с нашими данными.
Определим функцию для расчёта общей суммы выплаты и переменной ежемесячного платежа. Тут мы будем использовать введённые значения годовой процентной ставки, срока и суммы кредита.
Используем формулу:
общая сумма выплаты = ежемесячный платёж × 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
Запускаем калькулятор
Проверим программу в деле: введём конкретные значения во все поля и посмотрим, какой у нас получится ежемесячный платёж и сколько денег нам в итоге придётся заплатить.
Вот что будет на старте до нажатия кнопки «Рассчитать»:
Теперь нажимаем и смотрим на результат:
Что дальше
Этот калькулятор можно доработать, например добавить такие штуки:
- кнопку очистки полей;
- подсчёт переплаты сверх суммы кредита;
- расчёт по месяцам, а не по годам;
- расчёт платежей и остатка при досрочном погашении части кредита.
А самое главное — проверку на правильность введённых данных. Например, чтобы программа сообщала, если мы вместо цифр введём что-то другое, и подсвечивала поля с ошибочными данными.
Попробуйте сделать это сами, мы в вас верим!
# импортируем библиотеку 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()