士兵突擊
需求
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
?方法;否則,打印無槍消息。
- 包含士兵的名稱(
如何運行代碼
- 創建一個?
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()
?方法讓許三多再次開火。
小結
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()