Неправильно работает формула в программе!

Novichok

Новичок
Пользователь
Янв 4, 2021
19
1
3
Чтобы рассчитать аннуитетный платеж по кредиту существует формула:
Формула.jpg
Я её включил в программу. Но так как нельзя всякие фигурные формулы вставлять в программу, я формулу перевёл в понятный для программы вид:
x = int(s)*(int(p)+(int(p)/((1+int(p))**int(n))-1).
Я не знаю почему программа не правильно считает по этой формуле. Может я неправильно переписал формулу в программу или я перепутал переменные, но программа считает не правильно.
Эту формулу я взял с сайта: Там ещё есть и пример:
Допустим, сумма кредита составляет 100 тысяч рублей, годовая ставка – 10%, а срок займа – 6 месяцев. Ежемесячный платеж составит 17156,14, но проценты будут уменьшаться.
У меня вообще не такой результат.
Вот код (python 3.8; windows 10):
НА ТУПЫЕ НАЗВАНИЯ ПРЕМЕННЫХ НЕ ОБРАЩАЙТЕ ВНИМАНЯ!

Python:
from tkinter import *
from tkinter import messagebox

root = Tk()
root.geometry("600x400")
root.title("...")



log = Label(text="Введите ваши данные\n\n", font=("Arial Bold", 15))

log_log = Label(text="Возраст:", font=("Arial Bold", 10))
log_log1 = Label(text='====>')
log_lodin = Entry()

log_password1 = Label(text="Первоначальная сумма кредита: ",font=("Arial Bold", 10))
log_password2 = Entry(show="*")


log_password3 = Label(text="Ежемесячная ставка по процентам: ",font=("Arial Bold", 10))
log_password4 = Entry(show="*")


log_password5 = Label(text="На сколько месяцев берётся кредит: ",font=("Arial Bold", 10))
log_password6 = Entry(show="*")


button_enter = Button(text="Проверить!", command=lambda: ttt())
button_enter1 = Button(text = "Рассчитать", command = lambda: ttt1(int(log_password2.get()), log_password4.get(), log_password6.get()))
# =========================================================================
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
# =========================================================================
log.pack()

log_log.place(x=60, y=30)
log_lodin.place(x=60, y=60)

log_password1.place(x=60, y=90)
log_password2.place(x=60, y=115)

log_password3.place(x=60, y=140)
log_password4.place(x=60, y=165)

log_password5.place(x=60, y=190)
log_password6.place(x=60, y=215)

log_log1.place(x = 300, y = 60)
button_enter.place(x=500, y= 60)

button_enter1.place(x=500, y=140)

def ttt():
    pop = log_lodin.get()
    if int(pop) >= 18:
        messagebox.showinfo("Одобрено!", "Проверка прошла успешно!")
    else:
        messagebox.showerror("Отказано", "На момент получения кредита вам должно быть не менее 18 лет!")

def ttt1(s,p,n):
    x = int(s)*(int(p)+(int(p)/((1+int(p))**int(n))-1))
    messagebox.showinfo("Выплата", "Вы должны выплачивать:\n", x)


root.mainloop()
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
Python:
def ttt1(s,p,n):
    x = float(s) * (float(p) + (float(p) / ((1 + float(p)) ** float(n) - 1)))
    messagebox.showinfo("Выплата", "Вы должны выплачивать:\n" + str(x))
и на всякий случай уточню, нужно вводить ежемесячную ставку по процентам, для 10 процентов годовых это примерно 0.0083333333333333 (10% / 12)
 

Novichok

Новичок
Пользователь
Янв 4, 2021
19
1
3
Python:
def ttt1(s,p,n):
    x = float(s) * (float(p) + (float(p) / ((1 + float(p)) ** float(n) - 1)))
    messagebox.showinfo("Выплата", "Вы должны выплачивать:\n" + str(x))
и на всякий случай уточню, нужно вводить ежемесячную ставку по процентам, для 10 процентов годовых это примерно 0.0083333333333333 (10% / 12)
А в чем была ошибка? Просто всё равно получается 1000000 :) Я пытался изменить, чтобы ответ сходился с сайтом. Но у меня ничего не получилось...
И ответ который выскакивает всё равно не верный... Я до сих пор не понимаю как работает эта формула. Мне нужно, чтобы программа про вводе чисел 100000 в поле
log_password1 = Label(text="Первоначальная сумма кредита: ",font=("Arial Bold", 10))
log_password2 = Entry(show="*")
Число 10 в поле
log_password3 = Label(text="Ежемесячная ставка по процентам: ",font=("Arial Bold", 10))
log_password4 = Entry(show="*")
Число 6 в поле
log_password5 = Label(text="На сколько месяцев берётся кредит: ",font=("Arial Bold", 10))
log_password6 = Entry(show="*")
Ответ получался - 2936,84
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
формула считает ежемесячный платеж по кредиту, вам же нужно выплату по процентам...
Python:
from tkinter import *
from tkinter import messagebox

root = Tk()
root.geometry("600x400")
root.title("...")

log = Label(text="Введите ваши данные\n\n", font=("Arial Bold", 15))

log_log = Label(text="Возраст:", font=("Arial Bold", 10))
log_log1 = Label(text='====>')
log_lodin = Entry()

log_password1 = Label(text="Первоначальная сумма кредита: ", font=("Arial Bold", 10))
log_password2 = Entry()

log_password3 = Label(text="Годовая ставка по процентам: ", font=("Arial Bold", 10))
log_password4 = Entry()

log_password5 = Label(text="На сколько месяцев берётся кредит: ", font=("Arial Bold", 10))
log_password6 = Entry()

button_enter = Button(text="Проверить!", command=lambda: ttt())
button_enter1 = Button(text="Рассчитать",
                       command=lambda: ttt1(log_password2.get(), float(log_password4.get()) / 100 / 12,
                                            log_password6.get()))
# =========================================================================
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
# =========================================================================
log.pack()

log_log.place(x=60, y=30)
log_lodin.place(x=60, y=60)

log_password1.place(x=60, y=90)
log_password2.place(x=60, y=115)

log_password3.place(x=60, y=140)
log_password4.place(x=60, y=165)

log_password5.place(x=60, y=190)
log_password6.place(x=60, y=215)

log_log1.place(x=300, y=60)
button_enter.place(x=500, y=60)

button_enter1.place(x=500, y=140)


def ttt():
    pop = log_lodin.get()
    if int(pop) >= 18:
        messagebox.showinfo("Одобрено!", "Проверка прошла успешно!")
    else:
        messagebox.showerror("Отказано", "На момент получения кредита вам должно быть не менее 18 лет!")


def ttt1(s, p, n):
    x = float(s) * (float(p) + (float(p) / ((1 + float(p)) ** float(n) - 1)))
    y = x * float(log_password6.get()) - float(log_password2.get())
    messagebox.showinfo("Выплата", "Вы должны выплачивать" + '\n' "ежемесячно:\n" + str(round(x, 2)) + '\n\n' +
                        "выплата по процентам:\n" + str(round(y, 2)))


root.mainloop()
 
Последнее редактирование:

Форум IT Специалистов