python——面向对象小练习士兵突击与信息管理系统

士兵突击

需求

1. 士兵 许三多 有一把 AK47

2. 士兵 可以 开火

3. 枪 能够 发射 子弹

4. 枪 装填 装填子弹 —— 增加子弹数量

# 士兵突击
# 需求
# 1. 士兵 许三多 有一把 AK47
# 2. 士兵 可以 开火
# 3. 枪 能够 发射 子弹
# 4. 枪 装填 装填子弹 —— 增加子弹数量
class Bullet:def __init__(self):pass
class Gun:def __init__(self, name, bullets=0):self.name = nameself.bullets = bulletsdef fire(self):if self.bullets > 0:self.bullets -= 1print(f"{self.name} 发射了一颗子弹!")else:print(f"{self.name} 没有子弹了!")def reload(self, num_bullets):self.bullets += num_bulletsprint(f"{self.name} 装填了 {num_bullets} 颗子弹。")class Soldier:def __init__(self, name, gun=None):self.name = nameself.gun = gundef shoot(self):if self.gun:self.gun.fire()else:print(f"{self.name} 没有枪!")xu_san_duo = Soldier("许三多")
ak47 = Gun("AK47", bullets=30)  # 假设AK47初始有30颗子弹
xu_san_duo.gun = ak47  # 给许三多装备AK47# 使用士兵和枪
xu_san_duo.shoot()  # 开火
ak47.reload(10)  # 装填子弹
xu_san_duo.shoot()  # 再次开火

代码概述

  • Bullet 类:目前仅包含构造函数,未实现具体功能,但可以作为未来扩展的基础。
  • Gun 类
    • 包含枪的名称(name)和子弹数量(bullets)作为属性。
    • fire 方法用于发射子弹,如果子弹数量大于0,则减少子弹数量并打印发射消息;否则,打印无子弹消息。
    • reload 方法用于装填子弹,接受一个参数 num_bullets 表示要装填的子弹数量,并更新子弹总数。
  • Soldier 类
    • 包含士兵的名称(name)和枪(gun)作为属性。
    • shoot 方法用于士兵开火,如果士兵有枪,则调用枪的 fire 方法;否则,打印无枪消息。

如何运行代码

  1. 创建一个 Soldier 实例 xu_san_duo,表示士兵许三多。
  2. 创建一个 Gun 实例 ak47,表示 AK47 枪,并假设它初始有30颗子弹。
  3. 将 ak47 枪分配给 xu_san_duo 士兵,即给许三多装备 AK47。
  4. 调用 xu_san_duo.shoot() 方法让许三多开火。
  5. 调用 ak47.reload(10) 方法为 AK47 装填10颗子弹。
  6. 再次调用 xu_san_duo.shoot() 方法让许三多再次开火。

小结

1. 创建了一个 士兵类,使用到 init 内置方法

2. 在定义属性时,如果 不知道设置什么初始值,可以设置为 None

3. 在 封装的 方法内部,还可以让 自己的 使用其他类创建的对象属性 调 用已经 封装好的方法

可能的扩展

  • Bullet 类:可以添加更多功能,如子弹的类型、伤害值等。
  • Gun 类:可以添加更多的枪属性,如射速、精度等,或者不同的枪类型(如手枪、狙击枪等)。
  • Soldier 类:可以扩展士兵的能力,如携带多把枪、装备其他装备(如防弹衣、头盔等)、执行不同的任务等。

信息管理系统

