当前位置: 首页 > article >正文

Python面向对象编程与模块化设计练习

需求:
编写一个BankAccount类,模拟银行账户功能:
属性:账户名、余额
方法:存款、取款、查询余额
使用模块将类和测试代码分离。

模块文件:bank_account.py
该模块包含 BankAccount 类。

class BankAccount:
    """
    模拟银行账户功能的类
    """
    def __init__(self, account_name, balance=0):
        """
        初始化账户名和余额
        :param account_name: 账户名
        :param balance: 初始余额,默认为0
        """
        self.account_name = account_name
        self.balance = balance

    def deposit(self, amount):
        """
        存款操作
        :param amount: 存款金额
        """
        if amount > 0:
            self.balance += amount
            print(f"成功存入 {amount} 元,当前余额为:{self.balance} 元。")
        else:
            print("存款金额必须大于 0!")

    def withdraw(self, amount):
        """
        取款操作
        :param amount: 取款金额
        """
        if amount > 0:
            if amount <= self.balance:
                self.balance -= amount
                print(f"成功取出 {amount} 元,当前余额为:{self.balance} 元。")
            else:
                print("余额不足,取款失败!")
        else:
            print("取款金额必须大于 0!")

    def check_balance(self):
        """
        查询余额
        :return: 当前余额
        """
        print(f"账户 {self.account_name} 的当前余额为:{self.balance} 元。")
        return self.balance

测试代码文件:test_bank_account.py
该文件包含测试代码,导入 bank_account 模块并对类进行操作。

from bank_account import BankAccount

def main():
    # 创建账户
    account = BankAccount("Lily", 1000)

    # 查询余额
    account.check_balance()

    # 存款操作
    account.deposit(500)

    # 取款操作
    account.withdraw(300)

    # 尝试取款超过余额
    account.withdraw(1500)

    # 查询余额
    account.check_balance()

if __name__ == "__main__":
    main()

代码分析:
类与模块分离:
BankAccount 类定义在 bank_account.py 模块中,便于复用和维护。
测试代码在 test_bank_account.py 中,通过导入模块进行测试。

功能完整:
提供账户初始化、存款、取款、查询余额等功能。
包含输入校验(如金额不能为负,取款金额不得超过余额)。

模块化结构:
遵循模块化设计原则,方便代码扩展和多文件协作。

运行效果:

账户 Lily 的当前余额为:1000 元。
成功存入 500 元,当前余额为:1500 元。
成功取出 300 元,当前余额为:1200 元。
余额不足,取款失败!
账户 Lily 的当前余额为:1200 元。


http://www.kler.cn/a/417536.html

相关文章:

  • Ubuntu部署Deepseek-R1模型(8b)
  • 【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据
  • React组件中的列表渲染与分隔符处理技巧
  • 尝试在Office里调用免费大语言模型的阶段性进展
  • 备战蓝桥杯-并查集
  • Java NIO详解
  • 【Linux】管道
  • RAT:融合RAG和CoT的高效多步推理任务策略
  • 【ROS2】ROS2 Hello World (C++实现)
  • Keras构建卷积神经网络
  • 48-基于单片机的LCD12864时间调控和串口抱站
  • Oracle对比表与表之间的结构
  • 【Lucene】单个cpu 每秒能支持多少个bm25公式的计算
  • Apache Flink从Kafka中消费商品数据,并进行商品分类的数量统计题
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(四):JMeter中BeanShell内置方法使用
  • 拓扑排序(C++实现)
  • ffmpeg安装(windows)
  • updatexml报错注入原理分析
  • kylinos-server源码安装xrdp
  • 丹摩征文活动 | SD3+ComfyUI的图像部署实践 AIGC图像
  • 基于Java Springboot蛋糕订购小程序
  • 【大模型实战篇】基于大模型GLM的检索增强实践
  • dpcas - v1 (Deep Learning Componentized Application System):深度学习组件化应用系统
  • VBA代码解决方案第二十讲:EXCEL工作表的添加与删除
  • PID模糊控制算法(附MATLAB仿真程序)
  • 【Java】设计模式——策略模式