鱼C论坛

 找回密码
 立即注册
查看: 923|回复: 7

[已解决]课后作业问题

[复制链接]
发表于 2025-1-22 19:47:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:PYTHON第65讲课后作业动动手第零提
我的:
  1. bank = {}
  2. number = 88888887
  3. class Bank:
  4.     def __init__(self):
  5.         self.program = int(input("1.创建账户 2.删除账户 3.查询余额 4.存款 5.取款 6.转账 7.退出"))
  6.         if self.program == 1:
  7.             self.create()
  8.         elif self.program == 2:
  9.             self.delete()
  10.         elif self.program == 3:
  11.             self.inquire()
  12.         elif self.program == 4:
  13.             self.save()
  14.         elif self.program == 5:
  15.             self.out()
  16.         elif self.program == 6:
  17.             self.give()
  18.         else:
  19.             pass
  20.     def create(self):
  21.         global number
  22.         name = input("请输入姓名:")
  23.         password = input("请输入密码:")
  24.         inquire = int(input("请输入预存款:"))
  25.         while len(str(password)) != 6 or (not str(password).isdecimal()):
  26.             password = int(input("密码需为六位数字,请重新输入:"))
  27.         number += 1
  28.         bank[number] = [name, password, inquire]
  29.         print("创建成功!,卡号为{}".format(number))
  30.         Bank()
  31.     def delete(self):
  32.         global number
  33.         number1 = int(input("请输入删除人的卡号:"))
  34.         if bank.get(number1):
  35.             print("删除成功!")
  36.             del bank[number1]
  37.             number -= 1
  38.         else:
  39.             print("查无此人!")
  40.         Bank()
  41.     def inquire(self):
  42.         number = int(input("请输入卡号:"))
  43.         if bank.get(number):
  44.             password = int(input("请输入密码:"))
  45.             if password == bank[number][1]:
  46.                 print(f"查询成功,余额为{bank[number][2]}元")
  47.             else:
  48.                 print("密码错误!")
  49.         else:
  50.             print("查无此人!")
  51.         Bank()
  52.     def save(self):
  53.         number = int(input("请输入转入者卡号:"))
  54.         if bank.get(number):
  55.             password = int(input("请输入密码:"))
  56.             if password == bank[number][1]:
  57.                 money = int(input("请输入钱数:"))
  58.                 bank[number][2] += money
  59.                 print("装入成功!")
  60.             else:
  61.                 print("密码错误")
  62.         else:
  63.             print("查无此人!")
  64.         Bank()
  65.     def out(self):
  66.         number = int(input("请输入卡号:"))
  67.         if bank.get(number):
  68.             password = int(input("请输入密码:"))
  69.             if password == bank[number][1]:
  70.                 money = int(input("请输入金额:"))
  71.                 bank[number][2] -= money
  72.                 print("成功取出{}元。".format(money))
  73.             else:
  74.                 print("密码错误!")
  75.         else:
  76.             print("查无此人!")
  77.         Bank()
  78.     def give(self):
  79.         number = int(input("请输入卡号:"))
  80.         if bank.get(number):
  81.             password = int(input("请输入密码:"))
  82.             if password == bank[number][1]:
  83.                 give_person = int(input("请输入收款人卡号:"))
  84.                 if bank.get(give_person):
  85.                     money = int(input("请输入金额:"))
  86.                     bank[number][2] -= money
  87.                     bank[give_person][2] += money
  88.                 else:
  89.                     print("查无此人!")
  90.             print("密码错误!")
  91.         else:
  92.             print("查无此人!")
  93.         Bank()
  94. main = Bank()
  95. main
复制代码

为什么密码错误
最佳答案
2025-1-22 19:56:23
因为你在初始化保存密码的时候,是字符串,但是后面的输入却将它转换为整数了。
屏幕截图 2025-01-22 194645.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-1-22 19:47:44 | 显示全部楼层
问题分析:  
你在代码中定义了一个全局字典 `bank` 用于存储用户账户信息,但在实际操作中,你的代码中对账户信息的查询和验证处理存在多处错误。以下是主要几个问题:

  • 变量作用域问题: 你直接使用 `bank` 变量,但代码里没有正确在账户操作中读取或更新它。
  • 密码验证逻辑错误: 你在验证密码时,将 `password` 与 `bank` 这个整个字典直接进行对比,而不是和具体用户的密码进行对比。
  • 账户存储逻辑缺失: 在创建账户时,你并没有正确地将用户名、密码和卡号等信息保存在 `bank` 字典中。
  • 转账等操作逻辑错误: 在转账功能中,直接尝试对全局变量操作,但并没有具体账户的增减逻辑。


