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

【Python OOP Diary 3】高级特性与设计模式练习题(七至十三)

Python面向对象编程进阶:高级特性与设计模式练习题

已经掌握了OOP基础?现在让我们挑战更高级的题目,学习特殊方法、设计模式、组合关系等进阶概念!

题目七:魔术方法练习 - 向量类

问题描述

创建一个Vector类,实现向量的基本运算。要求使用Python的魔术方法(特殊方法)来支持数学运算、比较运算和内置函数。

输入格式

程序需要支持向量创建和多种运算:

  • 创建向量:Vector(x, y, z)
  • 向量加法:v1 + v2
  • 向量减法:v1 - v2
  • 点乘:v1 * v2
  • 数乘:k * vv * k
  • 求模:abs(v)
  • 字符串表示:str(v)
  • 比较:v1 == v2

输出格式

根据运算输出相应结果。

样例输入

v1 = Vector(1, 2, 3)
v2 = Vector(4, 5, 6)
print(v1 + v2)
print(v1 - v2)
print(v1 * v2)  # 点乘
print(2 * v1)
print(abs(v1))
print(v1)
print(v1 == Vector(1, 2, 3))

样例输出

Vector(5, 7, 9)
Vector(-3, -3, -3)
32
Vector(2, 4, 6)
3.74
Vector(1, 2, 3)
True

要求

  1. 实现以下魔术方法:
    • __init__, __repr__, __str__
    • __add__, __sub__, __mul__
    • __rmul__ (右乘)
    • __abs__, __eq__
  2. 点乘返回标量,数乘返回向量
  3. 模长计算使用欧几里得距离

解题思路

  • 使用魔术方法让类支持Python内置运算符
  • 注意区分点乘和数乘的逻辑
  • 实现__rmul__支持标量左乘

题目八:组合关系练习 - 电脑组装系统

问题描述

创建一个电脑组装系统,使用组合关系(Composition)来构建复杂的对象。电脑由CPU、内存、硬盘等组件组成。

输入格式

多行输入,每行一个命令:

  • add_cpu 型号 频率:添加CPU
  • add_memory 容量 类型:添加内存
  • add_disk 容量 类型:添加硬盘
  • assemble 电脑名:组装电脑
  • show 电脑名:显示电脑配置
  • benchmark 电脑名:性能测试
  • exit:退出

输出格式

根据命令输出相应结果。

样例输入

add_cpu i7-12700K 3.6
add_memory 16 DDR4
add_disk 1024 SSD
assemble MyPC
show MyPC
benchmark MyPC
exit

样例输出

电脑 'MyPC' 组装完成!
电脑配置:
CPU: i7-12700K (3.6GHz)
内存: 16GB DDR4
硬盘: 1024GB SSD
性能得分: 8750

要求

  1. 使用组合关系:电脑"拥有"各个组件
  2. 每个组件都是独立的类
  3. 性能得分基于组件参数计算
  4. 支持同一电脑添加多个内存条和硬盘

解题思路

  • 创建组件类:CPU, Memory, Disk
  • 电脑类包含组件对象作为属性
  • 使用列表管理多个同类组件
  • 性能计算考虑各组件的协同效应

题目九:观察者模式练习 - 股票交易系统

问题描述

实现一个股票交易系统,使用观察者模式(Observer Pattern)。当股票价格变化时,自动通知所有观察者(投资者)。

输入格式

多行输入,每行一个命令:

  • add_stock 代码 名称 初始价格:添加股票
  • add_investor 姓名:添加投资者
  • subscribe 投资者 股票:订阅股票
  • set_price 股票 新价格:设置股票价格
  • show_investors 股票:显示订阅者
  • exit:退出

输出格式

价格变化时自动通知所有订阅者。

样例输入

add_stock AAPL 苹果 150
add_stock TSLA 特斯拉 200
add_investor 张三
add_investor 李四
subscribe 张三 AAPL
subscribe 李四 AAPL
subscribe 李四 TSLA
set_price AAPL 155
set_price TSLA 190

样例输出

