2017-01-18 3 views
-1

Я должен создать класс учетной записи, который использует некоторые функции, определенные в классе над ним. У меня возникают проблемы с проверкой ошибок в моем классе.Проверка ошибок внутри класса

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 

Выход должен быть ошибкой, но вместо этого он просто вычисляет и возвращает отрицательный баланс.

Весь код здесь:

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

Может ли ваш привести пример того, как вы бы вызвать 'снять()'? –

+0

Я отредактировал OP – Andrew

+0

Если вы печатаете значение суммы в функции снятия, что вы получаете? – Zeokav

ответ

2

На самом деле это происходит потому, что вы не вычислить «баланс» внутри __gt__ правильно.

доллары должны быть умножены на 100:

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

Дополнительно: Вместо возвращения 'Error' вы должны рассмотреть вопрос о повышении исключение:

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

Я ЗНАЛ, что это было что-то неправильно в другом месте. Спасибо! – Andrew

+0

@ Andrew Я обновил ответ, я использовал неправильного оператора. :( – MSeifert

Смежные вопросы