实现对学生信息的增加、删除、修改和查询。
class StudentModel:def __init__(self, id, name, age, score):self.id = idself.name = nameself.age = ageself.score = scoredef __str__(self):return f"ID: {self.id}, Name: {self.name}, Age: {self.age}, Score: {self.score}"class StudentManagerController:def __init__(self):self.stu_list = []def add_student(self, student):self.stu_list.append(student)def remove_student(self, student_id):self.stu_list = [s for s in self.stu_list if s.id != student_id]def find_student(self, student_id):for student in self.stu_list:if student.id == student_id:return studentreturn Nonedef update_student(self, student_id, new_data):for student in self.stu_list:if student.id == student_id:student.name = new_data['name']student.age = new_data['age']student.score = new_data['score']returnclass StudentManagerView:def __init__(self):self.stMC = StudentManagerController()def add_student(self):id = input("请输入学生学号:")name = input("请输入学生姓名:")age = input("请输入学生年龄:")score = input("请输入学生成绩:")student = StudentModel(id, name, age, score)self.stMC.add_student(student)def update_student(self):stu_id = input("请输入要修改的学生学号:")name = input("请输入新的学生姓名:")age = input("请输入新的学生年龄:")score = input("请输入新的学生成绩:")new_data = {'name': name, 'age': age, 'score': score}self.stMC.update_student(stu_id, new_data)def delete_student(self):id = input("输入要删除的学生的学号")self.stMC.remove_student(id)def show_students(self):students = self.stMC.stu_listif not students:print("还没有学生信息,快去添加学生信息……")else:print(f"学号————姓名————年龄————成绩")for student in students:print(f" {student.id} ———— {student.name} ———— {student.age} ———— {student.score}")def display_menu(self):print('*' * 25 + '欢迎来到信息管理系统' + '*' * 25)print('你可以进行如下操作:')print("1. 添加学生信息")print("2. 修改学生信息")print("3. 删除学生信息")print("4. 显示所有学生信息")# 你可以继续添加更多选项...def main_loop(self):while True:self.display_menu()choice = input("请输入你的选择(1-4):")if choice == '1':self.add_student()elif choice == '2':self.update_student()elif choice == '3':self.delete_student()elif choice == '4':self.show_students()else:print("无效输入,请重新输入!")smv = StudentManagerView()
smv.main_loop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDBC操作流程

目录 简介 具体操作 1. 引入驱动包 1)下载驱动包 2)引入驱动包到项目中 2. 编写代码 1)创建数据源 2)建立连接 3)构造 SQL 语句 4)执行 SQL 语句 5)释放资源 总结 简介 JDBC 就是使…

某网页gpt的JS逆向

原网页网址 (base64) 在线解码 aHR0cHM6Ly9jbGF1ZGUzLmZyZWUyZ3B0Lnh5ei8 逆向效果图 调用代码(复制即用) 把倒数第三行换成下面的base64解码 aHR0cHM6Ly9jbGF1ZGUzLmZyZWUyZ3B0Lnh5ei9hcGkvZ2VuZXJhdGU import hashlib import time import reques…

C语言+ MSSQL技术开发的 PACS系统源码:CT后处理技术之仿真内镜CTVE

C语言 MSSQL技术开发的 PACS系统源码:CT后处理技术之仿真内镜CTVE 仿真内窥镜VE VE是利用医学影像作为原始数据,融合图像处理、计算机图形学、科学计算可视化、虚拟现实技术,模拟传统光学内镜的一种技术。 又叫做腔内重建技术,是…

试用笔记之-汇通来电显示软件

首先汇通来电显示软件下载 http://www.htsoft.com.cn/download/httelephone.rar

平衡树专题Splay

写在前面: 部分来自孙宝(Steven24)的博客,表示感谢。 认识 什么是Splay 就是BST的一种,整体效率是很高的,均摊的次数是O(logn)级别的。 基本操作就是把节点旋转到BST的root,从而改善BST的平…

为适配kubelet:v0.4 安装指定版本的docker