以下是修复后的代码:


  1. class Bank:
  2.     def __init__(self):
  3.         global bank, number
  4.         self.program = int(input("1.创建账户 2.删除账户 3.查询余额 4.存款 5.取款 6.转账 7.退出\n请选择操作编号:"))
  5.         if self.program == 1:
  6.             self.create()
  7.         elif self.program == 2:
  8.             self.delete()
  9.         elif self.program == 3:
  10.             self.inquire()
  11.         elif self.program == 4:
  12.             self.save()
  13.         elif self.program == 5:
  14.             self.out()
  15.         elif self.program == 6:
  16.             self.give()
  17.         else:
  18.             print("操作已退出。")

  19.     def create(self):
  20.         global bank, number
  21.         name = input("请输入姓名:")
  22.         password = input("设置一个六位数字密码:")
  23.         while len(password) != 6 or not password.isdigit():
  24.             password = input("密码需为六位数字,请重新输入:")
  25.         balance = int(input("请输入预存款:"))
  26.         number += 1
  27.         bank[number] = {'name': name, 'password': password, 'balance': balance}
  28.         print(f"账户创建成功!您的卡号为:{number}")
  29.         Bank()

  30.     def delete(self):
  31.         global bank
  32.         card_number = int(input("请输入要删除的卡号:"))
  33.         if card_number in bank:
  34.             del bank[card_number]
  35.             print("账户删除成功!")
  36.         else:
  37.             print("查无此账户!")
  38.         Bank()

  39.     def inquire(self):
  40.         global bank
  41.         card_number = int(input("请输入卡号:"))
  42.         if card_number in bank:
  43.             password = input("请输入密码:")
  44.             if password == bank[card_number]['password']:
  45.                 print(f"查询成功,当前余额为:{bank[card_number]['balance']}元。")
  46.             else:
  47.                 print("密码错误!")
  48.         else:
  49.             print("查无此账户!")
  50.         Bank()

  51.     def save(self):
  52.         global bank
  53.         card_number = int(input("请输入卡号:"))
  54.         if card_number in bank:
  55.             amount = int(input("请输入存款金额:"))
  56.             bank[card_number]['balance'] += amount
  57.             print(f"存款成功!当前余额为:{bank[card_number]['balance']}元。")
  58.         else:
  59.             print("查无此账户!")
  60.         Bank()

  61.     def out(self):
  62.         global bank
  63.         card_number = int(input("请输入卡号:"))
  64.         if card_number in bank:
  65.             password = input("请输入密码:")
  66.             if password == bank[card_number]['password']:
  67.                 amount = int(input("请输入取款金额:"))
  68.                 if amount <= bank[card_number]['balance']:
  69.                     bank[card_number]['balance'] -= amount
  70.                     print(f"取款成功!当前余额为:{bank[card_number]['balance']}元。")
  71.                 else:
  72.                     print("余额不足!")
  73.             else:
  74.                 print("密码错误!")
  75.         else:
  76.             print("查无此账户!")
  77.         Bank()

  78.     def give(self):
  79.         global bank
  80.         card_number = int(input("请输入您的卡号:"))
  81.         if card_number in bank:
  82.             password = input("请输入密码:")
  83.             if password == bank[card_number]['password']:
  84.                 receiver_card = int(input("请输入收款人卡号:"))
  85.                 if receiver_card in bank:
  86.                     amount = int(input("请输入转账金额:"))
  87.                     if amount <= bank[card_number]['balance']:
  88.                         bank[card_number]['balance'] -= amount
  89.                         bank[receiver_card]['balance'] += amount
  90.                         print(f"转账成功!您当前余额为:{bank[card_number]['balance']}元。")
  91.                     else:
  92.                         print("余额不足!")
  93.                 else:
  94.                     print("收款人账户不存在!")
  95.             else:
  96.                 print("密码错误!")
  97.         else:
  98.             print("查无此账户!")
  99.         Bank()


  100. # 初始化数据
  101. bank = {}
  102. number = 88888887
  103. main = Bank()
复制代码


