2017-01-18 2 views
-1

Je suis censé créer une classe Account qui utilise certaines des fonctions définies dans la classe au-dessus. J'ai des problèmes avec la vérification des erreurs dans ma classe de retrait.Vérification d'erreur dans une classe

def withdraw(self, amount): 
    if amount > self.money: 
     return 'Error'  
    self.money -= amount 

>>> a = Money(5,5) 
>>> b = Money(10,1) 
>>> acct1 = Account('Andrew', a) 
>>> print(acct1) 
Andrew's account balance is $5.05 
>>> c = Money(3,50) 
>>> acct1.deposit(c) 
>>> print(acct1) 
Andrew's account balance is $8.55 
>>> acct1.withdraw(b) 
>>> print(acct1) 
Andrew's account balance is $-2.54 

La sortie devrait être Erreur, mais elle calcule simplement et me donne un solde négatif.

Le code entier est ici:

class Money: 
    def __init__(self, dollars = 0, cents = 00): 
     'constructor' 
     self.dollars = dollars 
     self.cents = cents 

     if self.cents > 99: 
      self.dollars += 1 
      self.cents = self.cents - 100 


    def __repr__(self): 
     'standard representation' 
     return 'Money({}, {})'.format(self.dollars,self.cents) 

    def __str__(self): 
     'returns a string representation of ($dollars.cents)' 
     if self.cents < 10: 
      return '${}.0{}'.format(self.dollars, self.cents) 
     else: 
      return '${}.{}'.format(self.dollars, self.cents) 


    def __add__(self, new): 
     'Adds two money objects together' 
     d = self.dollars + new.dollars 
     c = self.cents + new.cents 
     return Money(d,c) 


    def __sub__(self, new): 
     'Subtracts two money objects' 
     d = self.dollars - new.dollars 
     c = self.cents - new.cents 
     return Money(d,c) 

    def __gt__(self, new): 
     'computes greater then calculations' 
     a = self.dollars + self.cents 
     b = new.dollars + new.cents 
     return a > b 


class Account: 

    def __init__(self, holder, money = Money(0,0)): 
     'constructor' 
     self.holder = holder 
     self.money = money 


    def __str__(self): 

     return "{}'s account balance is {}".format(self.holder, self.money) 

    def getBalance(self): 
     return self.money 


    def deposit(self, amount): 
     self.money = self.money + amount 


    def withdraw(self, amount): 
     if amount > self.money: 
      return 'Error'  
     self.money -= amount 
+0

peut vous donner un exemple de la façon dont vous appelez 'retirer()'? –

+0

J'ai modifié l'OP – Andrew

+0

Si vous imprimez la valeur du montant dans la fonction de retrait, qu'obtenez-vous? – Zeokav

Répondre

2

En fait, c'est parce que vous ne calcule pas le « équilibre » dans votre __gt__ correctement.

Les dollars devrait être multiplié par 100:

def __gt__(self, new): 
    a = self.dollars * 100 + self.cents 
    b = new.dollars * 100 + new.cents 
    return a > b 

En option: Au lieu de revenir 'Error' vous devriez envisager d'augmenter une exception:

def withdraw(self, amount): 
    if amount > self.money: 
     raise ValueError('Not enough money') 
    self.money -= amount 
+0

Je savais que quelque chose n'allait pas ailleurs. Merci beaucoup! – Andrew

+0

@Andrew J'ai mis à jour la réponse, j'ai utilisé le mauvais opérateur. :( – MSeifert