ساخت اسکریپت مدیریت وظایف با پایتون: اتوماسیون و اسکریپت‌نویسی

ساخت اسکریپت مدیریت وظایف با پایتون: اتوماسیون و اسکریپت‌نویسی

در دنیای پرمشغله امروز، مدیریت وظایف به یک نیاز اساسی تبدیل شده است. ابزارهای مختلفی برای این منظور وجود دارند، اما گاهی اوقات نیاز به یک راه حل سفارشی و متناسب با نیازهای خاص خود داریم. پایتون، با سادگی و قدرت خود، یک انتخاب عالی برای ساخت چنین ابزاری است. این مقاله به شما آموزش می‌دهد که چگونه یک اسکریپت ساده اما کارآمد برای مدیریت وظایف با پایتون ایجاد کنید. این آموزش در دسته بندی ‘اتوماسیون و اسکریپت‌نویسی’ قرار می‌گیرد و برای افراد مبتدی تا متوسط در پایتون مناسب است.

پیش‌نیازها

قبل از شروع، اطمینان حاصل کنید که موارد زیر را دارید:

  • پایتون نصب شده بر روی سیستم شما (نسخه 3.6 یا بالاتر توصیه می‌شود).
  • یک ویرایشگر متن یا IDE برای نوشتن کد پایتون (مانند VS Code، PyCharm، Sublime Text).
  • آشنایی اولیه با مفاهیم برنامه‌نویسی پایتون مانند متغیرها، حلقه‌ها، شرط‌ها و توابع.

طراحی اسکریپت

اسکریپت ما باید قابلیت‌های زیر را داشته باشد:

  • اضافه کردن وظیفه جدید
  • نمایش لیست وظایف
  • علامت‌گذاری وظیفه به عنوان انجام شده
  • حذف وظیفه
  • ذخیره وظایف در یک فایل
  • بارگیری وظایف از فایل

پیاده‌سازی اسکریپت

بیایید قدم به قدم اسکریپت را پیاده‌سازی کنیم.

1. ساختار داده برای وظایف

ابتدا، یک ساختار داده برای ذخیره وظایف تعریف می‌کنیم. می‌توانیم از یک لیست از دیکشنری‌ها استفاده کنیم. هر دیکشنری نشان‌دهنده یک وظیفه است و شامل اطلاعاتی مانند عنوان، توضیحات و وضعیت (انجام شده یا نشده) خواهد بود.

tasks = []

def add_task(title, description):
    task = {
        'title': title,
        'description': description,
        'completed': False
    }
    tasks.append(task)
    print(f"وظیفه '{title}' اضافه شد.")

2. نمایش لیست وظایف

تابع زیر لیست وظایف را نمایش می‌دهد. اگر وظیفه‌ای انجام شده باشد، آن را با علامت [X] و در غیر این صورت با علامت [ ] نشان می‌دهیم.

def view_tasks():
    if not tasks:
        print("هیچ وظیفه‌ای وجود ندارد.")
        return

    print("لیست وظایف:")
    for index, task in enumerate(tasks):
        status = "[X]" if task['completed'] else "[ ]"
        print(f"{index + 1}. {status} {task['title']} - {task['description']}")

3. علامت‌گذاری وظیفه به عنوان انجام شده

تابع زیر به کاربر اجازه می‌دهد تا یک وظیفه را به عنوان انجام شده علامت‌گذاری کند.

def complete_task(task_index):
    try:
        task_index = int(task_index) - 1
        if 0 <= task_index < len(tasks):
            tasks[task_index]['completed'] = True
            print(f"وظیفه '{tasks[task_index]['title']}' به عنوان انجام شده علامت‌گذاری شد.")
        else:
            print("شماره وظیفه نامعتبر است.")
    except ValueError:
        print("لطفاً یک عدد معتبر وارد کنید.")

4. حذف وظیفه

تابع زیر به کاربر اجازه می‌دهد تا یک وظیفه را حذف کند.

def delete_task(task_index):
    try:
        task_index = int(task_index) - 1
        if 0 <= task_index < len(tasks):
            deleted_task = tasks.pop(task_index)
            print(f"وظیفه '{deleted_task['title']}' حذف شد.")
        else:
            print("شماره وظیفه نامعتبر است.")
    except ValueError:
        print("لطفاً یک عدد معتبر وارد کنید.")

