خانه / درس ۱ سطح متوسط: الگوریتمها و ساختارهای داده مقدماتی در پایتون درس ۱ سطح متوسط: الگوریتمها و ساختارهای داده مقدماتی در پایتون 📅 ۱۴۰۴/۰۸/۲۱ ✍️ سجاد ⌛ 7 دقیقه مطالعه 👁️ 20 پایتون | Python متوسط 🗨️ 🤍 1 📤 0% ‹ بستن لیست دروس بازکردن لیست دروس پایتون | Python متوسط ▾ تبریک! 🎉 تو با موفقیت سطح مبتدی پایتون رو پشت سر گذاشتی و حالا آمادهای که وارد دنیای هیجانانگیز **سطح متوسط** بشی! 🚀 تو درسهای ۱ تا ۱۰ مبتدی (متغیرها، حلقهها، شیءگرایی، پایگاه داده و تست کد) حسابی قوی شدی، اما اگه هنوز اون درسها رو کامل ندیدی، یه نگاهی بهشون بنداز تا پایهت محکمتر بشه! 😎 تو این درس، من بهت یاد میدم چطور با **الگوریتم پایتون** و **ساختارهای داده** کار کنی تا برنامههات سریعتر و بهینهتر بشن. برای مثال، تو میتونی یه لیست رو مرتب کنی یا سریع یه آیتم رو پیدا کنی. با مثالهای عملی، جداول مقایسه، ۱۲ تمرین و یه پروژه جذاب، این درس بهت کمک میکنه مثل یه حرفهای کد بزنی. بریم شروع کنیم! 🎉 الگوریتم پایتون و ساختار داده چیه؟ 🧠 الگوریتم یه دستورالعمل مرحلهبهمرحلهست که یه مشکل رو حل میکنه، مثل دستور پخت غذا. ساختار داده راهیه که تو دادهها رو ذخیره و سازماندهی میکنی، مثل قفسههای کتابخونه. برای مثال، تو میتونی از یه لیست (ساختار داده) برای ذخیره اعداد و از الگوریتم مرتبسازی برای مرتب کردنشون استفاده کنی. علاوه بر این، این مفاهیم این مزایا رو دارن: سرعت: تو برنامههای سریعتر مینویسی. نظم: دادهها رو بهتر مدیریت میکنی. حل مسئله: مشکلات پیچیده رو راحتتر حل میکنی. به همین دلیل، الگوریتمها و ساختارهای داده برای برنامهنویسی حرفهای ضروریه. بیا یه الگوریتم ساده ببینیم: کپیdef find_max(numbers): max_num = numbers[0] for num in numbers: if num > max_num: max_num = num return max_num print(find_max([3, 1, 4, 2])) # خروجی: ۴ بنابراین، تو با این الگوریتم بزرگترین عدد رو پیدا کردی. مرتبسازی: نظم دادن به دادهها 📊 مرتبسازی (Sorting) دادهها رو به ترتیب (مثل صعودی) قرار میده. برای مثال، تو میتونی از الگوریتم **Bubble Sort** استفاده کنی: کپیdef bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr numbers = [64, 34, 25, 12] print(bubble_sort(numbers)) # خروجی: [۱۲, ۲۵, ۳۴, ۶۴] به علاوه، پایتون تابع داخلی sorted() داره: کپیnumbers = [64, 34, 25, 12] print(sorted(numbers)) # خروجی: [۱۲, ۲۵, ۳۴, ۶۴] 💡 نکته: تو باید Bubble Sort رو برای یادگیری الگوریتمها بفهمی، ولی sorted() برای پروژههای واقعی سریعتره. جستوجو: پیدا کردن دادهها 🔍 جستوجو (Searching) به تو کمک میکنه دادهها رو سریع پیدا کنی. برای مثال، الگوریتم **Linear Search** سادهست: کپیdef linear_search(arr, target): for i in range(len(arr)): if arr[i] == target: return i return -1 numbers = [10, 20, 30, 40] print(linear_search(numbers, 30)) # خروجی: ۲ علاوه بر این، اگه لیست مرتب باشه، تو میتونی از **Binary Search** استفاده کنی که سریعتره: کپیdef binary_search(arr, target): left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 numbers = [10, 20, 30, 40] print(binary_search(numbers, 30)) # خروجی: ۲ 💡 نکته: تو باید لیست رو قبل از Binary Search مرتب کنی. ساختارهای داده: پشته و صف 🗃️ پشته (Stack) و صف (Queue) دو ساختار داده مهم هستن. برای مثال، پشته مثل یه بشقاب رویهمچیدهست (آخرین ورودی اول خارج میشه): کپیstack = [] stack.append(1) # اضافه کردن stack.append(2) print(stack.pop()) # خروجی: ۲ به علاوه، صف مثل یه صف نونواییه (اولین ورودی اول خارج میشه): کپیfrom collections import deque queue = deque() queue.append(1) # اضافه کردن queue.append(2) print(queue.popleft()) # خروجی: ۱ بنابراین، تو با این ساختارها دادهها رو بهتر مدیریت میکنی. ترکیب با درسهای قبلی: الگوریتمها و شیءگرایی 🔄 برای مثال، تو میتونی الگوریتمها رو با کلاسها (درس ۷) ترکیب کنی: کپیclass Sorter: def __init__(self, data): self.data = data def bubble_sort(self): arr = self.data.copy() n = len(arr) for i in range(n): for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr sorter = Sorter([64, 34, 25, 12]) print(sorter.bubble_sort()) # خروجی: [۱۲, ۲۵, ۳۴, ۶۴] به همین دلیل، ترکیب الگوریتمها با درسهای قبلی (مثل شیءگرایی) کدت رو حرفهایتر میکنه. مثالهای عملی: دنیای واقعی 💡 برای مثال، بیا چند برنامه کاربردی بسازیم: ۱. مرتبسازی نمرات: کپیdef sort_grades(grades): return sorted(grades) grades = [18, 12, 15, 20] print(sort_grades(grades)) # خروجی: [۱۲, ۱۵, ۱۸, ۲۰] ۲. جستوجوی دانشجو: کپیdef find_student(students, name): for i, student in enumerate(students): if student == name: return i return -1 students = ["علی", "مریم", "رضا"] print(find_student(students, "مریم")) # خروجی: ۱ ۳. مدیریت وظایف با پشته: کپیtasks = [] tasks.append("ایمیل") tasks.append("تمرین") print(tasks.pop()) # خروجی: تمرین به همین دلیل، این مثالها درسهای قبلی (مثل لیستها و حلقهها) رو با الگوریتمها ترکیب میکنن. کدها رو توی intermediate_lesson1_examples.py ذخیره کن. خطاهای رایج و راهحلها ⚠️ به طور کلی، این خطاها تو کار با الگوریتمها شایعن: خطا علت راهحل IndexError دسترسی به ایندکس ناموجود تو باید محدوده لیست رو با len() چک کنی ValueError ورودی نامناسب تو باید نوع داده رو با isinstance() بررسی کنی Infinite Loop شرط حلقه اشتباه تو باید شرط خروج حلقه رو چک کنی برای مثال: کپیdef bad_search(arr, target): for i in range(100): # خطر حلقه بینهایت if arr[i] == target: return i return -1 # حل: def good_search(arr, target): for i in range(len(arr)): if arr[i] == target: return i return -1 تمرینها: مهارتت رو تست کن! 📝 برای تسلط، این ۱۲ تمرین رو حل کن: یه تابع بنویس که کوچکترین عدد رو توی لیست پیدا کنه. یه الگوریتم Bubble Sort برای مرتبسازی نزولی بنویس. یه تابع Linear Search بنویس که تعداد تکرار یه عدد رو بشماره. یه کلاس بساز که Binary Search رو پیاده کنه. یه برنامه بنویس که لیست رو با sorted() مرتب کنه. یه تابع بنویس که پشته رو با لیست پیاده کنه. یه برنامه بنویس که صف رو با deque مدیریت کنه. یه تابع بنویس که میانگین اعداد لیست رو بعد از مرتبسازی بگه. یه کلاس بساز که لیست وظایف رو با پشته مدیریت کنه. یه برنامه بنویس که یه لیست رو جستوجو کنه و همه ایندکسهای تطبیق رو برگردونه. یه تابع بنویس که لیست رو معکوس کنه بدون reverse(). یه برنامه بنویس که دادههای پایگاه داده (درس ۸) رو مرتب کنه. 💡 نکته: هر تمرین رو توی فایل جدا (ex1.py، ex2.py) ذخیره کن. پروژه کوچک: سیستم مدیریت وظایف 📋 برای مثال، بیا یه سیستم برای مدیریت وظایف با پشته بسازیم: اضافه و حذف وظایف. مرتبسازی وظایف. ذخیره در فایل. کپیclass TaskManager: def __init__(self): self.tasks = [] def add_task(self, task): self.tasks.append(task) with open("tasks.txt", "a") as f: f.write(f"{task}\n") print(f"وظیفه {task} اضافه شد!") def remove_task(self): if self.tasks: task = self.tasks.pop() print(f"وظیفه {task} حذف شد!") else: print("هیچ وظیفهای نیست!") def sort_tasks(self): self.tasks = sorted(self.tasks) print("وظایف مرتب شدن!") manager = TaskManager() while True: print("\n=== مدیر وظایف ===") action = input("اضافه (a)، حذف (r)، مرتب (s)، خروج (q): ") if action == "q": break elif action == "a": task = input("وظیفه: ") manager.add_task(task) elif action == "r": manager.remove_task() elif action == "s": manager.sort_tasks() print("خداحافظ!") 💡 تست کن: وظایف رو اضافه کن، مرتب کن و فایل tasks.txt رو چک کن. سؤالات متداول (FAQ) ❓ به طور کلی، این سؤالات برای سطح متوسط رایجه: چرا الگوریتمها مهمن؟ چون تو رو کمک میکنن کد بهینه بنویسی. Binary Search چطور کار میکنه؟ تو لیست مرتب رو نصف میکنی تا داده رو پیدا کنی. چطور خطای الگوریتم رو رفع کنم؟ تو باید ورودیها و حلقهها رو با print چک کنی. پشته و صف چه فرقی دارن؟ پشته LIFO (آخرین ورودی اول خارج) و صف FIFO (اولین ورودی اول خارج) هستن. جمعبندی و قدم بعدی ⏭️ تبریک! 🚀 تو اولین درس سطح متوسط رو با موفقیت تموم کردی و حالا با الگوریتمها و ساختارهای داده حسابی قوی شدی. بنابراین، تو آمادهای که برنامههای بهینهتر بنویسی. علاوه بر این، درس بعدی (رابط کاربری گرافیکی با tkinter) بهت یاد میده چطور برنامههای بصری بسازی. در نهایت، تمرینها رو توی PythonIntermediate ذخیره کن و اگه دوست داشتی، توی GitHub آپلود کن تا پیشرفتت رو نشون بدی! 😎 ← درس قبلی: درس ۸ سطح متوسط: امنیت در پایتون – رمزنگاری، اعتبارسنجی، جلوگیری از حملات و نوشتن کد امن درس بعدی: درس ۲ سطح متوسط: ساخت رابط کاربری گرافیکی (GUI) با tkinter در پایتون → برچسبها: pythonpython algorithmpython data structureالگوریتم پایتونبرنامهنویسی متوسطپایتونجستوجوی پایتونساختار داده پایتونمرتبسازی پایتون ارسال نظر جدید لغو پاسخ ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم.
تبریک! 🎉 تو با موفقیت سطح مبتدی پایتون رو پشت سر گذاشتی و حالا آمادهای که وارد دنیای هیجانانگیز **سطح متوسط** بشی! 🚀 تو درسهای ۱ تا ۱۰ مبتدی (متغیرها، حلقهها، شیءگرایی، پایگاه داده و تست کد) حسابی قوی شدی، اما اگه هنوز اون درسها رو کامل ندیدی، یه نگاهی بهشون بنداز تا پایهت محکمتر بشه! 😎 تو این درس، من بهت یاد میدم چطور با **الگوریتم پایتون** و **ساختارهای داده** کار کنی تا برنامههات سریعتر و بهینهتر بشن. برای مثال، تو میتونی یه لیست رو مرتب کنی یا سریع یه آیتم رو پیدا کنی. با مثالهای عملی، جداول مقایسه، ۱۲ تمرین و یه پروژه جذاب، این درس بهت کمک میکنه مثل یه حرفهای کد بزنی. بریم شروع کنیم! 🎉 الگوریتم پایتون و ساختار داده چیه؟ 🧠 الگوریتم یه دستورالعمل مرحلهبهمرحلهست که یه مشکل رو حل میکنه، مثل دستور پخت غذا. ساختار داده راهیه که تو دادهها رو ذخیره و سازماندهی میکنی، مثل قفسههای کتابخونه. برای مثال، تو میتونی از یه لیست (ساختار داده) برای ذخیره اعداد و از الگوریتم مرتبسازی برای مرتب کردنشون استفاده کنی. علاوه بر این، این مفاهیم این مزایا رو دارن: سرعت: تو برنامههای سریعتر مینویسی. نظم: دادهها رو بهتر مدیریت میکنی. حل مسئله: مشکلات پیچیده رو راحتتر حل میکنی. به همین دلیل، الگوریتمها و ساختارهای داده برای برنامهنویسی حرفهای ضروریه. بیا یه الگوریتم ساده ببینیم: کپیdef find_max(numbers): max_num = numbers[0] for num in numbers: if num > max_num: max_num = num return max_num print(find_max([3, 1, 4, 2])) # خروجی: ۴ بنابراین، تو با این الگوریتم بزرگترین عدد رو پیدا کردی. مرتبسازی: نظم دادن به دادهها 📊 مرتبسازی (Sorting) دادهها رو به ترتیب (مثل صعودی) قرار میده. برای مثال، تو میتونی از الگوریتم **Bubble Sort** استفاده کنی: کپیdef bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr numbers = [64, 34, 25, 12] print(bubble_sort(numbers)) # خروجی: [۱۲, ۲۵, ۳۴, ۶۴] به علاوه، پایتون تابع داخلی sorted() داره: کپیnumbers = [64, 34, 25, 12] print(sorted(numbers)) # خروجی: [۱۲, ۲۵, ۳۴, ۶۴] 💡 نکته: تو باید Bubble Sort رو برای یادگیری الگوریتمها بفهمی، ولی sorted() برای پروژههای واقعی سریعتره. جستوجو: پیدا کردن دادهها 🔍 جستوجو (Searching) به تو کمک میکنه دادهها رو سریع پیدا کنی. برای مثال، الگوریتم **Linear Search** سادهست: کپیdef linear_search(arr, target): for i in range(len(arr)): if arr[i] == target: return i return -1 numbers = [10, 20, 30, 40] print(linear_search(numbers, 30)) # خروجی: ۲ علاوه بر این، اگه لیست مرتب باشه، تو میتونی از **Binary Search** استفاده کنی که سریعتره: کپیdef binary_search(arr, target): left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 numbers = [10, 20, 30, 40] print(binary_search(numbers, 30)) # خروجی: ۲ 💡 نکته: تو باید لیست رو قبل از Binary Search مرتب کنی. ساختارهای داده: پشته و صف 🗃️ پشته (Stack) و صف (Queue) دو ساختار داده مهم هستن. برای مثال، پشته مثل یه بشقاب رویهمچیدهست (آخرین ورودی اول خارج میشه): کپیstack = [] stack.append(1) # اضافه کردن stack.append(2) print(stack.pop()) # خروجی: ۲ به علاوه، صف مثل یه صف نونواییه (اولین ورودی اول خارج میشه): کپیfrom collections import deque queue = deque() queue.append(1) # اضافه کردن queue.append(2) print(queue.popleft()) # خروجی: ۱ بنابراین، تو با این ساختارها دادهها رو بهتر مدیریت میکنی. ترکیب با درسهای قبلی: الگوریتمها و شیءگرایی 🔄 برای مثال، تو میتونی الگوریتمها رو با کلاسها (درس ۷) ترکیب کنی: کپیclass Sorter: def __init__(self, data): self.data = data def bubble_sort(self): arr = self.data.copy() n = len(arr) for i in range(n): for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr sorter = Sorter([64, 34, 25, 12]) print(sorter.bubble_sort()) # خروجی: [۱۲, ۲۵, ۳۴, ۶۴] به همین دلیل، ترکیب الگوریتمها با درسهای قبلی (مثل شیءگرایی) کدت رو حرفهایتر میکنه. مثالهای عملی: دنیای واقعی 💡 برای مثال، بیا چند برنامه کاربردی بسازیم: ۱. مرتبسازی نمرات: کپیdef sort_grades(grades): return sorted(grades) grades = [18, 12, 15, 20] print(sort_grades(grades)) # خروجی: [۱۲, ۱۵, ۱۸, ۲۰] ۲. جستوجوی دانشجو: کپیdef find_student(students, name): for i, student in enumerate(students): if student == name: return i return -1 students = ["علی", "مریم", "رضا"] print(find_student(students, "مریم")) # خروجی: ۱ ۳. مدیریت وظایف با پشته: کپیtasks = [] tasks.append("ایمیل") tasks.append("تمرین") print(tasks.pop()) # خروجی: تمرین به همین دلیل، این مثالها درسهای قبلی (مثل لیستها و حلقهها) رو با الگوریتمها ترکیب میکنن. کدها رو توی intermediate_lesson1_examples.py ذخیره کن. خطاهای رایج و راهحلها ⚠️ به طور کلی، این خطاها تو کار با الگوریتمها شایعن: خطا علت راهحل IndexError دسترسی به ایندکس ناموجود تو باید محدوده لیست رو با len() چک کنی ValueError ورودی نامناسب تو باید نوع داده رو با isinstance() بررسی کنی Infinite Loop شرط حلقه اشتباه تو باید شرط خروج حلقه رو چک کنی برای مثال: کپیdef bad_search(arr, target): for i in range(100): # خطر حلقه بینهایت if arr[i] == target: return i return -1 # حل: def good_search(arr, target): for i in range(len(arr)): if arr[i] == target: return i return -1 تمرینها: مهارتت رو تست کن! 📝 برای تسلط، این ۱۲ تمرین رو حل کن: یه تابع بنویس که کوچکترین عدد رو توی لیست پیدا کنه. یه الگوریتم Bubble Sort برای مرتبسازی نزولی بنویس. یه تابع Linear Search بنویس که تعداد تکرار یه عدد رو بشماره. یه کلاس بساز که Binary Search رو پیاده کنه. یه برنامه بنویس که لیست رو با sorted() مرتب کنه. یه تابع بنویس که پشته رو با لیست پیاده کنه. یه برنامه بنویس که صف رو با deque مدیریت کنه. یه تابع بنویس که میانگین اعداد لیست رو بعد از مرتبسازی بگه. یه کلاس بساز که لیست وظایف رو با پشته مدیریت کنه. یه برنامه بنویس که یه لیست رو جستوجو کنه و همه ایندکسهای تطبیق رو برگردونه. یه تابع بنویس که لیست رو معکوس کنه بدون reverse(). یه برنامه بنویس که دادههای پایگاه داده (درس ۸) رو مرتب کنه. 💡 نکته: هر تمرین رو توی فایل جدا (ex1.py، ex2.py) ذخیره کن. پروژه کوچک: سیستم مدیریت وظایف 📋 برای مثال، بیا یه سیستم برای مدیریت وظایف با پشته بسازیم: اضافه و حذف وظایف. مرتبسازی وظایف. ذخیره در فایل. کپیclass TaskManager: def __init__(self): self.tasks = [] def add_task(self, task): self.tasks.append(task) with open("tasks.txt", "a") as f: f.write(f"{task}\n") print(f"وظیفه {task} اضافه شد!") def remove_task(self): if self.tasks: task = self.tasks.pop() print(f"وظیفه {task} حذف شد!") else: print("هیچ وظیفهای نیست!") def sort_tasks(self): self.tasks = sorted(self.tasks) print("وظایف مرتب شدن!") manager = TaskManager() while True: print("\n=== مدیر وظایف ===") action = input("اضافه (a)، حذف (r)، مرتب (s)، خروج (q): ") if action == "q": break elif action == "a": task = input("وظیفه: ") manager.add_task(task) elif action == "r": manager.remove_task() elif action == "s": manager.sort_tasks() print("خداحافظ!") 💡 تست کن: وظایف رو اضافه کن، مرتب کن و فایل tasks.txt رو چک کن. سؤالات متداول (FAQ) ❓ به طور کلی، این سؤالات برای سطح متوسط رایجه: چرا الگوریتمها مهمن؟ چون تو رو کمک میکنن کد بهینه بنویسی. Binary Search چطور کار میکنه؟ تو لیست مرتب رو نصف میکنی تا داده رو پیدا کنی. چطور خطای الگوریتم رو رفع کنم؟ تو باید ورودیها و حلقهها رو با print چک کنی. پشته و صف چه فرقی دارن؟ پشته LIFO (آخرین ورودی اول خارج) و صف FIFO (اولین ورودی اول خارج) هستن. جمعبندی و قدم بعدی ⏭️ تبریک! 🚀 تو اولین درس سطح متوسط رو با موفقیت تموم کردی و حالا با الگوریتمها و ساختارهای داده حسابی قوی شدی. بنابراین، تو آمادهای که برنامههای بهینهتر بنویسی. علاوه بر این، درس بعدی (رابط کاربری گرافیکی با tkinter) بهت یاد میده چطور برنامههای بصری بسازی. در نهایت، تمرینها رو توی PythonIntermediate ذخیره کن و اگه دوست داشتی، توی GitHub آپلود کن تا پیشرفتت رو نشون بدی! 😎 ← درس قبلی: درس ۸ سطح متوسط: امنیت در پایتون – رمزنگاری، اعتبارسنجی، جلوگیری از حملات و نوشتن کد امن درس بعدی: درس ۲ سطح متوسط: ساخت رابط کاربری گرافیکی (GUI) با tkinter در پایتون → برچسبها: pythonpython algorithmpython data structureالگوریتم پایتونبرنامهنویسی متوسطپایتونجستوجوی پایتونساختار داده پایتونمرتبسازی پایتون