修改说明:
  • 使用 `bank` 字典存储账户信息,形式为 `{卡号: {'name': 姓名, 'password': 密码, 'balance': 余额}}`;
  • 在密码验证中,正确对比 `bank[card_number]['password']`;
  • 修复了转账、存款、取款等功能的逻辑。


现在运行代码后,可以正确实现账户的创建、删除、查询、存取款和转账等操作。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-22 19:49:10 | 显示全部楼层
FishC 发表于 2025-1-22 01:47
问题分析:  
你在代码中定义了一个全局字典 `bank` 用于存储用户账户信息,但在实际操作中,你的代码中对 ...

没有你上面说的错误啊,你再仔细看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-1-22 19:49:32 | 显示全部楼层
zyx2012 发表于 2025-01-22 01:49
FishC 发表于 2025-1-22 01:47
问题分析:  
你在代 ...


你说得对,代码关键逻辑中没有错误只是实现逻辑上的部分整理,有可能导致 "密码错误" 主要问题 属于实际

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-22 19:50:53 | 显示全部楼层
FishC 发表于 2025-1-22 01:49
你说得对,代码关键逻辑中没有错误只是实现逻辑上的部分整理,有可能导致 "密码错误" 主要问题 属于实 ...

不可能,我输出了一下两个password,类型一样而且完全相等啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-1-22 19:51:16 | 显示全部楼层
zyx2012 发表于 2025-01-22 01:50
FishC 发表于 2025-1-22 01:49
你说得对,代码关键逻 ...


感谢说明!代码逻辑中确实没有表面上的问题,但产生“密码错误”的可能原因可能在更细节的地方。为了诊断这个问题,我重新审阅了你的代码,并总结了以下几点可能的问题和建议,你可以逐一排查。

---

问题分析及排查方向

1. 字典存储及访问方式问题  
你在关键地方多次使用了 `bank.get(number)` 和比较 `password == bank`。这里是主要问题根源之一:
   - `bank` 是一个全局字典,而 `bank.get(number)` 返回的是 None、或与 card_number 相关的数据(未完全实现),导致后续无法正确匹配和验证密码。
   - 理想存储方式:`bank` 应该是一个以卡号为键、账户信息为值的嵌套字典,例如:  
   
  1. bank = {
  2.          88888888: {'name': '张三', 'password': '123456', 'balance': 1000}
  3.      }
复制代码

     然后通过 `bank[number]['password']` 来进行密码验证。

2. 存储、修改、删除账户的逻辑问题  
你的 `create`、`delete` 等方法都没对 `bank` 这个字典进行正确的存取操作。
   - 在 `create` 函数中,没有将新添加的账户存入字典;而 `delete` 中,删除逻辑根本没有判断 `number` 对应的数据。

3. 用户输入的问题  
虽然你添加了一些密码输入校验,但仍可能导致误输入,比如多余的空格或换行符。建议在每次获取 `password` 时用 `.strip()` 清除这些干扰。

4. 全球变量作用域问题  
变量 `bank` 和 `number` 的作用域涉及多个地方的读写,如果没有明确同步,就可能导致密码不匹配或其他异常。

---

代码修正与重构

