Python TypeError: tipo (s) de operando no compatibles para -: ‘int’ y ‘function’

Soy un principiante en Python y estoy trabajando en una tarea. Sigo recibiendo TypeError: unsupported operand type(s) for -: 'int' and 'function' incluso después de investigar el error y aplicar las correcciones sugeridas. No estoy buscando a nadie que me dé una solución, pero agradecería una segunda mirada. Me estoy perdiendo algo pero no sé qué. Esta es la sección de código con la que tengo problemas:

 month = 0 interestYDT = 0 balance = int(raw_input ("Enter balance on credit card: ")) annualInterestRate = float(raw_input ("Enter annual interest rate as a decimal: ")) monthlyPaymentRate = float(raw_input ("Enter minimum monthly payment rate as a decimal: ")) previousbalance = balance # def monthlyInterestRate(annualInterestRate): return float(annualInterestRate/12) # if month <= 12: def minimumMonthlyPayment(previousbalance): return (previousbalance * monthlyPaymentRate) def monthlyInterest(monthlyInterestRate): return (1 + monthlyInterestRate) minMonPay = minimumMonthlyPayment monInt = monthlyInterest newbalance = ((previousbalance - minMonPay) * (monInt)) interestYDT = (interestYTD + montInt) previousbalance = (newbalance) print '' print ('Month:' (month)) print ('Minimum monthly payment: $ ' (round(minimumMonthlyPayment, 2))) print ('Remainging balance: $ ' (round(newbalance, 2))) print ' ' month = (month + 1) 

Este es todo el error que recibo:

 Traceback (most recent call last): File "C:/Users/Karla/Documents/_MIT 600X Introduction to CS and Prog/Assignments/Week2/kmarciszewski_week2_Problemset_Problem1.py", line 33, in  newbalance = ((previousbalance - minMonPay) * (monInt)) TypeError: unsupported operand type(s) for -: 'int' and 'function' 

Realmente apreciaría cualquier idea. Gracias.

Para llamar a una función, debe agregar parens después del nombre de la función, así como cualquier parámetro requerido.

En estas dos lineas

 minMonPay = minimumMonthlyPayment monInt = monthlyInterest 

asigna las funciones a los nombres minMonPay, monInt, pero en realidad no las llama. Más bien, necesitarías escribir algo como:

 minMonPay = minimumMonthlyPayment(previousBalance) monInt = monthlyInterest(monthlyInterestRate) 

Esta definicion

 def minimumMonthlyPayment(previousbalance): return (previousbalance * monthlyPaymentRate) 

le da una función que toma un parámetro y lo llama previoBalanceo. No tiene nada que ver con la variable que creó anteriormente en su código. De hecho, te sugiero que cambies el nombre, solo sirve para confundirte como principiante.

Además, las funciones que ha creado son tan simples, y solo se usan una vez cada una, que puede ser de su interés eliminarlas e insertar el código.

 # OLD CODE def minimumMonthlyPayment(previousbalance): return (previousbalance * monthlyPaymentRate) def monthlyInterest(monthlyInterestRate): return (1 + monthlyInterestRate) minMonPay = minimumMonthlyPayment monInt = monthlyInterest # NEW CODE minMonPay = previousbalance * monthlyPaymentRate monInt = 1 + monthlyInterestRate 

No olvide actualizar la línea que utiliza incorrectamente la función de pago mínimo mensual si hace esto.

 # OLD CODE print ('Minimum monthly payment: $ ' (round(minimumMonthlyPayment, 2))) # NEW CODE print ('Minimum monthly payment: $ ' (round(minMonPay, 2))) 

Creo que el problema es con esta línea minMonPay = minimumMonthlyPayment , me parece que está asignando una variable a un método en lugar de llamar al método.

Observa tu código y parece que estás asignando una función a una variable y luego intentas restar una función de un valor.

Usted define la función ‘pago mensual mínimo (balance anterior)’, pero luego asigna la función a la variable ‘pago minimo = pago mensual mínimo’. Luego más tarde dices anteriorBalance – minMonPay. Lo que creo que querías hacer era:

minMonPay = pago mensual mínimo (balance previo)

Espero que ayude.