




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2025年計(jì)算機(jī)二級Python實(shí)戰(zhàn)項(xiàng)目試卷:綜合能力檢驗(yàn)考試時(shí)間:______分鐘總分:______分姓名:______一、項(xiàng)目背景你正在參與開發(fā)一個簡單的學(xué)生成績管理系統(tǒng)。該系統(tǒng)需要實(shí)現(xiàn)以下功能:1.存儲學(xué)生的基本信息(學(xué)號、姓名、班級)和成績(課程名稱、分?jǐn)?shù))。2.添加新學(xué)生的信息。3.為學(xué)生添加成績。4.查詢學(xué)生的所有信息。5.查詢學(xué)生的某門課程成績。6.計(jì)算學(xué)生的平均成績。7.排序并顯示所有學(xué)生的平均成績。二、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)請定義以下類:1.Student類:*屬性:`student_id`(學(xué)號,字符串),`name`(姓名,字符串),`class_name`(班級,字符串),`grades`(成績,字典,鍵為課程名稱,值為分?jǐn)?shù))*方法:`add_grade(course,score)`添加一門課程的成績,`get_average()`計(jì)算并返回平均成績。2.Gradebook類:*屬性:`students`(學(xué)生列表,學(xué)生對象的列表)*方法:`add_student(student)`添加一個學(xué)生對象到學(xué)生列表,`add_student_grade(student_id,course,score)`根據(jù)學(xué)號為學(xué)生添加成績,`get_student_info(student_id)`根據(jù)學(xué)號返回學(xué)生的所有信息(字典形式,包含學(xué)號、姓名、班級、所有課程成績及平均分),`get_student_course_score(student_id,course)`根據(jù)學(xué)號和課程名稱返回該門課程成績,`calculate_all_averages()`遍歷所有學(xué)生,計(jì)算每個學(xué)生的平均成績并存儲在Gradebook對象的`averages`屬性(字典形式,鍵為學(xué)生學(xué)號,值為平均分),`sort_students_by_average()`對所有學(xué)生按平均成績降序排序。三、功能實(shí)現(xiàn)根據(jù)上述類的設(shè)計(jì),請實(shí)現(xiàn)`Gradebook`類和`Student`類,并實(shí)現(xiàn)以下功能:1.編寫代碼創(chuàng)建一個`Gradebook`對象。2.循環(huán)接收用戶輸入,實(shí)現(xiàn)添加學(xué)生、添加成績、查詢學(xué)生信息、查詢課程成績的功能。輸入格式可以自行設(shè)計(jì),但要能清晰區(qū)分不同操作,并正確處理用戶輸入。3.在主程序中,調(diào)用`Gradebook`對象的`calculate_all_averages()`方法計(jì)算所有學(xué)生的平均成績。4.調(diào)用`Gradebook`對象的`sort_students_by_average()`方法對學(xué)生按平均成績降序排序。5.最后,遍歷排序后的學(xué)生列表,打印每個學(xué)生的學(xué)號、姓名、班級和平均成績。四、測試與調(diào)試假設(shè)已經(jīng)實(shí)現(xiàn)了上述功能,請編寫測試代碼,測試以下場景:1.添加幾個學(xué)生,并為他們添加多門課程的成績。2.查詢一個存在的學(xué)生的所有信息,并驗(yàn)證信息是否正確。3.查詢一個不存在的學(xué)生的信息,并驗(yàn)證系統(tǒng)是否能給出合適的提示。4.查詢一個存在的學(xué)生的某門課程成績。5.計(jì)算所有學(xué)生的平均成績,并驗(yàn)證計(jì)算結(jié)果是否正確。6.排序所有學(xué)生,并驗(yàn)證排序結(jié)果是否正確。五、項(xiàng)目總結(jié)簡要總結(jié)本次項(xiàng)目開發(fā)的流程,描述在開發(fā)過程中遇到的主要問題以及相應(yīng)的解決方案。試卷答案一、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)```pythonclassStudent:def__init__(self,student_id,name,class_name):self.student_id=student_id=nameself.class_name=class_nameself.grades={}#課程名稱映射到分?jǐn)?shù)defadd_grade(self,course,score):ifcourseinself.grades:print(f"Warning:Gradeforcourse'{course}'alreadyexistsforstudent{self.student_id}.Overwriting.")self.grades[course]=scoredefget_average(self):ifnotself.grades:return0.0returnsum(self.grades.values())/len(self.grades)classGradebook:def__init__(self):self.students=[]#學(xué)生對象的列表self.averages={}#學(xué)號映射到平均分defadd_student(self,student):#可以檢查學(xué)生ID是否已存在,避免重復(fù)添加self.students.append(student)defadd_student_grade(self,student_id,course,score):forstudentinself.students:ifstudent.student_id==student_id:student.add_grade(course,score)returnprint(f"Error:StudentwithID{student_id}notfound.")defget_student_info(self,student_id):forstudentinself.students:ifstudent.student_id==student_id:student_info={'student_id':student.student_id,'name':,'class_name':student.class_name,'grades':student.grades.copy(),#返回成績的副本'average':student.get_average()}returnstudent_infoprint(f"Error:StudentwithID{student_id}notfound.")returnNone#返回None表示未找到defget_student_course_score(self,student_id,course):forstudentinself.students:ifstudent.student_id==student_id:ifcourseinstudent.grades:returnstudent.grades[course]else:print(f"Warning:Nogradefoundforcourse'{course}'forstudent{student_id}.")returnNoneprint(f"Error:StudentwithID{student_id}notfound.")returnNonedefcalculate_all_averages(self):self.averages.clear()forstudentinself.students:avg=student.get_average()self.averages[student.student_id]=avgreturnself.averages#返回計(jì)算后的averages字典defsort_students_by_average(self):#按平均成績降序排序?qū)W生列表#使用lambda函數(shù)獲取Student對象的get_average()返回值進(jìn)行比較self.students.sort(key=lambdax:x.get_average(),reverse=True)```二、功能實(shí)現(xiàn)```python#創(chuàng)建Gradebook對象gradebook=Gradebook()#定義用戶輸入循環(huán)和處理邏輯whileTrue:print("\nOptions:add_student,add_grade,get_student_info,get_course_score,exit")command=input("Entercommand:").strip().lower()ifcommand=="exit":breakelifcommand=="add_student":student_id=input("EnterstudentID:").strip()name=input("Enterstudentname:").strip()class_name=input("Enterstudentclass:").strip()student=Student(student_id,name,class_name)gradebook.add_student(student)print(f"Student{student_id}added.")elifcommand=="add_grade":student_id=input("EnterstudentID:").strip()course=input("Entercoursename:").strip()try:score=float(input("Enterscore:").strip())exceptValueError:print("Invalidscore.Pleaseenteranumber.")continuegradebook.add_student_grade(student_id,course,score)print(f"Gradeaddedforstudent{student_id}incourse{course}.")elifcommand=="get_student_info":student_id=input("EnterstudentID:").strip()info=gradebook.get_student_info(student_id)ifinfo:print(f"\nStudentInfo:ID={info['student_id']},Name={info['name']},Class={info['class_name']}")print("Grades:")forcourse,scoreininfo['grades'].items():print(f"{course}:{score}")print(f"Average:{info['average']:.2f}")elifcommand=="get_course_score":student_id=input("EnterstudentID:").strip()course=input("Entercoursename:").strip()score=gradebook.get_student_course_score(student_id,course)ifscoreisnotNone:print(f"Scoreforstudent{student_id}incourse{course}:{score}")else:print("Unknowncommand.")#計(jì)算所有學(xué)生平均分gradebook.calculate_all_averages()print("\nAllstudents'averagescalculated.")#排序?qū)W生gradebook.sort_students_by_average()print("\nStudentssortedbyaveragescore.")#打印排序后的學(xué)生平均分print("\nSortedstudentsbyaveragescore:")forstudent_id,avgingradebook.averages.items():print(f"StudentID:{student_id},Average:{avg:.2f}")```三、測試與調(diào)試```python#1.添加學(xué)生和成績gradebook=Gradebook()s1=Student("S001","Alice","CS101")s1.add_grade("Math",85)s1.add_grade("English",90)gradebook.add_student(s1)s2=Student("S002","Bob","CS101")s2.add_grade("Math",75)s2.add_grade("English",80)gradebook.add_student(s2)s3=Student("S003","Charlie","CS102")s3.add_grade("Math",95)s3.add_grade("English",100)gradebook.add_student(s3)#2.查詢學(xué)生所有信息info=gradebook.get_student_info("S001")print("\n---TestGetStudentInfo(S001)---")ifinfo:print(f"ID:{info['student_id']},Name:{info['name']},Class:{info['class_name']}")print("Grades:",info['grades'])print("Average:",info['average'])print("---EndTest---")#3.查詢不存在的學(xué)生信息print("\n---TestGetStudentInfo(Non-existent)---")gradebook.get_student_info("S999")print("---EndTest---")#4.查詢課程成績print("\n---TestGetCourseScore(S001,Math)---")score=gradebook.get_student_course_score("S001","Math")print(f"Score:{score}")print("---EndTest---")#5.計(jì)算所有學(xué)生平均分print("\n---TestCalculateAllAverages---")averages=gradebook.calculate_all_averages()print("CalculatedAverages:",averages)#驗(yàn)證計(jì)算是否正確assertaverages["S001"]==(85+90)/2assertaverages["S002"]==(75+80)/2assertaverages["S003"]==(95+100)/2print("AverageCalculationTestPassed.")print("---EndTest---")#6.排序?qū)W生print("\n---TestSortStudents---")gradebook.sort_students_by_average()sorted_ids=[student.student_idforstudentingradebook.students]print("SortedStudentIDs(bydescendingaverage):",sorted_ids)#驗(yàn)證排序是否正確expected_order=["S003","S001","S002"]#AssumingS003(95)>S001(87.5)>S002(77.5)assertsorted_ids==expected_order,f"Sortfailed.Expected{expected_order},got{sorted_ids}"print("SortTestPassed.")print("---EndTest---")```解析一、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)*Student類:*`__init__`:初始化學(xué)生對象時(shí),只需要學(xué)號、姓名、班級。成績字典`grades`在添加成績時(shí)再創(chuàng)建。*`add_grade`:添加課程和分?jǐn)?shù)到`grades`字典??梢詸z查課程是否已存在,如果存在則給出警告并覆蓋,也可以選擇不允許覆蓋(例如拋出異常)。*`get_average`:計(jì)算成績字典中所有分?jǐn)?shù)的平均值。需要處理沒有成績的情況(返回0或None)。*Gradebook類:*`__init__`:初始化時(shí),創(chuàng)建一個空的學(xué)生列表`students`和一個空的平均分字典`averages`。*`add_student`:將`Student`對象添加到`students`列表??梢蕴砑右粋€簡單的檢查,防止添加重復(fù)的學(xué)號。*`add_student_grade`:遍歷`students`列表,找到學(xué)號匹配的學(xué)生,然后調(diào)用該學(xué)生的`add_grade`方法添加成績。如果找不到學(xué)生,打印錯誤信息。*`get_student_info`:遍歷`students`列表,找到學(xué)號匹配的學(xué)生,收集其所有信息(包括通過`get_average`獲取的平均分),并以字典形式返回。如果找不到,打印錯誤并返回`None`。*`get_student_course_score`:遍歷`students`列表,找到學(xué)號匹配的學(xué)生,再檢查該學(xué)生的`grades`字典中是否有指定課程的成績。如果有,返回分?jǐn)?shù);如果沒有,給出警告并返回`None`。如果找不到學(xué)生,打印錯誤并返回`None`。*`calculate_all_averages`:遍歷`students`列表,對每個學(xué)生調(diào)用`get_average`方法,并將結(jié)果存儲在`averages`字典中(鍵為學(xué)生學(xué)號,值為平均分)。返回這個字典。*`sort_students_by_average`:使用列表的`sort`方法對學(xué)生列表進(jìn)行排序。`key`參數(shù)指定排序依據(jù),使用`lambda`函數(shù)獲取每個`Student`對象的`get_average()`返回值。`reverse=True`表示按降序排序。二、功能實(shí)現(xiàn)*創(chuàng)建一個`Gradebook`實(shí)例。*使用一個`while`循環(huán)不斷接收用戶輸入,根據(jù)輸入的命令(`add_student`,`add_grade`,`get_student_info`,`get_course_score`,`exit`)執(zhí)行相應(yīng)的操作。*`add_student`:提示用戶輸入學(xué)號、姓名、班級,創(chuàng)建`Student`對象,并調(diào)用`Gradebook`的`add_student`方法添加。*`add_grade`:提示用戶輸入學(xué)號、課程名稱、分?jǐn)?shù)。分?jǐn)?shù)需要轉(zhuǎn)換為`float`類型。調(diào)用`Gradebook`的`add_student_grade`方法添加。*`get_student_info`:提示用戶輸入學(xué)號。調(diào)用`Gradebook`的`get_student_info`方法獲取信息并打印。*`get_course_score`:提示用戶輸入學(xué)號和課程名稱。調(diào)用`Gradebook`的`get_student_course_score`方法獲取分?jǐn)?shù)并打印。*`exit`:退出循環(huán),結(jié)束程
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司數(shù)控組合機(jī)床操作工效率提升考核試卷及答案
- 公司固體化妝品制造工三級安全教育(班組級)考核試卷及答案
- 2025安徽安慶醫(yī)藥高等??茖W(xué)校面向校園招聘21人考前自測高頻考點(diǎn)模擬試題含答案詳解
- 公司儀器儀表裝調(diào)工6S現(xiàn)場管理考核試卷及答案
- 公司婦幼保健員異常處理考核試卷及答案
- 林下經(jīng)濟(jì)項(xiàng)目投資與風(fēng)險(xiǎn)評估方案
- 公司化工蒸餾工工作交接完整性考核試卷及答案
- 大烏龜回家課件
- 建筑節(jié)能施工技術(shù)方案
- 高層廠房建設(shè)的結(jié)構(gòu)設(shè)計(jì)與施工技巧
- 浙江省浙南名校聯(lián)盟2025-2026學(xué)年高三上學(xué)期10月聯(lián)考化學(xué)試題
- 2025廣西送變電建設(shè)有限責(zé)任公司第二批項(xiàng)目制用工招聘89人備考考試題庫附答案解析
- DB11T 2441-2025 學(xué)校食堂清潔和消毒規(guī)范
- 蚊媒傳染病的預(yù)防與控制
- 經(jīng)濟(jì)統(tǒng)計(jì)學(xué)課件
- 馬工程經(jīng)濟(jì)法學(xué)教學(xué)
- “情景教學(xué)法”是小學(xué)英語教學(xué)的最有效方法
- 特種設(shè)備生產(chǎn)和使用單位日、周、月管理制度及填寫表格(模板)
- 工程倫理-核工程的倫理問題
- 壓礦資源調(diào)查報(bào)告
- 公司葡萄圖模板
評論
0/150
提交評論