#python #tkinter
#python #tkinter
Вопрос:
Мне нужна некоторая помощь с моим кодом, мое задание — рассчитать ежемесячный платеж и общий платеж с заданным процентом. Пользователь вводит сумму кредита и годы. Затем программа отображает платежи в окне с использованием tkinter до тех пор, пока процент не достигнет 8,0.
Моя проблема в том, что я не могу заставить свою программу отображать проценты, она отображает только 0.0, но выдает ошибку «annualInterestRate не определен», программа отлично отображает ежемесячный и общий платеж, но только в первой строке и не продолжает показывать остальные платежи.
Я действительно новичок в программировании, поэтому приветствуются любые советы.
Вот ссылка на полный файл:https://pastebin.com/AUicQzu0
def Calculate(self):
monthlyPayment = self.getMonthlyPayment(
float(self.loanamountVar.get()),
int(self.yearsVar.get()),
float(self.annualInterestRateVar.get()))
self.monthlyPaymentVar.set(format(monthlyPayment, '10.2f'))
totalPayment = float(self.monthlyPaymentVar.get()) * 12 * int(self.yearsVar.get())
self.totalPaymentVar.set(format(totalPayment, '10.2f'))
self.annualInterestRateVar.set(annualInterestRate)
def getMonthlyPayment(self, loanamount, years, annualInterestRate):
annualInterestRate = 5.0
while annualInterestRate <= 8.0:
monthlyInterestRate = annualInterestRate / 1200
monthlyPayment = loanamount * monthlyInterestRate / (1 - 1 / (1 monthlyInterestRate) ** (years * 12))
annualInterestRate = 1.0 / 8
return monthlyPayment
Комментарии:
1. Ошибка, похоже, говорит правду: внутри
Calculate
вы не определили переменную с именемannualInterestrate
. Как вы думаете, какое значение оно должно иметь?2. Я не совсем понимаю
self.annualInterestRateVar.get()
суть. Эту информацию некуда поместить в ваш графический интерфейс. Разве это не должна быть просто обычная переменная, а неtkinter.DoubleVar()
?3. встроенные функции set(), setatrr(), getattr().
4. Измените на
self.annualInterestRate = 5.0
, это делает переменную aclass member
.
Ответ №1:
В последней строке Calculate
вы пытаетесь получить значение из переменной annualInterestRate
и присвоить self.annualInterestRateVar
self.annualInterestRateVar.set(annualInterestRate)
Но annualInterestRate
это локальная переменная, которая существует только в Calculate
и не имеет ничего общего с локальной переменной annualInterestRate
, которая существует в getMonthlyPayment
Итак, вы пытаетесь получить значение из переменной annualInterestRate
, но вы не присвоили никакого значения annualInterestRate
в Calculate
.
Для Python вы пытаетесь получить значение из переменной, которую вы никогда не создавали. Итак, Python отображает
annualInterestRate is not defined
Я не знаю, какое значение вы пытаетесь ввести self.annualInterestRateVar.set(...)
. Если это значение из локальной переменной, annualInterestRate
которая существует в getMonthlyPayment
, то, возможно, вам следует вернуть его из getMonthlyPayment
return monthlyPayment, annualInterestRate
и проверка в Calculate
monthlyPayment, annualInterestRate = self.getMonthlyPayment(...)
Кстати: у вас неверный отступ в while
цикле в getMonthlyPayment
, и он завершится getMonthlyPayment
после первого цикла.