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 = name
        self.bullets = bullets

    def fire(self):
        if self.bullets > 0:
            self.bullets -= 1
            print(f"{self.name} 发射了一颗子弹!")
        else:
            print(f"{self.name} 没有子弹了!")

    def reload(self, num_bullets):
        self.bullets += num_bullets
        print(f"{self.name} 装填了 {num_bullets} 颗子弹。")


class Soldier:
    def __init__(self, name, gun=None):
        self.name = name
        self.gun = gun

    def 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 = id
        self.name = name
        self.age = age
        self.score = score

    def __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 student
        return None

    def 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']
                return


class 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_list
        if 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.mfbz.cn/a/767058.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python画图-驯化seaborn】一文搞懂seaborn中的箱线图实践技巧

【Python画图-驯化seaborn】一文搞懂seaborn中的箱线图实践技巧 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内容文档关注&a…

05 docker 镜像

目录 1. 镜像 2. 联合文件系统 3. docker镜像加载原理 4. 镜像分层 镜像分层的优势 5. 容器层 1. 镜像 镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好行程一个可交付的运行环境&#xf…

每日一题 7月1日

1 设数组data[m]作为循环队列的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为____ 2 采用滑动窗口机制对两个相邻结点A(发送方)和B(接收方)的通信过程进行流量控制。假定帧的序号长度为3比特,发送窗口与接收窗口的大小均为7,当A发送了…

昇思25天学习打卡营第9天|MindSpore-Vision Transformer图像分类

Vision Transformer图像分类 Vision Transformer(ViT)简介 近些年,随着基于自注意(Self-Attention)结构的模型的发展,特别是Transformer模型的提出,极大地促进了自然语言处理模型的发展。由于Transformers的计算效率和可扩展性,它已经能够训练具有超过100B参数的空前…

传输线在阻抗匹配时串联端接电阻为什么要靠近发送端

传输线在阻抗匹配时串联端接电阻为什么要靠近发送端 在进行阻抗匹配的时候我们可以在电阻源端放置一个串联端接电阻,但是有时候受到空间的限制可能会把电阻摆的稍微远一点,那么这个时候大家可能会有疑问,电阻离发送端远一点或者电阻放置在接…

java+mysql教师管理系统

完整源码地址 教师信息管理系统使用命令行交互的方式及数据库连接实现教师信息管理系统,该系统旨在实现教师信息的管理,并根据需要进行教师信息展示。该软件的功能有如下功能 (1)基本信息管理(教师号、姓名、性别、出生年月、职称、学历、学位、教师类型…

【Git 学习笔记】1.3 Git 的三个阶段

1.3 Git 的三个阶段 由于远程代码库后续存在新的提交,因此实操过程中的结果与书中并不完全一致。根据书中 HEAD 指向的 SHA-1:34acc370b4d6ae53f051255680feaefaf7f7850d,可通过以下命令切换到对应版本,并新建一个 newdemo 分支来…

【STM32 RTC实时时钟如何配置!超详细的解析和超简单的配置,附上寄存器操作】

STM32 里面RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。因为系统对后备寄存器和RTC相关寄存器有写保护,所以如果想要对后备寄存器和RTC进行访问,则需要通过操作…

社交媒体优化的智能顾问:Kompas.ai如何提升品牌社交表现

在社交媒体盛行的数字时代,品牌必须在社交平台上保持活跃和互动,以增强品牌社交互动和提升在线可见性。社交媒体优化不仅能够扩大品牌的影响力,还能够加深与消费者的联系。Kompas.ai,作为一款智能社交媒体顾问工具,能够…

【前端项目笔记】7 商品管理

商品管理 效果展示: 在功能开发之前,创建商品列表的子分支 git branch 查看所有分支 git checkout -b goods_list 创建并切换到新分支goods_list git push -u origin goods_list 将新分支goods_list推送到云端仓库origin并命名为goods_list保存 通过…

LLM学习记录

概述 语言模型的发展 语言模型经历过四个阶段的发展,依次从统计语言模型到神经网络语言模型(NLM),到出现以 BERT 和 Transformer 架构为代表的预训练语言模型(PLM),最终到大型语言模型阶段&am…

竞赛选题 交通目标检测-行人车辆检测流量计数 - 竞赛选题

文章目录 0 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计…

【Java环境配置过程详解(包括IDEA配置Java)】

目录 一、JDK下载安装 1. 官网下载JDK 2. 本地安装JDK 3. 配置环境变量 4. 验证是否安装成功 ​编辑二、IDEA进行安装下载 1. 官网下载 IDEA 2、IDEA进行Java开发 1. 创建Java项目 2. 程序测试 一、JDK下载安装 1. 官网下载JDK 1)官网链接: https://www.o…

PTrade如何获取技术值班?如get_RSI - 相对强弱指标;PTrade量化软件如何获取?

get_RSI - 相对强弱指标 get_RSI(close, n6) 使用场景 该函数仅在回测、交易模块可用 接口说明 获取相对强弱指标RSI指标的计算结果 PTrade是恒生公司开发的一款专业量化软件,部分合作券商可提供,↑↑↑! 参数 close:价格…

C语言的数据结构:图的基本概念

前言 之前学过了其它的数据结构,如: 集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。 线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个,如线性表、栈、队列,每一个节点和其它节点之间的关系 一个对一个…

rpm包下载

内网无法下载、选择外网的一台机器下载rpm包 下载后上传rpm包 1、创建下载目录 mkdir /data/asap/test 2、下载能留存包的工具 sudo yum install yum-utils -y 报错就是环境问题没下载成功,我换了个环境正常的机器就可以了 3、下载rpm包到指定目录/data/asa…

一文彻底搞懂Transformer - Input(输入)

一、输入嵌入(Input Embedding) 词嵌入(Word Embedding):词嵌入是最基本的嵌入形式,它将词汇表中的每个单词映射到一个固定大小的向量上。这个向量通常是通过训练得到的,能够捕捉单词之间的语义…

GAMES104:04游戏引擎中的渲染系统1:游戏渲染基础-学习笔记

文章目录 概览:游戏引擎中的渲染系统四个课时概览 一,渲染管线流程二,了解GPUSIMD 和 SIMTGPU 架构CPU到GPU的数据传输GPU性能限制 三,可见性Renderable可渲染对象提高渲染效率Visibility Culling 可见性裁剪 四,纹理压…

如何在《中小学电教》期刊上发表论文?

如何在《中小学电教》期刊上发表论文? 《中小学电教》知网 学术期刊 教育厅25年下半年 3版 ①其他学科 不收甘肃和幼儿园 ②数学、英语、历史、政治(道德与法治)、音体美、科学学科的稿件 全bao 全bao不带课题 文章需要和信息…

【TS】TypeScript 原始数据类型深度解析

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 TypeScript 原始数据类型深度解析一、引言二、基础原始数据类型2.1 boolean2.2 …