Python开发BankAccount类:如何添加账号列表用于转账校验?
银行账户系统代码修改方案
修改位置说明
你需要在2个核心位置添加代码,同时修正原有transferMoney方法的逻辑问题:
- 首先在
BankAccount类下添加类级别的全局账户存储属性,所有实例共享该列表 - 在类的
__init__初始化方法中添加代码,每次创建新账户时自动把账户实例存入全局列表 - 修正
transferMoney方法的校验逻辑,先匹配账号是否存在,再做后续操作
原有代码的问题说明
你现在写的transferMoney方法存在2个逻辑错误:
- 参数传递的是账号数字,不是账户实例,直接操作
yourAccountNumber.balance会报错 - 校验逻辑
if yourAccountNumber and aimAccountNumber in []写法完全无效,既没有绑定实际的账户列表,判断逻辑也不符合Python语法(不能同时判断两个值in列表这么写)
修改后的完整代码
class BankAccount: # 类属性:存储所有创建的账户实例,所有实例共享该列表 all_accounts = [] def __init__(self, accountNumber, name, balance) -> None: self.accountNumber = accountNumber self.name = name self.balance = balance # 每次创建新账户时,自动加入全局账户列表 BankAccount.all_accounts.append(self) print(f"尊敬的{self.name},您的账号{self.accountNumber}当前余额为{self.balance}元。") def withdrawMoney(self, amount): if self.balance < amount: print(f"尊敬的{self.name},账号{self.accountNumber}余额不足,当前余额{self.balance}元,无法取出{amount}元。") return self.balance -= amount return f"尊敬的{self.name},账号{self.accountNumber}已取出{amount}元,剩余余额{self.balance}元。" def depositMoney(self, amount): self.balance += amount return f"尊敬的{self.name},账号{self.accountNumber}已存入{amount}元,当前总余额{self.balance}元。" def transferMoney(self, target_account_num, amount): # 先校验转出账户余额是否足够 if self.balance < amount: return f"转出失败:账号{self.accountNumber}余额不足,当前余额{self.balance}元。" # 遍历全局账户列表,查找目标账号是否存在 target_account = None for acc in BankAccount.all_accounts: if acc.accountNumber == target_account_num: target_account = acc break # 目标账号不存在直接返回错误 if not target_account: return "转出失败:输入的目标账号不存在,请核对后重试。" # 执行转账逻辑 self.balance -= amount target_account.balance += amount return f"转账成功!您的账号{self.accountNumber}已向账号{target_account_num}转出{amount}元,当前剩余余额{self.balance}元。" # 测试代码 a1 = BankAccount(1234,"Ahmet",5000) a2 = BankAccount(3456,"Kerem",8000) # 调用转账方法:a1给a2转1000元,只需要传目标账号和金额即可 print(a1.transferMoney(3456, 1000)) # 验证a2的余额 print(f"账号3456当前余额:{a2.balance}元")
代码说明
- 所有创建的账户实例会自动存入
BankAccount.all_accounts类属性,无需手动维护列表 - 转账时方法会自动遍历全局列表校验目标账号是否存在,不存在直接抛出错误
- 优化了转账方法的参数,转出方就是调用方法的账户实例本身,不需要重复传自己的账号
内容的提问来源于stack exchange,提问作者Ahmed Peksen
相关产品推荐
相关产品推荐

