感谢说明!代码逻辑中确实没有表面上的问题,但产生“密码错误”的可能原因可能在更细节的地方。为了诊断这个问题,我重新审阅了你的代码,并总结了以下几点可能的问题和建议,你可以逐一排查。
---
问题分析及排查方向
1. 字典存储及访问方式问题
你在关键地方多次使用了 `bank.get(number)` 和比较 `password == bank`。这里是主要问题根源之一:
- `bank` 是一个全局字典,而 `bank.get(number)` 返回的是 None、或与 card_number 相关的数据(未完全实现),导致后续无法正确匹配和验证密码。
- 理想存储方式:`bank` 应该是一个以卡号为键、账户信息为值的嵌套字典,例如:
bank = {
88888888: {'name': '张三', 'password': '123456', 'balance': 1000}
}
然后通过 `bank[number]['password']` 来进行密码验证。
2. 存储、修改、删除账户的逻辑问题
你的 `create`、`delete` 等方法都没对 `bank` 这个字典进行正确的存取操作。
- 在 `create` 函数中,没有将新添加的账户存入字典;而 `delete` 中,删除逻辑根本没有判断 `number` 对应的数据。
3. 用户输入的问题
虽然你添加了一些密码输入校验,但仍可能导致误输入,比如多余的空格或换行符。建议在每次获取 `password` 时用 `.strip()` 清除这些干扰。
4. 全球变量作用域问题
变量 `bank` 和 `number` 的作用域涉及多个地方的读写,如果没有明确同步,就可能导致密码不匹配或其他异常。
---
代码修正与重构
以下是修正后代码,帮助完善上述问题:
bank = {} # 存储账户信息
number = 88888887 # 初始卡号
class Bank:
def __init__(self):
self.menu()
def menu(self):
print("\n1. 创建账户\n2. 删除账户\n3. 查询余额\n4. 存款\n5. 取款\n6. 转账\n7. 退出")
choice = input("请选择操作:")
if choice == "1":
self.create()
elif choice == "2":
self.delete()
elif choice == "3":
self.inquire()
elif choice == "4":
self.save()
elif choice == "5":
self.out()
elif choice == "6":
self.give()
elif choice == "7":
print("退出程序!")
else:
print("无效选择,请重新输入!")
self.menu()
def create(self):
global number, bank
name = input("请输入姓名:")
password = input("请输入6位数密码:").strip()
# 密码校验
while len(password) != 6 or not password.isdigit():
password = input("密码格式错误,请重新输入6位数字密码:").strip()
balance = int(input("请输入预存款:"))
# 创建账户并存储
number += 1
bank[number] = {"name": name, "password": password, "balance": balance}
print(f"账户创建成功!卡号为 {number}")
self.menu()
def delete(self):
global bank
del_number = int(input("请输入要删除的账户卡号:"))
# 判断卡号是否存在
if del_number in bank:
del bank[del_number]
print("账户删除成功!")
else:
print("查无此账户!")
self.menu()
def inquire(self):
global bank
card_number = int(input("请输入卡号:"))
if card_number in bank:
password = input("请输入密码:").strip()
if password == bank[card_number]["password"]:
print(f"查询成功,当前余额为 {bank[card_number]['balance']} 元。")
else:
print("密码错误!")
else:
print("查无此账户!")
self.menu()
def save(self):
global bank
card_number = int(input("请输入卡号:"))
if card_number in bank:
amount = int(input("请输入存款金额:"))
bank[card_number]["balance"] += amount
print(f"存款成功!当前余额为 {bank[card_number]['balance']} 元。")
else:
print("查无此账户!")
self.menu()
def out(self):
global bank
card_number = int(input("请输入卡号:"))
if card_number in bank:
password = input("请输入密码:").strip()
if password == bank[card_number]["password"]:
amount = int(input("请输入取款金额:"))
if amount <= bank[card_number]["balance"]:
bank[card_number]["balance"] -= amount
print(f"成功取款 {amount} 元!当前余额为 {bank[card_number]['balance']} 元。")
else:
print("余额不足!")
else:
print("密码错误!")
else:
print("查无此账户!")
self.menu()
def give(self):
global bank
from_card = int(input("请输入转出者卡号:"))
if from_card in bank:
password = input("请输入密码:").strip()
if password == bank[from_card]["password"]:
to_card = int(input("请输入收款者卡号:"))
if to_card in bank:
amount = int(input("请输入转账金额:"))
if amount <= bank[from_card]["balance"]:
bank[from_card]["balance"] -= amount
bank[to_card]["balance"] += amount
print(f"转账成功!当前余额为 {bank[from_card]['balance']} 元。")
else:
print("余额不足!")
else:
print("收款账户不存在!")
else:
print("密码错误!")
else:
print("转出账户不存在!")
self.menu()
# 启动程序
main = Bank()
---
修正说明
- 将 `bank` 改为一个嵌套字典,按卡号存储账户信息;
- 在密码验证中,正确地通过 `bank[card_number]['password']` 来比对密码;
- 修复了转账等功能的逻辑错误;
- 增加了用户输入容错(如 `.strip()` 去除无效空字符)。
---
试运行修正后的代码,你应该不会再出现“密码错误”的情况了,若还有其他问题,欢迎继续提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |