You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python银行程序报错:NameError: name 'First_Nam' is not defined 求助

问题分析与解决方法

核心错误原因

报错NameError: name 'First_Nam' is not defined的直接原因是Bank类的构造方法中,调用父类Account的构造时传入了未定义的变量。此外代码还有几处语法和逻辑问题,逐一修复如下:


1. 补全Account类的定义头

代码中只写了Account类的__init__方法,但缺少类的声明,必须补上类定义的开头:

import random  # 先导入需要用到的random模块

class Account:
    def __init__(self, Account_Number, First_Nam, Last_Nam, SSN, PIN, Bal):
        self.Account_Number = Account_Number
        self.First_Nam = First_Nam
        self.Last_Nam = Last_Nam
        self.SSN = SSN
        self.PIN = PIN
        self.Bal = Bal  

2. 修复Bank类的构造方法

Bank类作为Account的子类,构造方法存在两个关键问题:

  • Python中使用super().__init__调用父类构造时,不需要显式传递self参数;
  • 父类Account的构造需要6个参数,但Bank的构造只接收3个,且未提供剩余的First_Nam、Last_Nam、SSN参数。

根据需求,有两种修复思路:

思路一:Bank类继承Account的所有属性,构造时接收完整参数

class Bank(Account):
    def __init__(self, Account_Number, First_Nam, Last_Nam, SSN, PIN, Bal):
        super().__init__(Account_Number, First_Nam, Last_Nam, SSN, PIN, Bal)
        # 若Bank有独有的属性或方法,在这里定义即可,无需重复赋值父类已有的属性

思路二:Bank类仅需部分属性,为父类参数设置默认值

如果Bank确实不需要显式传入姓名和SSN,可以给这些参数设置默认值:

class Bank(Account):
    def __init__(self, Account_Number, PIN, Bal, First_Nam="", Last_Nam="", SSN=""):
        super().__init__(Account_Number, First_Nam, Last_Nam, SSN, PIN, Bal)

3. 修复random模块的使用问题

  • 必须先导入random模块,否则会触发另一个NameError;
  • random.choices((0,9), k=8)只会生成由0和9组成的列表,要生成0-9的随机数字,应改为random.choices('0123456789', k=8),同时将生成的列表转为字符串(账号和PIN通常以字符串形式存储):
# 生成8位账号字符串
account_num = ''.join(map(str, random.choices('0123456789', k=8)))
# 生成4位PIN字符串
pin = ''.join(map(str, random.choices('0123456789', k=4)))

4. 完善main函数的实例化逻辑

确保Account实例化时的参数顺序与构造方法一致,同时可以添加打印语句验证结果:

def main():
    First = input("Please enter your first name: ")
    Last = input("Please enter your last name: ")
    SSN = input("Please enter your SSN: ")
    account_num = ''.join(map(str, random.choices('0123456789', k=8)))
    pin = ''.join(map(str, random.choices('0123456789', k=4)))
    Bal = 0.00
    client_account = Account(account_num, First, Last, SSN, pin, Bal)
    print(f"账号创建成功,账号编号:{client_account.Account_Number}")
    print(f"初始余额:${client_account.Bal:.2f}")

if __name__ == "__main__":
    main()

完整修复后的代码示例

import random

class Account:
    def __init__(self, Account_Number, First_Nam, Last_Nam, SSN, PIN, Bal):
        self.Account_Number = Account_Number
        self.First_Nam = First_Nam
        self.Last_Nam = Last_Nam
        self.SSN = SSN
        self.PIN = PIN
        self.Bal = Bal  

class Bank(Account):
    def __init__(self, Account_Number, First_Nam, Last_Nam, SSN, PIN, Bal):
        super().__init__(Account_Number, First_Nam, Last_Nam, SSN, PIN, Bal)
        self.branch_id = "001"  # Bank类独有的属性示例

def main():
    First = input("Please enter your first name: ")
    Last = input("Please enter your last name: ")
    SSN = input("Please enter your SSN: ")
    account_num = ''.join(map(str, random.choices('0123456789', k=8)))
    pin = ''.join(map(str, random.choices('0123456789', k=4)))
    Bal = 0.00
    client_account = Account(account_num, First, Last, SSN, pin, Bal)
    print(f"账号创建成功,账号编号:{client_account.Account_Number}")
    print(f"初始余额:${client_account.Bal:.2f}")

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者S-Yohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:05:23