вопрос о tkinter, annualInterestRate не определен

#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 , это делает переменную a class 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 после первого цикла.