




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
2025年P(guān)ython二級考試綜合應(yīng)用試卷:項目實戰(zhàn)考試時間:______分鐘總分:______分姓名:______項目背景:你正在為一個小型圖書館開發(fā)一個簡單的管理工具。該圖書館希望自動化處理一些基礎(chǔ)任務(wù),如管理會員信息、處理借閱記錄和生成簡單的統(tǒng)計報告。你需要根據(jù)以下要求編寫Python代碼。任務(wù)一:會員管理模塊1.編寫一個名為`Member`的類,用于表示圖書館會員。該類應(yīng)包含以下屬性:*`member_id`(會員ID,字符串類型)*`name`(會員姓名,字符串類型)*`email`(會員郵箱,字符串類型,可為空)*`borrowed_books`(已借閱書籍,使用列表存儲書籍名稱,字符串類型)*`join_date`(加入日期,使用`datetime.date`對象表示)類中應(yīng)提供以下方法:*`__init__`:構(gòu)造函數(shù),初始化所有屬性,`borrowed_books`初始為空列表。*`borrow_book`:接收一個書籍名稱(字符串),將其添加到`borrowed_books`列表中。*`return_book`:接收一個書籍名稱(字符串),將其從`borrowed_books`列表中移除。如果書籍不存在于列表中,則不執(zhí)行任何操作。*`get_borrowed_books_count`:返回當(dāng)前會員已借閱書籍的數(shù)量。*`__str__`:返回一個描述會員信息的字符串,格式為:"MemberID:{member_id},Name:{name},BorrowedBooks:{count}",其中`{count}`是借閱書籍的數(shù)量。2.在模塊級別定義一個全局變量`active_members`,類型為字典,用于存儲當(dāng)前所有活躍的會員,鍵為`member_id`,值為`Member`對象。3.編寫一個函數(shù)`add_member`,接收`member_id`,`name`,`email`,`join_date`四個參數(shù),創(chuàng)建一個`Member`對象,將其添加到`active_members`字典中,并返回創(chuàng)建的`Member`對象。如果`member_id`已存在,則不添加并返回`None`。4.編寫一個函數(shù)`find_member_by_id`,接收一個`member_id`(字符串),在`active_members`字典中查找對應(yīng)的會員對象。如果找到,返回該`Member`對象;如果未找到,返回`None`。任務(wù)二:書籍與借閱管理1.假設(shè)已經(jīng)存在一個名為`books_info`的列表,其中每個元素是一個包含以下信息的字典:```pythonbooks_info=[{"book_id":"B001","title":"PythonCrashCourse","author":"EricMatthes","available":True},{"book_id":"B002","title":"AutomatetheBoringStuffwithPython","author":"AlSweigart","available":True},{"book_id":"B003","title":"FluentPython","author":"LucianoRamalho","available":False},#...可能還有更多書籍]```編寫一個函數(shù)`get_book_info_by_id`,接收一個`book_id`(字符串),在`books_info`列表中查找對應(yīng)的書籍信息字典。如果找到且書籍可用(`available`為`True`),返回該字典;如果未找到或書籍不可用,返回`None`。2.編寫一個函數(shù)`checkout_book`,接收`member_id`(字符串)和`book_id`(字符串)兩個參數(shù)。*使用`find_member_by_id`查找會員。*使用`get_book_info_by_id`查找書籍。*如果會員和書籍都存在,且書籍可用:*將書籍標(biāo)題添加到會員的`borrowed_books`列表中。*將書籍的`available`標(biāo)記設(shè)置為`False`。*返回`True`,表示借閱成功。*如果任何條件不滿足,返回`False`,表示借閱失敗。3.編寫一個函數(shù)`return_book`,接收`member_id`(字符串)和`book_id`(字符串)兩個參數(shù)。*使用`find_member_by_id`查找會員。*使用`get_book_info_by_id`查找書籍。*如果會員和書籍都存在:*調(diào)用會員對象的`return_book`方法,傳入`book_id`(作為字符串參數(shù))。*如果會員對象中存在該書,則將書籍的`available`標(biāo)記設(shè)置為`True`。*返回`True`,表示歸還成功。*如果會員或書籍不存在,或者會員未借閱該書,返回`False`,表示歸還失敗。任務(wù)三:簡單統(tǒng)計報告1.編寫一個函數(shù)`get_active_members_count`,返回當(dāng)前`active_members`字典中會員對象的總數(shù)量。2.編寫一個函數(shù)`get_total_borrowed_books_count`,計算并返回所有會員已借閱書籍的總數(shù)量??梢酝ㄟ^遍歷`active_members`中的所有會員對象,并累加每個對象的`get_borrowed_books_count`方法返回的值來實現(xiàn)。3.編寫一個函數(shù)`get_available_books_count`,返回`books_info`列表中所有`available`字段為`True`的書籍?dāng)?shù)量。任務(wù)四:代碼整合與測試1.基于以上定義的類、函數(shù)和變量,模擬以下場景進行測試(請將測試代碼寫在單獨的代碼塊或文件中,不要與上述定義混在一起):*創(chuàng)建幾個會員對象,并使用`add_member`添加到`active_members`中。*查找并借閱一些書籍(確保書籍可用)。*嘗試借閱一本不存在的書籍或一本已借出的書籍。*查找并歸還一些書籍(包括會員未借閱的書籍)。*輸出當(dāng)前活躍會員總數(shù)、總借閱書籍?dāng)?shù)、可用書籍?dāng)?shù)。*打印某個會員的詳細(xì)信息(使用`__str__`方法)。注意:*請確保所有代碼邏輯清晰,功能正常。*注意變量命名規(guī)范和代碼縮進。*測試部分請獨立編寫,以驗證所有功能的實現(xiàn)。試卷答案任務(wù)一:會員管理模塊1.```pythonimportdatetimeclassMember:def__init__(self,member_id,name,email=None,join_date=None):self.member_id=member_id=nameself.email=emailself.borrowed_books=[]self.join_date=join_dateifjoin_dateelsedatetime.date.today()defborrow_book(self,book_name):self.borrowed_books.append(book_name)defreturn_book(self,book_name):try:self.borrowed_books.remove(book_name)exceptValueError:pass#如果書籍不在列表中,不做任何操作defget_borrowed_books_count(self):returnlen(self.borrowed_books)def__str__(self):count=self.get_borrowed_books_count()returnf"MemberID:{self.member_id},Name:{},BorrowedBooks:{count}"```解析思路:*`Member`類定義包含所有要求的屬性:`member_id`,`name`,`email`,`borrowed_books`(初始化為空列表),`join_date`(使用`datetime.date.today()`默認(rèn)為當(dāng)前日期)。*`__init__`方法負(fù)責(zé)初始化對象實例。*`borrow_book`方法向`borrowed_books`列表添加一個書籍名稱。*`return_book`方法使用`try...except`結(jié)構(gòu)嘗試從列表中移除書籍名稱,如果不存在則捕獲`ValueError`并忽略。*`get_borrowed_books_count`方法返回列表的長度,即借閱數(shù)量。*`__str__`方法返回格式化的會員信息字符串,調(diào)用`get_borrowed_books_count`獲取數(shù)量。2.```pythonactive_members={}```解析思路:*定義一個全局字典`active_members`,鍵為會員ID(字符串),值為對應(yīng)的`Member`對象。用于存儲所有活躍會員。3.```pythondefadd_member(member_id,name,email,join_date):ifmember_idinactive_members:returnNone#如果會員ID已存在,返回Nonenew_member=Member(member_id,name,email,join_date)active_members[member_id]=new_memberreturnnew_member#返回創(chuàng)建的Member對象```解析思路:*函數(shù)接收四個參數(shù)。*首先檢查`active_members`字典中是否已存在該`member_id`。*如果存在,直接返回`None`。*如果不存在,創(chuàng)建一個新的`Member`對象,并將其存儲在`active_members`字典中,鍵為`member_id`,值為新對象。*返回創(chuàng)建成功的`Member`對象。4.```pythondeffind_member_by_id(member_id):returnactive_members.get(member_id,None)#使用dict的get方法,如果不存在則返回None```解析思路:*函數(shù)接收一個`member_id`。*使用字典的`get`方法嘗試從`active_members`中獲取對應(yīng)鍵的值(即`Member`對象)。*`get`方法的第二個參數(shù)指定了如果鍵不存在時返回的默認(rèn)值`None`。任務(wù)二:書籍與借閱管理1.```python#books_info列表已提供books_info=[{"book_id":"B001","title":"PythonCrashCourse","author":"EricMatthes","available":True},{"book_id":"B002","title":"AutomatetheBoringStuffwithPython","author":"AlSweigart","available":True},{"book_id":"B003","title":"FluentPython","author":"LucianoRamalho","available":False},#...可能還有更多書籍]defget_book_info_by_id(book_id):forbookinbooks_info:ifbook['book_id']==book_id:ifbook['available']:returnbookelse:returnNone#書籍存在但不可用returnNone#書籍不存在```解析思路:*函數(shù)接收一個`book_id`。*遍歷全局`books_info`列表中的每個字典元素。*檢查當(dāng)前字典的`book_id`字段是否與傳入的`book_id`匹配。*如果匹配,再檢查`available`字段是否為`True`。*如果兩者都匹配,返回該書籍信息字典。*如果匹配但`available`為`False`,或遍歷結(jié)束仍未找到匹配項,返回`None`。2.```pythondefcheckout_book(member_id,book_id):member=find_member_by_id(member_id)book=get_book_info_by_id(book_id)ifmemberisnotNoneandbookisnotNoneandbook['available']:member.borrow_book(book['title'])#使用會員的borrow_book方法book['available']=False#更新書籍狀態(tài)為不可用returnTrueelse:returnFalse#任何條件不滿足,借閱失敗```解析思路:*函數(shù)接收`member_id`和`book_id`。*調(diào)用`find_member_by_id`查找會員對象。*調(diào)用`get_book_info_by_id`查找書籍信息。*檢查會員、書籍對象以及書籍可用性是否都滿足條件。*如果都滿足,調(diào)用會員對象的`borrow_book`方法,傳入書籍的`title`,然后手動將書籍信息字典中的`available`設(shè)置為`False`。*返回`True`表示借閱成功。*如果任一條件不滿足,返回`False`。3.```pythondefreturn_book(member_id,book_id):member=find_member_by_id(member_id)book=get_book_info_by_id(book_id)ifmemberisnotNoneandbookisnotNone:#調(diào)用會員對象的return_book方法,傳入書籍ID(字符串)ifbook['title']inmember.borrowed_books:book['available']=True#更新書籍狀態(tài)為可用returnTrueelse:returnFalse#會員未借閱該書else:returnFalse#會員或書籍不存在```解析思路:*函數(shù)接收`member_id`和`book_id`。*調(diào)用`find_member_by_id`和`get_book_info_by_id`。*檢查會員和書籍對象是否存在。*如果存在,調(diào)用會員對象的`return_book`方法,傳入`book_id`(作為字符串)。*`member.return_book(book['title'])`會嘗試從會員的`borrowed_books`列表中移除該書標(biāo)題。*如果移除成功(即列表中原本包含該書),則將書籍信息字典中的`available`設(shè)置為`True`。*返回`True`表示歸還成功。*如果`return_book`方法沒有移除書籍(即列表中不包含該書),或者會員/書籍不存在,返回`False`。任務(wù)三:簡單統(tǒng)計報告1.```pythondefget_active_members_count():returnlen(active_members)#返回字典的鍵的數(shù)量,即會員總數(shù)```解析思路:*函數(shù)直接返回全局`active_members`字典的長度,即存儲的會員對象數(shù)量。2.```pythondefget_total_borrowed_books_count():total_count=0formemberinactive_members.values():#遍歷所有會員對象total_count+=member.get_borrowed_books_count()#累加每個會員的借閱數(shù)量returntotal_count```解析思路:*函數(shù)初始化一個累加器`total_count`。*遍歷`active_members`字典的值,即所有`Member`對象。*對每個會員對象,調(diào)用其`get_borrowed_books_count`方法獲取其借閱數(shù)量,并加到`total_count`上。*最后返回累加的總數(shù)。3.```pythondefget_available_books_count():count=0forbookinbooks_info:ifbook['available']:#檢查書籍是否可用count+=1returncount```解析思路:*函數(shù)初始化計數(shù)器`count`。*遍歷全局`books_info`列表中的所有書籍信息字典。*檢查當(dāng)前書籍字典的`available`字段是否為`True`。*如果為`True`,則計數(shù)器加一。*遍歷結(jié)束后返回計數(shù)器的值,即可用書籍總數(shù)。任務(wù)四:代碼整合與測試```python#---測試代碼---#測試add_membermember1_id="M001"member1_name="Alice"member1_email="alice@"member1_join_date=datetime.date(2023,1,15)m1=add_member(member1_id,member1_name,member1_email,member1_join_date)print(f"AddedMember1:{m1}")#應(yīng)打印Member1的信息member2_id="M002"member2_name="Bob"member2_email="bob@"member2_join_date=datetime.date(2023,2,20)m2=add_member(member2_id,member2_name,member2_email,member2_join_date)print(f"AddedMember2:{m2}")#應(yīng)打印Member2的信息#測試查找不存在的會員m3=find_member_by_id("M003")print(f"FindMemberM003:{m3}")#應(yīng)打印None#假設(shè)books_info已定義如下(用于測試)books_info_test=[{"book_id":"B001","title":"PythonBasics","author":"AuthorA","available":True},{"book_id":"B002","title":"PythonData","author":"AuthorB","available":True},{"book_id":"B003","title":"PythonOOP","author":"AuthorC","available":True},]#測試checkout_bookbook1_id="B001"checkout_success1=checkout_book(m1.member_id,book1_id)print(f"CheckoutBook{book1_id}byMember1:{checkout_success1}")#應(yīng)打印Truecheckout_success2=checkout_book(m1.member_id,book1_id)#再次借閱print(f"CheckoutBook{book1_id}byMember1again:{checkout_success2}")#應(yīng)打印False(已借出)checkout_success3=checkout_book(m2.member_id,book1_id)#Member2借閱print(f"CheckoutBook
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年旅游行業(yè)投資風(fēng)險研究報告
- 2025年食品安全法規(guī)實施與食品安全保障可行性研究報告
- 作物需水規(guī)律與灌溉定額研究-洞察及研究
- 代謝網(wǎng)絡(luò)的動態(tài)調(diào)控-洞察及研究
- 能源價格波動對經(jīng)濟影響-洞察及研究
- 墻墻粉刷施工方案
- 2025廣東揭陽市惠來縣校園招聘衛(wèi)生專業(yè)技術(shù)人員80人模擬試卷有完整答案詳解
- 2025河北邯鄲市體育運動學(xué)校選聘體育教練員3人考前自測高頻考點模擬試題及答案詳解一套
- 2025金華義烏市屬國有企業(yè)4月招聘78人考前自測高頻考點模擬試題及答案詳解(必刷)
- 2025內(nèi)蒙古直屬機關(guān)(參公單位)遴選公務(wù)員及調(diào)劑模擬試卷及答案詳解(網(wǎng)校專用)
- 云計算與邊緣計算協(xié)同詳述
- 船舶水污染物內(nèi)河接收設(shè)施配置規(guī)范
- 資生堂培訓(xùn)資料
- 汽油安全技術(shù)說明書(MSDS)
- #2蓄電池組充放電試驗報告
- 機場FOD監(jiān)測系統(tǒng)的項目課件
- 美麗江西我家課件
- 海底撈值班經(jīng)理日工作流程
- 治療性作業(yè)活動-游戲類作業(yè)活動(作業(yè)治療技術(shù)課件)
- 江蘇理文化工有限公司年產(chǎn)30萬噸聚氯乙烯、5萬噸氯化聚氯乙烯裝置及配套工程項目環(huán)評報告
- 各類應(yīng)急演練方案腳本大全
評論
0/150
提交評論