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

news2024/7/4 21:49:52

士兵突击

需求

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.coloradmin.cn/o/1886560.html

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

相关文章

如何养成爱自己的习惯:吸引世间美好,改变命运

在这个快节奏、高压力的时代,我们常常被各种事务所困扰,内心难以得到真正的宁静。然而,古老的智慧告诉我们,“静”是宇宙万物的根源,是生命恢复的根本。本文将探讨如何养成“静”的习惯,从而吸引世间美好&a…

Apache POI、EasyPoi、EasyExcel

&#xff08;一&#xff09;Apache PoI 使用 &#xff08;二&#xff09;EasyPoi使用 &#xff08;三&#xff09;EasyExcel使用 官方文档&#xff1a; 写Excel | Easy Excel 官网 写 使用注解在字段上进行标识 使用最简单的方法二即可 /*** 最简单的写* <p>* 1. 创建…

入门PHP就来我这(纯干货)04

~~~~ 有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 ~~~~ 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 我们接着《想入门PHP就来我这&#xff08;纯干货&#xff09;03》继续往下学习&am…

忘记家里的wifi密码用iPhone苹果手机怎么找回?

忘记家里的wifi密码用iPhone苹果手机怎么找回&#xff1f; 1、打开iPhone苹果手机上的设置&#xff1b; 2、在iPhone苹果手机设置里找到并进入无线局域网&#xff1b; 3、选择要找回密码的wifi&#xff0c;且已连接&#xff0c;并点击后面的更多进入&#xff1b; 4、进入无线局…

Excel分组求和

目录 1 参考文章2 UNIQUE函数分组3 SUMIF函数分组求和 1 参考文章 1.整体思路&#xff1a;https://blog.csdn.net/Alice_loong/article/details/135580130 2.UNIQUE函数&#xff1a;https://mp.weixin.qq.com/s?__bizMzI3OTcwNDE3OQ&mid2247487044&idx1&sna28108…

浅谈Web性能测试(原创)

一、性能测试不是什么高技术的活&#xff1a; 说到性能测试&#xff0c;很多工作时间较短的新同事或者应届生就很害怕。 为什么害怕&#xff0c;因为感觉无从下手&#xff0c;不知道该做什么、怎么做、做到什么程度&#xff1f; 一听性能测试首先想到的是各种专业的性能测试…

Echarts-柱状图

1.案例1 1.1代码 option = {textStyle: {color: #fff // 标题文字颜色为白色},tooltip: {trigger: axis,axisPointer: {type: shadow,},},legend: {textStyle: {color: white}},grid: {top: 15%,left: 4%,right: 4%,bottom: 7%,containLabel: true},xAxis:{type: category,da…

分文件编译(简单学生系统)

定义学生基本信息 ①输出所有学生信息 ②删除某个学生后&#xff0c;输出所有学生信息 ③修改某个学生信息后&#xff0c;输出所有学生信息 ④查找某个学生的信息 main.c #include"k11*.h" int main(int argc, const char *argv[]) {struct student p[4]{{"…

ShareX:不仅仅是截图工具

名人说&#xff1a;莫道谗言如浪深&#xff0c;莫言迁客似沙沉。 ——刘禹锡《浪淘沙》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、软件介绍1、ShareX2、核心功能 二、下载安装1、下载2、安装 三、使用方法…

CentOS7.9下yum升级Apache HTTP Server2.4.6到2.4.60

CentOS7.9系统默认的Apache版本 在CentOS7.9上&#xff0c;如果使用yum安装Apache HTTP Server是最多到2.4.6版本的&#xff0c;这是因为el7下官方仓库的最高版本就是2.4.6&#xff0c;证据如下&#xff1a; $ yum info httpd ...... Installed Packages Name : httpd…

虚拟纪念展馆建设的重大意义:重新定义纪念活动的未来

一、什么是虚拟纪念展馆&#xff1f; 虚拟纪念展馆是一种利用3D、VR等技术在线展示历史事件、人物或文化遗产的数字化空间。这些展馆通过虚拟现实、增强现实和3D建模等技术手段&#xff0c;创建出身临其境的体验&#xff0c;使参观者可以在互联网上以互动方式探索和学习。 二、…

Golang | Leetcode Golang题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; func isIsomorphic(s, t string) bool {s2t : map[byte]byte{}t2s : map[byte]byte{}for i : range s {x, y : s[i], t[i]if s2t[x] > 0 && s2t[x] ! y || t2s[y] > 0 && t2s[y] ! x {return false}s2t[x] yt2s[y] …

nginx 只有图片等静态资源时 监听80端口 会404 NOT FOUND

解决方法 删除 /var/nginx/sites-enabled 原因&#xff1a;当nginx没有设置首页路径index时&#xff0c;sites-enabled目录中配置的优先级会高于nginx.conf 导致404 NOT FOUND sites-enabled文件中的default会将80端口索引至默认值&#xff1a;/var/www/html目录下&#xff…

Redis基础教程(八):redis集合(Set)

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

职场小白必备待办工具有哪些 适合新手的待办app

初入职场的小白们&#xff0c;常常会遇到各种挑战。从最初的迷茫&#xff0c;到对工作的逐步熟悉&#xff0c;每一步都需要时间和精力的投入。尤其是当面对繁多的工作任务时&#xff0c;如何快速有效地完成它们&#xff0c;成为了许多职场新人需要面对的问题。 在这个快节奏的…

数字集群手持终端是什么_鼎跃安全

在当今快速发展的科技时代&#xff0c;通信技术的进步为各行各业带来了巨大的变革。尤其是在公共安全、应急救援和交通运输等领域&#xff0c;通信的及时性和可靠性变得尤为重要。数字集群手持终端作为一种专用于数字集群通信系统的便携式设备&#xff0c;数字集群手持终端是一…

AI模特换装试衣软件定制服务公司

&#x1f31f; 最强AI模特换装试衣模型训练、定制服务公司出炉 —— 触站AI&#x1f680; &#x1f3a8; 在AI技术的浪潮中&#xff0c;触站AI以其专业和创新&#xff0c;成为企业AI图像领域的技术解决方案服务公司&#xff0c;为设计界带来了革命性的变化。 &#x1f6e0;️ …

PDF一键转PPT文件!这2个AI工具值得推荐,办公必备!

PDF转换为PPT文件&#xff0c;是职场上非常常见的需求&#xff0c;过去想要把PDF文件转换为PPT&#xff0c;得借助各种文件转换工具&#xff0c;但在如今AI技术主导的大背景下&#xff0c;我们在选用工具时有了更多的选择&#xff0c;最明显的就是基于AI技术打造的AI格式转换工…

恢复的实现技术-日志和数据转储

一、引言 在系统正常运行的情况下&#xff0c;事务处理的恢复机制应采取某些技术措施为恢复做好相应的准备&#xff0c;保证在系统发生故障后&#xff0c;能将数据库从一个不一致的错误状态恢复到一个一致性状态 恢复技术主要包括 生成一个数据库日志&#xff0c;来记录系统中…

机械行业常见问题及ERP解决办法

机械行业在全球经济一体化和技术进步背景下&#xff0c;面临着越来越多的挑战。为了在激烈的市场竞争中立于不败之地&#xff0c;企业需要找到合适的方法优化生产流程、降低成本、提升客户满意度。因此&#xff0c;有效地利用企业资源规划&#xff08;ERP&#xff09;解决方案变…