2017-01-18 5 views
-1

私は、上のクラスで定義されたいくつかの関数を使用するAccountクラスを作成することになっています。私は撤退クラスでのエラーチェックに問題があります。クラス内のエラーチェック

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

は、あなたのどのようにあなたが希望の例を与えることができます:代わりに'Error'あなたは例外引き上げを検討すべきである返すので'withdraw()'を呼び出しますか? –

+0

私はOP – Andrew

+0

を編集しましたwithdraw機能でamountの値を印刷すると、何が得られますか? – Zeokav

答えて

2

あなたが正しくあなたの__gt__内の「バランス」を計算していないので、実際にそれがあります。

ドルは100を掛けする必要があります。

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

オプション:

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

私はそれが別の場所で間違っていたことを知っています。本当にありがとう! – Andrew

+0

@Andrew私は答えを更新しました、私は間違った演算子を使用しました。 :( – MSeifert

関連する問題