士兵突击
需求
-
士兵 许三多 有一把 AK47
-
士兵 可以 开火
-
枪 能够 发射 子弹
-
枪 装填 装填子弹 ------ 增加子弹数量
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
方法;否则,打印无枪消息。
- 包含士兵的名称(
如何运行代码
- 创建一个
Soldier
实例xu_san_duo
,表示士兵许三多。 - 创建一个
Gun
实例ak47
,表示 AK47 枪,并假设它初始有30颗子弹。 - 将
ak47
枪分配给xu_san_duo
士兵,即给许三多装备 AK47。 - 调用
xu_san_duo.shoot()
方法让许三多开火。 - 调用
ak47.reload(10)
方法为 AK47 装填10颗子弹。 - 再次调用
xu_san_duo.shoot()
方法让许三多再次开火。
小结
-
创建了一个 士兵类,使用到 init 内置方法
-
在定义属性时,如果 不知道设置什么初始值,可以设置为 None
-
在 封装的 方法内部,还可以让 自己的 使用其他类创建的对象属性 调 用已经 封装好的方法
可能的扩展
- 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()