通知 张三: AAPL(苹果) 价格变化: 150.00 -> 155.00
通知 李四: AAPL(苹果) 价格变化: 150.00 -> 155.00
通知 李四: TSLA(特斯拉) 价格变化: 200.00 -> 190.00

要求

  1. 实现观察者模式:主题(股票)和观察者(投资者)
  2. 支持一对多的通知关系
  3. 投资者可以订阅多个股票
  4. 价格变化时自动通知所有相关投资者

解题思路

  • 主题接口:添加、删除、通知观察者
  • 观察者接口:接收更新
  • 股票作为具体主题,投资者作为具体观察者
  • 使用字典管理订阅关系

题目十:工厂模式练习 - 图形绘制系统

问题描述

创建一个图形绘制系统,使用工厂模式(Factory Pattern)来创建不同类型的图形对象。

输入格式

多行输入,每行描述要创建的图形:

  • circle 半径 x y:创建圆形
  • rectangle 长 宽 x y:创建矩形
  • triangle 边1 边2 边3 x y:创建三角形
  • draw all:绘制所有图形
  • area all:计算总面积
  • exit:退出

输出格式

根据命令输出绘制结果或计算信息。

样例输入

circle 5 10 10
rectangle 8 6 20 20
triangle 3 4 5 30 30
draw all
area all
exit

样例输出

在(10,10)绘制圆形(半径=5)
在(20,20)绘制矩形(8x6)
在(30,30)绘制三角形(3,4,5)
总面积: 110.27

要求

  1. 使用工厂模式创建图形对象
  2. 每个图形都有draw()area()方法
  3. 支持多种图形类型
  4. 统一管理所有创建的图形

解题思路

  • 图形工厂类根据输入参数创建具体图形
  • 基类定义统一接口
  • 具体图形类实现具体逻辑
  • 使用列表管理所有图形对象

题目十一:装饰器模式练习 - 咖啡订单系统

问题描述

实现一个咖啡订单系统,使用装饰器模式(Decorator Pattern)来动态添加配料。基础咖啡可以添加牛奶、糖、奶油等配料,每种配料都会影响价格和描述。

输入格式

多行输入,每行一个命令:

  • order 咖啡类型:订购基础咖啡
  • add 配料:添加配料
  • show:显示当前订单
  • price:计算总价
  • new_order:开始新订单
  • exit:退出

样例输入

order 拿铁
add 牛奶
add 糖
show
price
new_order
order 美式
add 奶油
show
price
exit

样例输出

拿铁 + 牛奶 + 糖
价格: 32.00
美式 + 奶油
价格: 28.00

要求

  1. 使用装饰器模式动态添加功能
  2. 每种配料都是一个装饰器
  3. 配料可以任意组合
  4. 价格自动累加计算

解题思路

  • 组件接口:get_description(), cost()
  • 具体组件:各种基础咖啡
  • 装饰器基类:继承组件接口
  • 具体装饰器:各种配料

题目十二:策略模式练习 - 数据压缩系统

问题描述

创建一个数据压缩系统,使用策略模式(Strategy Pattern)来支持不同的压缩算法。用户可以选择使用ZIP、RAR或7Z算法来压缩文件。

输入格式

多行输入,每行一个命令:

  • set_algorithm 算法:设置压缩算法
  • compress 文件名:压缩文件
  • decompress 文件名:解压文件
  • show_algorithms:显示可用算法
  • exit:退出

输出格式

根据命令输出压缩结果。

样例输入

show_algorithms
set_algorithm ZIP
compress document.txt
set_algorithm RAR
compress image.jpg
decompress archive.rar
exit

样例输出

可用算法: ZIP, RAR, 7Z
使用ZIP算法压缩: document.txt -> document.zip
使用RAR算法压缩: image.jpg -> image.rar
使用RAR算法解压: archive.rar -> extracted/

要求

  1. 使用策略模式封装压缩算法
  2. 可以在运行时切换算法
  3. 支持多种压缩格式
  4. 统一的压缩/解压接口

