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 = 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?方法;否則,打印無槍消息。

如何運行代碼

  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 = 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()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38284.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38284.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38284.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JDBC操作流程

目錄 簡介 具體操作 1. 引入驅動包 1)下載驅動包 2)引入驅動包到項目中 2. 編寫代碼 1)創建數據源 2)建立連接 3)構造 SQL 語句 4)執行 SQL 語句 5)釋放資源 總結 簡介 JDBC 就是使…

某網頁gpt的JS逆向

原網頁網址 (base64) 在線解碼 aHR0cHM6Ly9jbGF1ZGUzLmZyZWUyZ3B0Lnh5ei8 逆向效果圖 調用代碼(復制即用) 把倒數第三行換成下面的base64解碼 aHR0cHM6Ly9jbGF1ZGUzLmZyZWUyZ3B0Lnh5ei9hcGkvZ2VuZXJhdGU import hashlib import time import reques…

C語言+ MSSQL技術開發的 PACS系統源碼:CT后處理技術之仿真內鏡CTVE

C語言 MSSQL技術開發的 PACS系統源碼:CT后處理技術之仿真內鏡CTVE 仿真內窺鏡VE VE是利用醫學影像作為原始數據,融合圖像處理、計算機圖形學、科學計算可視化、虛擬現實技術,模擬傳統光學內鏡的一種技術。 又叫做腔內重建技術,是…

試用筆記之-匯通來電顯示軟件

首先匯通來電顯示軟件下載 http://www.htsoft.com.cn/download/httelephone.rar

平衡樹專題Splay

寫在前面: 部分來自孫寶(Steven24)的博客,表示感謝。 認識 什么是Splay 就是BST的一種,整體效率是很高的,均攤的次數是O(logn)級別的。 基本操作就是把節點旋轉到BST的root,從而改善BST的平…

為適配kubelet:v0.4 安裝指定版本的docker

系統版本信息 cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 0.4 版本的kubelet 報錯信息記錄 E0603 19:00:38.273720 44142 kubelet.go:734] Error syncing pod: API error (400): {"message": "starting container with non-empty reque…

免交互簡單操作

免交互 交互:我們發出指令控制程序的運行,程序在接收到指令后按照指令的效果作出對應的反應 免交互:間接的,通過第三方的方式把指令傳給程序,不用直接下達指令 Here Document免交互 這是命令行格式,也可…

不用找了!這個軟件自帶各行業話術,客服效率飛躍

有一款客服工具軟件,不但能吸附聊天窗口,實現圖文視頻話術的一鍵發送,還內置了多行業的優質客服話術模板,允許用戶直接下載使用,快速構建起適合自身企業的專業客服知識庫。 前言 在今天的快節奏商業環境中&#xff0c…

Linux shell腳本編程

一、sehll簡介: 用戶通過shell向計算機發送指令的 計算機通過shell給用戶返回指令的執行結果 1.1、通過shell編程可以達到的效果 提高工作的效率 可以實現自動化 1.2、sehll腳本編寫的流程 1、用vi/vim創建一個.sh的文件 2、在文件中進行開發 3、個文件賦予可執行權…

CesiumJS【Basic】- #047 繪制閃爍線(Entity方式)- 需要自定義著色器

文章目錄 繪制閃爍線(Entity方式)- 需要自定義著色器1 目標2 代碼2.1 main.ts繪制閃爍線(Entity方式)- 需要自定義著色器 1 目標 使用Entity方式繪制閃爍線 2 代碼 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium<

【如何使用RSA簽名驗簽】python語言

文章目錄 簽名方法異步同步通知數據驗簽生活號響應數據驗簽同步響應數據驗簽 &#x1f308;你好呀&#xff01;我是 山頂風景獨好 &#x1f388;歡迎踏入我的博客世界&#xff0c;能與您在此邂逅&#xff0c;真是緣分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的…

作業7.2

用結構體數組以及函數完成: 錄入你要增加的幾個學生&#xff0c;之后輸出所有的學生信息 刪除你要刪除的第幾個學生&#xff0c;并打印所有的學生信息 修改你要修改的第幾個學生&#xff0c;并打印所有的學生信息 查找你要查找的第幾個學生&#xff0c;并打印該的學生信息 1 /*…

idea常用問題記錄

文章目錄 1.ant構建報錯編譯錯誤1.1 解決辦法 1.ant構建報錯編譯錯誤 Compile failed;xxx 1.1 解決辦法

Python系統教程02

鞏固 input()輸出函數 回顧 1 、 input()函數&#xff1a; 在 input()函數輸入時&#xff0c;輸入的內容一定為字符串類型。 2 、條件分支語句&#xff1a; 每一個 if 語句可以看成一個個體&#xff0c;elif 和 else 都是一個 if 個體的一部分&#xff0c;每一個 if 個體 運…

51單片機外部中斷(按鍵識別)

歡迎入群共同學習交流 時間記錄&#xff1a;2024/7/2 一、電路原理圖 51單片機包含INT0、INT1兩個外部中斷接口 二、知識點介紹 1.中斷寄存器位介紹 &#xff08;1&#xff09;TCON定時控制寄存器&#xff0c;位0&#xff08;IT0&#xff09;中斷INT0請求信號選擇位&#x…

WordPress主題開發進群付費主題v1.1.2 多種引流方式

全新前端UI界面&#xff0c;多種前端交互特效讓頁面不再單調&#xff0c;進群頁面群成員數&#xff0c;群成員頭像名稱&#xff0c;每次刷新頁面隨機更新不重復&#xff0c;最下面評論和點贊也是如此隨機刷新不重復 進群頁面簡介&#xff0c;群聊名稱&#xff0c;群內展示&…

注意!年齡越大,社交圈子越窄?其實這是老人的理性選擇!數學家告訴你:何時該跳槽,何時該堅守!你必須知道的三個智慧:讓你的人生更加精彩!

我們到底應該在什么情況下探索新事物&#xff0c;什么情況下專注于已有的東西呢&#xff1f;本質上來說&#xff0c;這個問題就是在詢問&#xff0c;你究竟應該耗費精力去探索新的信息&#xff0c;還是專注從既有的信息中獲取收獲&#xff1f; 有人采訪了臨終的老人&#xff0c…

中國三大平原矢量示意圖分享

我們在《中國地勢三級階梯示意圖分享》、《中國四大高原矢量示意圖分享》和《中國主要山脈矢量示意圖分享》等文中&#xff0c;為你分享過中國地勢相關的矢量示意圖。 現在再為你分享一下我國東北平原、華北平原和長江中下游平原的矢量示意圖&#xff0c;這三大平原均位于我國…

隨想錄總結 Day 77

隨想錄總結 Day 77 回憶75天的做題時間&#xff0c;差點沒堅持下來的有兩個時間點&#xff0c;一個是在前20天&#xff0c;很多時候二叉樹這種基礎題&#xff0c;前中后序列遍歷之類的。基礎&#xff0c;但真正寫一遍&#xff0c;每道題又有多種寫法。花了很長時間但是也就是一…

go sync包(七)Sync.Map

Sync.Map 原理 通過 read 和 dirty 兩個字段實現數據的讀寫分離&#xff0c;讀的數據存在只讀字段 read 上&#xff0c;將最新寫入的數據存在 dirty 字段上。讀取時會先查詢 read&#xff0c;不存在再查詢 dirty&#xff0c;寫入時則只寫入 dirty。讀取 read 并不需要加鎖&am…