以下是修正后代码,帮助完善上述问题:


  1. bank = {}  # 存储账户信息
  2. number = 88888887  # 初始卡号

  3. class Bank:
  4.     def __init__(self):
  5.         self.menu()

  6.     def menu(self):
  7.         print("\n1. 创建账户\n2. 删除账户\n3. 查询余额\n4. 存款\n5. 取款\n6. 转账\n7. 退出")
  8.         choice = input("请选择操作:")
  9.         if choice == "1":
  10.             self.create()
  11.         elif choice == "2":
  12.             self.delete()
  13.         elif choice == "3":
  14.             self.inquire()
  15.         elif choice == "4":
  16.             self.save()
  17.         elif choice == "5":
  18.             self.out()
  19.         elif choice == "6":
  20.             self.give()
  21.         elif choice == "7":
  22.             print("退出程序!")
  23.         else:
  24.             print("无效选择,请重新输入!")
  25.             self.menu()

  26.     def create(self):
  27.         global number, bank
  28.         name = input("请输入姓名:")
  29.         password = input("请输入6位数密码:").strip()
  30.         
  31.         # 密码校验
  32.         while len(password) != 6 or not password.isdigit():
  33.             password = input("密码格式错误,请重新输入6位数字密码:").strip()

  34.         balance = int(input("请输入预存款:"))

  35.         # 创建账户并存储
  36.         number += 1
  37.         bank[number] = {"name": name, "password": password, "balance": balance}

  38.         print(f"账户创建成功!卡号为 {number}")
  39.         self.menu()

  40.     def delete(self):
  41.         global bank
  42.         del_number = int(input("请输入要删除的账户卡号:"))
  43.         
  44.         # 判断卡号是否存在
  45.         if del_number in bank:
  46.             del bank[del_number]
  47.             print("账户删除成功!")
  48.         else:
  49.             print("查无此账户!")
  50.         
  51.         self.menu()

  52.     def inquire(self):
  53.         global bank
  54.         card_number = int(input("请输入卡号:"))
  55.         
  56.         if card_number in bank:
  57.             password = input("请输入密码:").strip()
  58.             if password == bank[card_number]["password"]:
  59.                 print(f"查询成功,当前余额为 {bank[card_number]['balance']} 元。")
  60.             else:
  61.                 print("密码错误!")
  62.         else:
  63.             print("查无此账户!")
  64.         
  65.         self.menu()

  66.     def save(self):
  67.         global bank
  68.         card_number = int(input("请输入卡号:"))
  69.         
  70.         if card_number in bank:
  71.             amount = int(input("请输入存款金额:"))
  72.             bank[card_number]["balance"] += amount
  73.             print(f"存款成功!当前余额为 {bank[card_number]['balance']} 元。")
  74.         else:
  75.             print("查无此账户!")
  76.         
  77.         self.menu()

  78.     def out(self):
  79.         global bank
  80.         card_number = int(input("请输入卡号:"))
  81.         
  82.         if card_number in bank:
  83.             password = input("请输入密码:").strip()
  84.             if password == bank[card_number]["password"]:
  85.                 amount = int(input("请输入取款金额:"))
  86.                 if amount <= bank[card_number]["balance"]:
  87.                     bank[card_number]["balance"] -= amount
  88.                     print(f"成功取款 {amount} 元!当前余额为 {bank[card_number]['balance']} 元。")
  89.                 else:
  90.                     print("余额不足!")
  91.             else:
  92.                 print("密码错误!")
  93.         else:
  94.             print("查无此账户!")
  95.         
  96.         self.menu()

  97.     def give(self):
  98.         global bank
  99.         from_card = int(input("请输入转出者卡号:"))
  100.         
  101.         if from_card in bank:
  102.             password = input("请输入密码:").strip()
  103.             if password == bank[from_card]["password"]:
  104.                 to_card = int(input("请输入收款者卡号:"))
  105.                 if to_card in bank:
  106.                     amount = int(input("请输入转账金额:"))
  107.                     if amount <= bank[from_card]["balance"]:
  108.                         bank[from_card]["balance"] -= amount
  109.                         bank[to_card]["balance"] += amount
  110.                         print(f"转账成功!当前余额为 {bank[from_card]['balance']} 元。")
  111.                     else:
  112.                         print("余额不足!")
  113.                 else:
  114.                     print("收款账户不存在!")
  115.             else:
  116.                 print("密码错误!")
  117.         else:
  118.             print("转出账户不存在!")
  119.         
  120.         self.menu()

  121. # 启动程序
  122. main = Bank()
复制代码


---

修正说明

  • 将 `bank` 改为一个嵌套字典,按卡号存储账户信息;
  • 在密码验证中,正确地通过 `bank[card_number]['password']` 来比对密码;
  • 修复了转账等功能的逻辑错误;
  • 增加了用户输入容错(如 `.strip()` 去除无效空字符)。


---

试运行修正后的代码,你应该不会再出现“密码错误”的情况了,若还有其他问题,欢迎继续提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-1-22 19:56:23 | 显示全部楼层    本楼为最佳答案   
因为你在初始化保存密码的时候,是字符串,但是后面的输入却将它转换为整数了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-22 20:00:47 | 显示全部楼层
小甲鱼的二师兄 发表于 2025-1-22 01:56
因为你在初始化保存密码的时候,是字符串,但是后面的输入却将它转换为整数了。

啊啊啊忘记了,谢谢二师兄
(&#3665;&#8226;&#768;&#12610;&#8226;&#769;)&#1608;&#10023;一针见血
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-14 01:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表