Python OOP编写的银行类无法执行取款操作问题求助
问题原因
- 键类型不匹配:存款方法中输入的账号
x是字符串类型,直接作为self.accountNumber的键存储;但取款方法中把输入的账号转成了int类型再去字典中查找,两种类型的键无法匹配,会触发KeyError。 - 金额类型错误:存款时输入的金额
y没有转成数值类型,直接以字符串形式存入字典,取款时执行字符串减整数的操作会触发类型错误。 - 存款逻辑错误:存款操作直接将输入金额赋值给对应账号,不是累加原有余额,多次存款会覆盖之前的余额数据。
- 初始化参数冗余:
__init__方法传入的accountNumber、totalBalance参数没有被使用,直接被初始化为空字典。 - 缺少边界校验:没有判断账号是否存在、取款金额是否大于余额的逻辑,异常场景会直接报错。
修复方案
- 统一账号的存储和查询类型,选择统一用字符串兼容更多账号格式。
- 存款时将输入金额转为数值类型,首次存款直接赋值,非首次存款做累加。
- 取款前先校验账号是否存在、余额是否足够。
- 清理冗余的初始化参数。
class Bank: def __init__(self, name): self.name = name # 存储格式:{账号字符串: 余额数值} self.account_balance = {} def deposit(self): print("What is your account number?") account = input().strip() print("What balance are you depositing?") amount = float(input().strip()) # 金额合法性校验 if amount <= 0: print("Deposit amount must be greater than 0") return # 累加余额 if account in self.account_balance: self.account_balance[account] += amount else: self.account_balance[account] = amount print(f"Current account balance: {self.account_balance[account]}") def withdraw(self): print("What is your account number?") account = input().strip() # 校验账号是否存在 if account not in self.account_balance: print("Account does not exist") return print("What balance are you withdrawing?") amount = float(input().strip()) # 校验金额合法性和余额是否充足 if amount <= 0: print("Withdrawal amount must be greater than 0") return if self.account_balance[account] < amount: print("Insufficient balance") return # 扣减余额 self.account_balance[account] -= amount print(f"Current account balance: {self.account_balance[account]}") Bank1 = Bank("MONEYYYYY") Bank1.deposit() Bank1.withdraw()
内容的提问来源于stack exchange,提问作者VirtualSquares
相关产品推荐
相关产品推荐

