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

士兵突击

需求

  1. 士兵 许三多 有一把 AK47

  2. 士兵 可以 开火

  3. 枪 能够 发射 子弹

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

python 复制代码
# 士兵突击
# 需求
# 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 类:可以扩展士兵的能力,如携带多把枪、装备其他装备(如防弹衣、头盔等)、执行不同的任务等。

信息管理系统

复制代码
实现对学生信息的增加、删除、修改和查询。
python 复制代码
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()
相关推荐
何曾参静谧3 分钟前
「QT」文件类 之 QIODevice 输入输出设备类
开发语言·qt
爱吃生蚝的于勒1 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
冰芒猓4 小时前
SpringMVC数据校验、数据格式化处理、国际化设置
开发语言·maven
Shy9604184 小时前
Doc2Vec句子向量
python·语言模型
失落的香蕉4 小时前
C语言串讲-2之指针和结构体
java·c语言·开发语言
红中马喽4 小时前
JS学习日记(webAPI—DOM)
开发语言·前端·javascript·笔记·vscode·学习
杜杜的man5 小时前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
java小吕布5 小时前
Java中Properties的使用详解
java·开发语言·后端
versatile_zpc5 小时前
C++初阶:类和对象(上)
开发语言·c++