5. ذخیره و بارگیری وظایف از فایل

برای اینکه وظایف پس از بسته شدن اسکریپت از بین نروند، آن‌ها را در یک فایل ذخیره می‌کنیم. از فرمت JSON برای ذخیره و بارگیری داده‌ها استفاده می‌کنیم.

import json

def save_tasks(filename="tasks.json"):
    with open(filename, 'w', encoding='utf-8') as f:
        json.dump(tasks, f, ensure_ascii=False, indent=4)
    print("وظایف ذخیره شدند.")

def load_tasks(filename="tasks.json"):
    global tasks
    try:
        with open(filename, 'r', encoding='utf-8') as f:
            tasks = json.load(f)
        print("وظایف بارگیری شدند.")
    except FileNotFoundError:
        print("فایل وظایف یافت نشد. لیست وظایف خالی است.")

6. حلقه اصلی اسکریپت

حلقه اصلی اسکریپت به کاربر اجازه می‌دهد تا با اسکریپت تعامل داشته باشد و عملیات مختلف را انجام دهد.

def main():
    load_tasks()

    while True:
        print("nمنوی اصلی:")
        print("1. اضافه کردن وظیفه")
        print("2. نمایش لیست وظایف")
        print("3. علامت‌گذاری وظیفه به عنوان انجام شده")
        print("4. حذف وظیفه")
        print("5. ذخیره و خروج")

        choice = input("انتخاب کنید: ")

        if choice == '1':
            title = input("عنوان وظیفه را وارد کنید: ")
            description = input("توضیحات وظیفه را وارد کنید: ")
            add_task(title, description)
        elif choice == '2':
            view_tasks()
        elif choice == '3':
            task_index = input("شماره وظیفه‌ای که می‌خواهید به عنوان انجام شده علامت‌گذاری کنید را وارد کنید: ")
            complete_task(task_index)
        elif choice == '4':
            task_index = input("شماره وظیفه‌ای که می‌خواهید حذف کنید را وارد کنید: ")
            delete_task(task_index)
        elif choice == '5':
            save_tasks()
            break
        else:
            print("انتخاب نامعتبر است.")

if __name__ == "__main__":
    main()

توضیحات تکمیلی

در این اسکریپت، از توابع برای سازماندهی کد و افزایش قابلیت استفاده آن استفاده کرده‌ایم. همچنین، از مدیریت خطا (try-except) برای جلوگیری از بروز خطا در صورت ورود داده‌های نامعتبر توسط کاربر استفاده شده است. استفاده از `ensure_ascii=False` در `json.dump` تضمین می‌کند که کاراکترهای فارسی به درستی ذخیره شوند. `indent=4` باعث می‌شود فایل JSON خواناتر باشد.

بهبودهای پیشنهادی

این اسکریپت یک نقطه شروع خوب است، اما می‌توان آن را با افزودن قابلیت‌های بیشتر بهبود بخشید. برخی از پیشنهادات عبارتند از:

  • اضافه کردن تاریخ سررسید به وظایف
  • اولویت‌بندی وظایف
  • امکان ویرایش وظایف
  • استفاده از یک رابط کاربری گرافیکی (GUI) به جای رابط خط فرمان
  • ذخیره وظایف در یک پایگاه داده

نتیجه‌گیری

در این مقاله، یاد گرفتیم که چگونه یک اسکریپت ساده اما کارآمد برای مدیریت وظایف با پایتون ایجاد کنیم. این اسکریپت می‌تواند به شما کمک کند تا وظایف خود را سازماندهی کنید و بهره‌وری خود را افزایش دهید. با استفاده از مفاهیم و تکنیک‌های ارائه شده در این مقاله، می‌توانید اسکریپت را سفارشی‌سازی کنید و قابلیت‌های بیشتری به آن اضافه کنید تا نیازهای خاص خود را برآورده کنید. این پروژه یک مثال عالی از کاربرد پایتون در اتوماسیون و اسکریپت‌نویسی است.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *