2012-10-16 7 views
6

Sono un principiante in Python e sto lavorando a un compito. Continuo a ricevere TypeError: unsupported operand type(s) for -: 'int' and 'function' anche dopo aver cercato l'errore e aver applicato le correzioni suggerite. Non sto cercando nessuno che mi dia una soluzione, ma gradirei una seconda occhiata. Mi manca qualcosa ma non so cosa. Questa è la sezione del codice che sto avendo problemi con:Tipo PythonErrore: tipi di operando non supportati per -: 'int' e 'function'

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) 

Questo è l'intero errore che ottengo:

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 <module> 
    newbalance = ((previousbalance - minMonPay) * (monInt)) 
TypeError: unsupported operand type(s) for -: 'int' and 'function' 

Mi piacerebbe davvero apprezzare una visione chiara. Grazie.

risposta

5

Per chiamare una funzione è necessario aggiungere il paren- sore dopo il nome della funzione, nonché i parametri richiesti.

In queste due linee

minMonPay = minimumMonthlyPayment 
monInt = monthlyInterest 

assegnate le funzioni ai nomi minMonPay, monInt, ma in realtà non li chiami. Piuttosto, si avrebbe bisogno di scrivere qualcosa di simile:

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

Questa definizione

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

ti dà una funzione che prende un parametro e lo chiama previousBalance. Non ha nulla a che fare con la variabile creata in precedenza nel codice. In effetti, ti suggerisco di rinominarlo, può solo servire a confondervi come un principiante.

Inoltre, le funzioni che hai creato sono così semplici, e utilizzate solo una volta ciascuna, che potrebbe essere nel tuo interesse rimuoverle e incorporare il codice.

# 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 

non dimenticare di aggiornare la linea che utilizza in modo non corretto la funzione minimumMonthlyPayment se si fa questo.

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

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

Immagino di non avere una solida conoscenza su quando usare i metodi.Ho preso il tuo suggerimento e rimosso, ma ora non sta chiedendo alcun input. Non ho rimosso tutti i vecchi codici, ho appena commentato per ora. e questo è quello che ho: – KMarciszewski

+1

@KMarciszewski ha aggiunto un'altra cosa. Se si verificano nuovi problemi, si prega di inviare il messaggio di errore –

+0

Al momento non ricevo errori. Non sto ottenendo nulla. Non sta chiedendo input o altro. – KMarciszewski

0

Penso che il problema sia con questa riga minMonPay = minimumMonthlyPayment mi sembra che tu stia assegnando una variabile a un metodo piuttosto che chiamare il metodo.

+0

Grazie a tutti per il vostro aiuto. Come dichiarato da eakron, il mio problema è stato risolto. ma ora ne ho uno nuovo. Ho un'ultima domanda per questo post, puoi suggerire dei buoni libri Python che potrei leggere per aiutarmi a ottenere una base più solida? Grazie ancora. – KMarciszewski

+0

@KMarciszewski [Learn Python The Hard Way] (http://learnpythonthehardway.org/) è probabilmente il miglior libro gratis che si possa ottenere. Non dimenticare di accettare una risposta facendo clic sul segno di spunta. –

0

Guardando il tuo codice sembra che tu stia assegnando una funzione a una variabile e poi provando a meno una funzione da un valore.

Si definisce la funzione 'minimumMonthlyPayment (previousbalance)', ma poi si assegna la funzione alla variabile 'minMonPay = minimumMonthlyPayment'. Quindi, successivamente, dici previousBalance - minMonPay. Quello che penso si intende fare era:

minMonPay = minimumMonthlyPayment (previousbalance)

Speranza che aiuta.

Problemi correlati