├── .idea ├── .gitignore ├── inspectionProfiles │ └── profiles_settings.xml ├── material_theme_project_new.xml ├── misc.xml ├── modules.xml ├── todo-py.iml └── vcs.xml ├── data.json └── main.py /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/material_theme_project_new.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/todo-py.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "test-my-project", 4 | "done": false 5 | }, 6 | { 7 | "title": "push-and-pull-project-in-repository", 8 | "done": false 9 | }, 10 | { 11 | "title": "publish-project-in-server-arvanClude", 12 | "done": true 13 | }, 14 | { 15 | "title": "for-test", 16 | "done": false 17 | }, 18 | { 19 | "title": "for-exam", 20 | "done": true 21 | } 22 | ] -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | 4 | DATA_FILE = "data.json" 5 | 6 | def load_tasks(): 7 | if os.path.exists(DATA_FILE): 8 | with open(DATA_FILE, "r") as f: 9 | return json.load(f) 10 | return [] 11 | 12 | def save_tasks(tasks): 13 | with open(DATA_FILE, "w") as f: 14 | json.dump(tasks, f, indent=2) 15 | 16 | def list_tasks(tasks): 17 | if not tasks: 18 | print("هیچ کاری وجود ندارد.") 19 | else: 20 | print("\nلیست کارها:") 21 | for i, task in enumerate(tasks, start=1): 22 | status = "✅" if task["done"] else "❌" 23 | print(f"{i}. {task['title']} [{status}]") 24 | print() 25 | 26 | def add_task(tasks): 27 | title = input("عنوان کار جدید را وارد کن: ") 28 | tasks.append({"title": title, "done": False}) 29 | save_tasks(tasks) 30 | print("کار اضافه شد.\n") 31 | 32 | def mark_done(tasks): 33 | list_tasks(tasks) 34 | try: 35 | number = int(input("شماره کاری که انجام شده را وارد کن: ")) 36 | if 1 <= number <= len(tasks): 37 | tasks[number - 1]["done"] = True 38 | save_tasks(tasks) 39 | print("با موفقیت علامت‌گذاری شد.\n") 40 | else: 41 | print("شماره نامعتبر.\n") 42 | except ValueError: 43 | print("ورودی باید عدد باشد.\n") 44 | 45 | def delete_task(tasks): 46 | list_tasks(tasks) 47 | try: 48 | number = int(input("شماره کاری که می‌خواهی حذف کنی را وارد کن: ")) 49 | if 1 <= number <= len(tasks): 50 | removed = tasks.pop(number - 1) 51 | save_tasks(tasks) 52 | print(f"«{removed['title']}» حذف شد.\n") 53 | else: 54 | print("شماره نامعتبر.\n") 55 | except ValueError: 56 | print("ورودی باید عدد باشد.\n") 57 | 58 | def main(): 59 | tasks = load_tasks() 60 | while True: 61 | print("=== مدیر لیست کارها ===") 62 | print("1. نمایش کارها") 63 | print("2. افزودن کار جدید") 64 | print("3. علامت‌گذاری انجام‌شده") 65 | print("4. حذف کار") 66 | print("5. خروج") 67 | 68 | choice = input("انتخاب شما: ") 69 | 70 | if choice == "1": 71 | list_tasks(tasks) 72 | elif choice == "2": 73 | add_task(tasks) 74 | elif choice == "3": 75 | mark_done(tasks) 76 | elif choice == "4": 77 | delete_task(tasks) 78 | elif choice == "5": 79 | print("خروج از برنامه. موفق باشی! 👋") 80 | break 81 | else: 82 | print("گزینه نامعتبر است.\n") 83 | 84 | if __name__ == "__main__": 85 | main() 86 | 87 | 88 | # update featureTodo 89 | --------------------------------------------------------------------------------