解题思路

  • 策略接口:compress(), decompress()
  • 具体策略:各种压缩算法实现
  • 上下文类:维护当前策略引用
  • 客户端可以动态切换策略

题目十三:迭代器模式练习 - 图书目录系统

问题描述

创建一个图书目录系统,使用迭代器模式(Iterator Pattern)来遍历图书集合。支持按不同方式遍历:顺序遍历、按分类过滤、按作者过滤等。

输入格式

多行输入,每行一个命令:

  • add_book 书名 作者 分类:添加图书
  • list_books:顺序列出所有图书
  • list_by_category 分类:按分类列出图书
  • list_by_author 作者:按作者列出图书
  • search 关键词:搜索图书
  • exit:退出

输出格式

根据遍历方式输出图书列表。

样例输入

add_book Python编程 张三 编程
add_book 算法导论 李四 计算机科学
add_book 设计模式 王五 编程
list_books
list_by_category 编程
search Python
exit

样例输出

所有图书:
1. Python编程 - 张三 [编程]
2. 算法导论 - 李四 [计算机科学]
3. 设计模式 - 王五 [编程]编程类图书:
1. Python编程 - 张三
2. 设计模式 - 王五搜索 'Python':
Python编程 - 张三 [编程]

要求

  1. 使用迭代器模式提供多种遍历方式
  2. 迭代器接口:has_next(), next()
  3. 聚合接口:create_iterator()
  4. 支持多种迭代策略

解题思路

  • 迭代器接口定义遍历方法
  • 具体迭代器实现不同遍历逻辑
  • 聚合类提供创建迭代器的方法
  • 客户端通过迭代器访问元素,不暴露内部结构

学习建议

  1. 理解模式意图:每个设计模式解决特定类型的问题
  2. 对比不同模式:理解各种模式的适用场景和区别
  3. 实际应用思考:思考这些模式在真实项目中的应用
  4. 组合使用模式:在实际项目中,经常需要组合使用多个模式

设计模式总结

通过这些题目,你将掌握:

  1. 创建型模式:工厂模式(对象创建)
  2. 结构型模式:装饰器模式(功能扩展)、组合模式(部分-整体)
  3. 行为型模式:观察者模式(事件通知)、策略模式(算法封装)、迭代器模式(集合遍历)

这些高级OOP概念和设计模式将帮助你构建更加灵活、可维护和可扩展的软件系统。

http://www.dtcms.com/a/550030.html

相关文章:

  • 音响网站模板镇江网站制作优化
  • 01_Kotlin语言基础学习
  • 运维:部署Jenkins
  • 01_FastMCP 2.x 中文文档之FastMCP的介绍
  • @FeignClient调用超时
  • Ubuntu(②共享剪贴板)
  • 桂林北站有核酸检测点吗app开发的公司
  • apache启动失败Failed to start The Apache HTTP Server.
  • 汕头建设南京网站seo服务
  • 饰品网站模板建立网站的作用
  • 解析视频融合平台EasyCVR的分析平台技术如何成为“全域视频管理中台”
  • ubuntu启动项问题
  • 网站开发工资咋样品牌建设的作用和意义
  • 展馆门户网站建设深圳网站外包公司
  • MATLAB高效算法实战
  • 网站导航图怎么做的详细步骤郑州发布直播
  • 做网站灰色网站怎么判刑北邻京网站茵建设
  • MySQL 读写分离:用 ProxySQL 实现 “读走从库,写走主库”(附延迟问题解决方案)
  • C Primer Plus Notes 10
  • wap网站制作动态如何做色流量网站
  • 【BTC】分叉
  • 高端建站咨询wordpress 音乐播放器 歌词
  • 网站开发北京外贸公司大全
  • 最便宜网站空间做h5好点的网站
  • 网站的建设与板块如何保存wordpress主题设置
  • 基于hadoop的电商用户行为分析系统(源码+论文+部署+安装)
  • 通达oa 做网站可以做动图的视频网站
  • 做黄金比较专业的网站网站自助制作
  • 长沙建站工作室乐陵森林覆盖率
  • 移动电子商务网站建设深圳公司建立网站