Всегда есть место для улучшений - хотя SO не совсем подходящее место - вы можете проверить правила помолвки в http://codereview.stackexchange.com и спросить там. Сначала прочитайте правила, опубликуйте их позже или они быстро будут закрыты. На SO мы в основном исправляем неработающий код.
В вашем коде есть некоторые недостатки - особенно на стороне "доверяйте вводу пользователя" - поэтому некоторые улучшения:
- если на python 3.6 использовать строковую литеральную интерполяцию
- Защита от злонамеренных пользователей, которые снимают отрицательные числа - также защищает ваших клиентов от внесения отрицательных чисел
- упростить тестирование, используя списки ( DRY-принцип ) и циклы
- привязать ваши данные к вашему уникальному идентификатору учетной записи - например, номер счета и использование диктов для присвоения каждой транзакции правильному счету вместо того, чтобы полагаться на «заказ» или что-то подобное. В реальном времени каждая транзакция также имеет уникальные идентификаторы для , какой банк использовать и , какой счет использовать .
Читает:
class Account:
# constructor
def __init__(self, name, account_number, balance):
self.name = name
self.account_number = account_number
self.balance = balance
# returns string representation of object
def __str__(self):
return f"Account Name: {self.name}\n" + \
f"Account Number: {self.account_number}\n" + \
f"Account Balance: ${self.balance:.2f}\n"
# add given amount to balance
def deposit(self, amount):
if amount <= 0:
raise ValueError("Unable to deposit negative or zero amounts\n")
self.balance += amount
return str(self)
# subtract amount and fee from balance
def withdraw(self, amount, fee):
if amount <= 0:
raise ValueError("Unable to withdraw negative or zero amounts\n")
self.balance = self.balance - amount - fee
return str(self)
Некоторое использование:
accounts = {90453889:Account('Guy Mann', 90453889, 100),
83504837:Account('Donald Duck', 83504837, 100),
74773321:Account('Joe Smith', 74773321, 100)}
# explicitly assign each transaction to the account by accountNr
deposits = [(90453889, 25.85), (83504837, 75.50), (74773321, 50),
(90453889, -25085), (0,80)]
withdrawls= [(90453889, (25.85, 2.50)), (83504837, (75.50, 1.50)),
(83504837, (-1050, -1.50)),
(74773321, (50, 2)),(123456789, (50, 2))]
# use exception handling for illict usage of accounts
for number,money in deposits:
try:
print( accounts.get(number).deposit(money))
except AttributeError:
print (f"Unknown account: {number}")
except ValueError as ve:
print (ve)
for number,(money,fee) in withdrawls:
try:
print( accounts.get(number).withdraw(money,fee))
except AttributeError:
print (f"Unknown account: {number}")
except ValueError as ve:
print (ve)
Выход:
Account Name: Guy Mann
Account Number: 90453889
Account Balance: $125.85
Account Name: Donald Duck
Account Number: 83504837
Account Balance: $175.50
Account Name: Joe Smith
Account Number: 74773321
Account Balance: $150.00
Unable to deposit negative or zero amounts
Unknown account: 0
Account Name: Guy Mann
Account Number: 90453889
Account Balance: $97.50
Account Name: Donald Duck
Account Number: 83504837
Account Balance: $98.50
Unable to withdraw negative or zero amounts
Account Name: Joe Smith
Account Number: 74773321
Account Balance: $98.00