系统版本信息 cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 0.4 版本的kubelet 报错信息记录 E0603 19:00:38.273720 44142 kubelet.go:734] Error syncing pod: API error (400): {"message": "starting container with non-empty reque…

免交互简单操作

免交互 交互:我们发出指令控制程序的运行,程序在接收到指令后按照指令的效果作出对应的反应 免交互:间接的,通过第三方的方式把指令传给程序,不用直接下达指令 Here Document免交互 这是命令行格式,也可…

不用找了!这个软件自带各行业话术,客服效率飞跃

有一款客服工具软件,不但能吸附聊天窗口,实现图文视频话术的一键发送,还内置了多行业的优质客服话术模板,允许用户直接下载使用,快速构建起适合自身企业的专业客服知识库。 前言 在今天的快节奏商业环境中&#xff0c…

Linux shell脚本编程

一、sehll简介: 用户通过shell向计算机发送指令的 计算机通过shell给用户返回指令的执行结果 1.1、通过shell编程可以达到的效果 提高工作的效率 可以实现自动化 1.2、sehll脚本编写的流程 1、用vi/vim创建一个.sh的文件 2、在文件中进行开发 3、个文件赋予可执行权…

CesiumJS【Basic】- #047 绘制闪烁线(Entity方式)- 需要自定义着色器

文章目录 绘制闪烁线(Entity方式)- 需要自定义着色器1 目标2 代码2.1 main.ts绘制闪烁线(Entity方式)- 需要自定义着色器 1 目标 使用Entity方式绘制闪烁线 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium<

【如何使用RSA签名验签】python语言

文章目录 签名方法异步同步通知数据验签生活号响应数据验签同步响应数据验签 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的…

作业7.2

用结构体数组以及函数完成: 录入你要增加的几个学生&#xff0c;之后输出所有的学生信息 删除你要删除的第几个学生&#xff0c;并打印所有的学生信息 修改你要修改的第几个学生&#xff0c;并打印所有的学生信息 查找你要查找的第几个学生&#xff0c;并打印该的学生信息 1 /*…

idea常用问题记录

文章目录 1.ant构建报错编译错误1.1 解决办法 1.ant构建报错编译错误 Compile failed;xxx 1.1 解决办法

Python系统教程02

巩固 input()输出函数 回顾 1 、 input()函数&#xff1a; 在 input()函数输入时&#xff0c;输入的内容一定为字符串类型。 2 、条件分支语句&#xff1a; 每一个 if 语句可以看成一个个体&#xff0c;elif 和 else 都是一个 if 个体的一部分&#xff0c;每一个 if 个体 运…

51单片机外部中断(按键识别)

欢迎入群共同学习交流 时间记录&#xff1a;2024/7/2 一、电路原理图 51单片机包含INT0、INT1两个外部中断接口 二、知识点介绍 1.中断寄存器位介绍 &#xff08;1&#xff09;TCON定时控制寄存器&#xff0c;位0&#xff08;IT0&#xff09;中断INT0请求信号选择位&#x…

WordPress主题开发进群付费主题v1.1.2 多种引流方式

全新前端UI界面&#xff0c;多种前端交互特效让页面不再单调&#xff0c;进群页面群成员数&#xff0c;群成员头像名称&#xff0c;每次刷新页面随机更新不重复&#xff0c;最下面评论和点赞也是如此随机刷新不重复 进群页面简介&#xff0c;群聊名称&#xff0c;群内展示&…

注意!年龄越大,社交圈子越窄?其实这是老人的理性选择!数学家告诉你:何时该跳槽,何时该坚守!你必须知道的三个智慧:让你的人生更加精彩!

我们到底应该在什么情况下探索新事物&#xff0c;什么情况下专注于已有的东西呢&#xff1f;本质上来说&#xff0c;这个问题就是在询问&#xff0c;你究竟应该耗费精力去探索新的信息&#xff0c;还是专注从既有的信息中获取收获&#xff1f; 有人采访了临终的老人&#xff0c…

中国三大平原矢量示意图分享

我们在《中国地势三级阶梯示意图分享》、《中国四大高原矢量示意图分享》和《中国主要山脉矢量示意图分享》等文中&#xff0c;为你分享过中国地势相关的矢量示意图。 现在再为你分享一下我国东北平原、华北平原和长江中下游平原的矢量示意图&#xff0c;这三大平原均位于我国…

随想录总结 Day 77

随想录总结 Day 77 回忆75天的做题时间&#xff0c;差点没坚持下来的有两个时间点&#xff0c;一个是在前20天&#xff0c;很多时候二叉树这种基础题&#xff0c;前中后序列遍历之类的。基础&#xff0c;但真正写一遍&#xff0c;每道题又有多种写法。花了很长时间但是也就是一…

go sync包(七)Sync.Map

Sync.Map 原理 通过 read 和 dirty 两个字段实现数据的读写分离&#xff0c;读的数据存在只读字段 read 上&#xff0c;将最新写入的数据存在 dirty 字段上。读取时会先查询 read&#xff0c;不存在再查询 dirty&#xff0c;写入时则只写入 dirty。读取 read 并不需要加锁&am…