如何使用python編寫(xiě)一個(gè)簡(jiǎn)單的課時(shí)記錄系統(tǒng)
前言
在學(xué)習(xí)過(guò)程中,跟蹤課時(shí)的進(jìn)度是非常重要的。為了方便記錄和管理課時(shí)信息,我們可以使用Python編寫(xiě)一個(gè)簡(jiǎn)單的課時(shí)記錄系統(tǒng)。這個(gè)系統(tǒng)將允許用戶添加新的課程、記錄已完成的課時(shí),以及查看已完成課時(shí)的統(tǒng)計(jì)信息。
功能概述
- 添加新的課程
- 記錄已完成的課時(shí)
- 查看已完成課時(shí)的統(tǒng)計(jì)信息
實(shí)現(xiàn)步驟
步驟一:創(chuàng)建課程類
首先,我們需要?jiǎng)?chuàng)建一個(gè)課程類來(lái)表示課程對(duì)象。每個(gè)課程將包含名稱和總課時(shí)數(shù)。
class Course: def __init__(self, name, total_hours): self.name = name self.total_hours = total_hours
步驟二:創(chuàng)建課時(shí)記錄系統(tǒng)類
然后,我們創(chuàng)建一個(gè)課時(shí)記錄系統(tǒng)類,該類將管理課程列表和已完成的課時(shí)記錄。
class CourseTracker: def __init__(self): self.courses = [] def add_course(self, course): self.courses.append(course) def record_hours(self, course_name, hours_completed): for course in self.courses: if course.name == course_name: course.total_hours -= hours_completed break def get_course_status(self, course_name): for course in self.courses: if course.name == course_name: return course.total_hours
步驟三:使用課時(shí)記錄系統(tǒng)
現(xiàn)在,我們可以使用我們創(chuàng)建的課時(shí)記錄系統(tǒng)來(lái)添加課程、記錄已完成的課時(shí)和查看課程狀態(tài)。
# 創(chuàng)建課時(shí)記錄系統(tǒng)對(duì)象 tracker = CourseTracker() # 添加課程 tracker.add_course(Course("Python Programming", 20)) tracker.add_course(Course("Data Science", 30)) # 記錄已完成的課時(shí) tracker.record_hours("Python Programming", 5) tracker.record_hours("Data Science", 10) # 查看課程狀態(tài) print("Python Programming Course Hours Left:", tracker.get_course_status("Python Programming")) print("Data Science Course Hours Left:", tracker.get_course_status("Data Science"))
實(shí)現(xiàn)進(jìn)階功能
1. 保存和加載課程數(shù)據(jù)
我們可以將課程數(shù)據(jù)保存到文件中,以便下次程序運(yùn)行時(shí)加載已保存的課程信息。
import pickle class CourseTracker: def __init__(self): self.courses = [] def add_course(self, course): self.courses.append(course) def record_hours(self, course_name, hours_completed): for course in self.courses: if course.name == course_name: course.total_hours -= hours_completed break def get_course_status(self, course_name): for course in self.courses: if course.name == course_name: return course.total_hours def save_data(self, filename): with open(filename, 'wb') as f: pickle.dump(self.courses, f) def load_data(self, filename): with open(filename, 'rb') as f: self.courses = pickle.load(f)
2. 用戶界面改進(jìn)
添加一個(gè)簡(jiǎn)單的用戶界面,使用戶可以更直觀地與系統(tǒng)交互。
def main(): tracker = CourseTracker() tracker.load_data("courses_data.pkl") # 加載已保存的課程數(shù)據(jù) while True: print("\nWelcome to Course Tracker System") print("1. Add Course") print("2. Record Hours") print("3. View Course Status") print("4. Save and Exit") choice = input("Enter your choice: ") if choice == "1": name = input("Enter course name: ") hours = int(input("Enter total hours: ")) tracker.add_course(Course(name, hours)) print("Course added successfully!") elif choice == "2": name = input("Enter course name: ") hours_completed = int(input("Enter hours completed: ")) tracker.record_hours(name, hours_completed) print("Hours recorded successfully!") elif choice == "3": name = input("Enter course name: ") hours_left = tracker.get_course_status(name) print(f"Hours left for {name}: {hours_left}") elif choice == "4": tracker.save_data("courses_data.pkl") # 保存課程數(shù)據(jù) print("Data saved. Exiting...") break else: print("Invalid choice. Please try again.") if __name__ == "__main__": main()
3. 統(tǒng)計(jì)課程完成情況
添加一個(gè)功能,統(tǒng)計(jì)所有課程的完成情況,顯示已完成的課時(shí)數(shù)和剩余課時(shí)數(shù)。
class CourseTracker: def __init__(self): self.courses = [] def add_course(self, course): self.courses.append(course) def record_hours(self, course_name, hours_completed): for course in self.courses: if course.name == course_name: course.total_hours -= hours_completed break def get_course_status(self, course_name): for course in self.courses: if course.name == course_name: return course.total_hours def save_data(self, filename): with open(filename, 'wb') as f: pickle.dump(self.courses, f) def load_data(self, filename): with open(filename, 'rb') as f: self.courses = pickle.load(f) def get_overall_status(self): print("Overall Course Status:") for course in self.courses: print(f"{course.name}: Completed {course.total_hours} hours, Remaining {course.total_hours} hours")
4. 添加異常處理
為了提高系統(tǒng)的健壯性,我們可以添加一些異常處理機(jī)制,處理用戶可能輸入的錯(cuò)誤信息。
def main(): tracker = CourseTracker() try: tracker.load_data("courses_data.pkl") # 加載已保存的課程數(shù)據(jù) except FileNotFoundError: print("No existing data found. Starting with an empty course list.") while True: print("\nWelcome to Course Tracker System") print("1. Add Course") print("2. Record Hours") print("3. View Course Status") print("4. View Overall Status") print("5. Save and Exit") choice = input("Enter your choice: ") if choice == "1": try: name = input("Enter course name: ") hours = int(input("Enter total hours: ")) tracker.add_course(Course(name, hours)) print("Course added successfully!") except ValueError: print("Invalid input! Please enter a valid number for total hours.") elif choice == "2": name = input("Enter course name: ") try: hours_completed = int(input("Enter hours completed: ")) tracker.record_hours(name, hours_completed) print("Hours recorded successfully!") except ValueError: print("Invalid input! Please enter a valid number for hours completed.") elif choice == "3": name = input("Enter course name: ") hours_left = tracker.get_course_status(name) if hours_left is not None: print(f"Hours left for {name}: {hours_left}") else: print("Course not found!") elif choice == "4": tracker.get_overall_status() elif choice == "5": tracker.save_data("courses_data.pkl") # 保存課程數(shù)據(jù) print("Data saved. Exiting...") break else: print("Invalid choice. Please try again.") if __name__ == "__main__": main()
5. 用戶友好的界面優(yōu)化
改進(jìn)用戶界面,使其更加友好和直觀。
def display_menu(): print("\nWelcome to Course Tracker System") print("1. Add Course") print("2. Record Hours") print("3. View Course Status") print("4. View Overall Status") print("5. Save and Exit") def main(): tracker = CourseTracker() try: tracker.load_data("courses_data.pkl") # 加載已保存的課程數(shù)據(jù) except FileNotFoundError: print("No existing data found. Starting with an empty course list.") while True: display_menu() choice = input("Enter your choice: ") if choice == "1": add_course_menu(tracker) elif choice == "2": record_hours_menu(tracker) elif choice == "3": view_course_status_menu(tracker) elif choice == "4": tracker.get_overall_status() elif choice == "5": tracker.save_data("courses_data.pkl") # 保存課程數(shù)據(jù) print("Data saved. Exiting...") break else: print("Invalid choice. Please try again.") def add_course_menu(tracker): print("\nAdd Course") name = input("Enter course name: ") while True: try: hours = int(input("Enter total hours: ")) break except ValueError: print("Invalid input! Please enter a valid number for total hours.") tracker.add_course(Course(name, hours)) print("Course added successfully!") def record_hours_menu(tracker): print("\nRecord Hours") name = input("Enter course name: ") while True: try: hours_completed = int(input("Enter hours completed: ")) break except ValueError: print("Invalid input! Please enter a valid number for hours completed.") tracker.record_hours(name, hours_completed) print("Hours recorded successfully!") def view_course_status_menu(tracker): print("\nView Course Status") name = input("Enter course name: ") hours_left = tracker.get_course_status(name) if hours_left is not None: print(f"Hours left for {name}: {hours_left}") else: print("Course not found!") if __name__ == "__main__": main()
6. 添加刪除課程功能
允許用戶刪除已添加的課程。
class CourseTracker: # ... existing code ... def delete_course(self, course_name): for course in self.courses: if course.name == course_name: self.courses.remove(course) print(f"Course '{course_name}' deleted successfully!") break else: print("Course not found!") def delete_course_menu(tracker): print("\nDelete Course") name = input("Enter course name to delete: ") tracker.delete_course(name)
7. 添加提醒功能
為了幫助用戶更好地管理學(xué)習(xí)進(jìn)度,我們可以添加一個(gè)提醒功能,當(dāng)課程的剩余課時(shí)少于設(shè)定閾值時(shí),系統(tǒng)會(huì)提醒用戶。
class CourseTracker: # ... existing code ... def set_reminder_threshold(self, course_name, threshold): for course in self.courses: if course.name == course_name: course.reminder_threshold = threshold print(f"Reminder threshold set for '{course_name}'") break else: print("Course not found!") def check_reminder(self): for course in self.courses: if course.total_hours <= course.reminder_threshold: print(f"Reminder: '{course.name}' has {course.total_hours} hours remaining!") def set_reminder_threshold_menu(tracker): print("\nSet Reminder Threshold") name = input("Enter course name: ") while True: try: threshold = int(input("Enter reminder threshold: ")) break except ValueError: print("Invalid input! Please enter a valid number for the threshold.") tracker.set_reminder_threshold(name, threshold) def main(): tracker = CourseTracker() try: tracker.load_data("courses_data.pkl") # 加載已保存的課程數(shù)據(jù) except FileNotFoundError: print("No existing data found. Starting with an empty course list.") while True: display_menu() choice = input("Enter your choice: ") if choice == "1": add_course_menu(tracker) elif choice == "2": record_hours_menu(tracker) elif choice == "3": view_course_status_menu(tracker) elif choice == "4": set_reminder_threshold_menu(tracker) elif choice == "5": tracker.get_overall_status() elif choice == "6": tracker.check_reminder() elif choice == "7": tracker.save_data("courses_data.pkl") # 保存課程數(shù)據(jù) print("Data saved. Exiting...") break else: print("Invalid choice. Please try again.")
8. 多用戶支持
允許多個(gè)用戶使用系統(tǒng),每個(gè)用戶有獨(dú)立的課程記錄。
class CourseTracker: def __init__(self): self.users = {} def add_user(self, username): if username not in self.users: self.users[username] = [] def add_course(self, username, course): self.users[username].append(course) # ... other methods ... def add_user_menu(tracker): print("\nAdd User") username = input("Enter username: ") tracker.add_user(username) print(f"User '{username}' added successfully!") def add_course_menu(tracker): print("\nAdd Course") username = input("Enter username: ") if username not in tracker.users: print("User not found!") return name = input("Enter course name: ") while True: try: hours = int(input("Enter total hours: ")) break except ValueError: print("Invalid input! Please enter a valid number for total hours.") tracker.add_course(username, Course(name, hours)) print("Course added successfully!")
總結(jié)
在本文中,我們使用Python創(chuàng)建了一個(gè)簡(jiǎn)單而實(shí)用的課時(shí)記錄系統(tǒng)。通過(guò)這個(gè)系統(tǒng),用戶可以輕松地管理課程進(jìn)度,記錄已完成的課時(shí),并且可以方便地查看課程狀態(tài)和統(tǒng)計(jì)信息。我們從基本功能開(kāi)始,逐步添加了一些進(jìn)階功能,如保存和加載課程數(shù)據(jù)、統(tǒng)計(jì)課程完成情況、友好的用戶界面優(yōu)化以及提醒功能和多用戶支持等。這些功能的添加使得系統(tǒng)更加智能、靈活和實(shí)用,滿足了不同用戶的需求。
通過(guò)學(xué)習(xí)本文,讀者不僅可以掌握Python編程語(yǔ)言的基本語(yǔ)法和面向?qū)ο缶幊痰幕靖拍?,還可以了解如何設(shè)計(jì)和構(gòu)建一個(gè)簡(jiǎn)單但功能強(qiáng)大的應(yīng)用程序。此外,讀者還可以從中學(xué)習(xí)到如何通過(guò)不斷改進(jìn)和拓展來(lái)完善一個(gè)項(xiàng)目,以及如何處理用戶可能遇到的各種情況和錯(cuò)誤。
到此這篇關(guān)于如何使用python編寫(xiě)一個(gè)簡(jiǎn)單的課時(shí)記錄系統(tǒng)的文章就介紹到這了,更多相關(guān)python課時(shí)記錄系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
DataFrame數(shù)據(jù)框模糊查詢與去重方式
數(shù)據(jù)框模糊查詢通常使用contains函數(shù)和正則表達(dá)式來(lái)實(shí)現(xiàn),可以查詢以某個(gè)字符開(kāi)頭、包含或結(jié)尾的數(shù)據(jù),若數(shù)據(jù)類型不一致可能會(huì)報(bào)錯(cuò),需統(tǒng)一為str類型,數(shù)據(jù)框去重則通過(guò)drop_duplicates函數(shù)實(shí)現(xiàn),可指定列進(jìn)行去重,并有多種處理重復(fù)值的方式2024-09-09Tornado協(xié)程在python2.7如何返回值(實(shí)現(xiàn)方法)
下面小編就為大家?guī)?lái)一篇Tornado協(xié)程在python2.7如何返回值(實(shí)現(xiàn)方法)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Python函數(shù)的定義方式與函數(shù)參數(shù)問(wèn)題實(shí)例分析
這篇文章主要介紹了Python函數(shù)的定義方式與函數(shù)參數(shù)問(wèn)題,結(jié)合實(shí)例形式詳細(xì)分析了Python函數(shù)定義、函數(shù)參數(shù)相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-12-12Django實(shí)現(xiàn)WebSocket在線聊天室功能(channels庫(kù))
本文基于channels庫(kù)Django實(shí)現(xiàn)WebSocket在線聊天室功能,包括安裝及創(chuàng)建django項(xiàng)目的全過(guò)程,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Python函數(shù)的參數(shù)常見(jiàn)分類與用法實(shí)例詳解
這篇文章主要介紹了Python函數(shù)的參數(shù)常見(jiàn)分類與用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python函數(shù)的形參、實(shí)參、默認(rèn)參數(shù)、可變參數(shù)等概念、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-03-03Python+Pygame實(shí)戰(zhàn)之俄羅斯方塊游戲的實(shí)現(xiàn)
俄羅斯方塊,作為是一款家喻戶曉的游戲,陪伴70、80甚至90后,度過(guò)無(wú)憂的兒時(shí)歲月,它上手簡(jiǎn)單能自由組合、拼接技巧也很多。本文就來(lái)用Python中的Pygame模塊實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下2022-12-12Python實(shí)現(xiàn)投影法分割圖像示例(二)
今天小編就為大家分享一篇Python實(shí)現(xiàn)投影法分割圖像示例(二),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01