سهراب خان‌بدر | Sohrab Khanbadr
سهراب خان‌بدر | Sohrab Khanbadr
خواندن ۵ دقیقه·۱۸ روز پیش

نوشتن پروژه path finder در پایتون به زبان طنز

بخش یک #


با زبان طنز می‌خواهیم پروژه‌ای بسازیم که مسیر پیدا کنه، اونم توی جنگل کدها! بیا قدم به قدم جلو بریم. 😄

1. ورود به جنگل

اول باید بفهمیم کجا هستیم و کجا می‌خواهیم برویم. جنگل بدون نقشه؟ اشتباه استراتژیک!
اینطوری نقشه‌مان را درست می‌کنیم:

#Comments# جنگل ما: 0 یعنی راه بازه، 1 یعنی دیوار! forest = [ [0, 1, 0, 0, 0], [0, 1, 0, 1, 0], [0, 0, 0, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0] ]

2. پیدا کردن نقطه شروع و پایان

خوب، حالا می‌خواهیم مشخص کنیم از کجا شروع کنیم و کجا برسیم. یه ماجراجویی واقعی!

start = (0, 0) # بالا سمت چپ end = (4, 4) # پایین سمت راست

3. استراتژی پیدا کردن مسیر

برای پیدا کردن مسیر، از روش BFS (همون Breadth-First Search که یعنی "یکی‌یکی کل جنگل رو بگرد تا برسی") استفاده می‌کنیم.

  • چرا؟ چون BFS مثل یه آدم عاقل، دونه‌دونه راه‌ها رو تست می‌کنه.
  • برعکس DFS که انگار می‌ره وسط چاه، گیر می‌کنه!

4. پیاده‌سازی کد مسیر‌یابی

کمی کد نویسی و جادو! ✨ - در بخش دو # تحلیل طنز بخش چهار آمده است.

from collections import deque def find_path(forest, start, end): # صفی برای نگه‌داشتن مکان‌هایی که باید بررسی کنیم queue = deque([start]) visited = set() # جاهایی که قبلاً رفته‌ایم parent_map = {} # برای یادآوری مسیر directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # راست، پایین، چپ، بالا while queue: current = queue.popleft() # اولین مکان از صف # چک کنیم که رسیدیم یا نه if current == end: path = [] while current: path.append(current) current = parent_map.get(current) return path[::-1] # مسیر رو از انتها برعکس کن # همسایه‌ها رو بررسی کن for d in directions: neighbor = (current[0] + d[0], current[1] + d[1]) if (0 <= neighbor[0] < len(forest) and 0 <= neighbor[1] < len(forest[0]) and forest[neighbor[0]][neighbor[1]] == 0 and neighbor not in visited): queue.append(neighbor) visited.add(neighbor) parent_map[neighbor] = current return None # اگر مسیری پیدا نشد

5. اجرای پروژه

وقتشه که جنگل‌گردی کنیم و ببینیم مسیرمون چطور پیش میره! 🐾

path = find_path(forest, start, end) if path: print(&quotمسیر پیدا شد:&quot, path) else: print(&quotمسیر گیر کردیم! 😭&quot)

6. نتیجه

اگه کد رو اجرا کنی، مسیر جنگل رو مثل یه تور لیدر حرفه‌ای بهت میده. این کد حتی می‌گه "ای بابا، مسیرت بن‌بسته" اگه هیچ راهی نباشه.

طنز پایانی

برنامه ما یه مسیر‌یاب عاقله:

  • اگه گیر کنه می‌گه: "این مسیر دیوار داره، مگه می‌خوای دیوارو سوراخ کنی؟"
  • اگه مسیر رو پیدا کنه، می‌گه: "بفرما اینم راه بهشت مسیر."

امیدوارم تو پروژه "جنگل و دیوار" موفق باشی! 😉



بخش دو #


pythonCopy codefrom collections import deque def find_path(forest, start, end): # صفی برای نگه‌داشتن مکان‌هایی که باید بررسی کنیم queue = deque([start]) visited = set() # جاهایی که قبلاً رفته‌ایم parent_map = {} # برای یادآوری مسیر directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # راست، پایین، چپ، بالا while queue: current = queue.popleft() # اولین مکان از صف # چک کنیم که رسیدیم یا نه if current == end: path = [] while current: path.append(current) current = parent_map.get(current) return path[::-1] # مسیر رو از انتها برعکس کن # همسایه‌ها رو بررسی کن for d in directions: neighbor = (current[0] + d[0], current[1] + d[1]) if (0 <= neighbor[0] < len(forest) and 0 <= neighbor[1] < len(forest[0]) and forest[neighbor[0]][neighbor[1]] == 0 and neighbor not in visited): queue.append(neighbor) visited.add(neighbor) parent_map[neighbor] = current return None # اگر مسیری پیدا نشد

بیایید این بخش را به صورت طنز و با یک تحلیل ساده بررسی کنیم! 😊

کد ما کیست؟!

این کد، یک «مسیر‌یاب زرنگ و خلاق» است که می‌خواهد از نقطه A (شروع) به نقطه B (پایان) برسد. ولی خیلی باهوش است:

  • اول دونه‌دونه همه راه‌ها رو چک می‌کنه (هیجان‌زده نمی‌شه که بره ته نقشه!).
  • جاهایی که قبلاً رفته، می‌گه: "ای بابا! اونجا قبلاً رفته‌ام. برنمی‌گردم!"

خب بیایید ببینیم کد چه کارهایی می‌کنه:

1. آماده‌سازی ابزارها

  • queue = deque([start]):
    مثل این می‌مونه که صف تشکیل بده و بگه: «همه باید نوبت بگیرن! کسی بی‌اجازه نمی‌تونه بره توی جنگل.»
    از نقطه شروع (start) کار رو شروع می‌کنه.
  • visited = set():
    این مجموعه (set) مثل چک لیست کارهای تموم‌شده است. به خودش می‌گه:
    «یادت باشه کجاها رفتی. دو بار یه جا رو نگردی که خسته شی!»
  • parent_map = {}:
    اینجا، کد شجره‌نامه راه‌ها رو می‌سازه. هر نقطه می‌گه:
    «من از کجا اومدم؟»
    چون قراره آخر مسیر بفهمه چطور به نقطه پایان رسیده.
  • directions:
    این لیست می‌گه:
    «من می‌تونم راست، چپ، بالا یا پایین برم. خب بیشتر از این نرو که می‌خوری به دیوار!»

2. حلقه‌ای برای جستجو

while queue:

  • صف را بررسی می‌کند:
    «تا وقتی آدم توی صف هست، ادامه بده!»
    به اولین نفر صف نگاه می‌کنه و می‌گه:
    «ببینیم تو کجایی و باید چه کار کنی؟»

3. بررسی هدف

  • if current == end:
    اگر نقطه‌ای که الآن بررسی می‌کنه نقطه پایان باشه، می‌گه:
    «آخیش! بالاخره رسیدم.»
    بعد سریع نقشه مسیرش رو برمی‌گردونه:
    return path[::-1]
    چون از انتها تا ابتدا دنبالش کرده.

4. چک کردن همسایه‌ها

  • کد با جدیت، دور و اطراف نقطه فعلی رو بررسی می‌کنه.
    "همسایه‌ات کیه؟ راه بازه؟ قبلاً اونجا رفتی؟"
  • اگه همسایه راه باز باشه:
    queue.append(neighbor)
    می‌گه: «برو تو صف! نوبتت می‌شه.»
  • اگه قبلاً اونجا نرفته باشه:
    visited.add(neighbor)
    می‌گه: «اینم بزن تو چک‌لیست که دوباره اینجا رو نگردم.»

5. نتیجه آخر

اگر همه راه‌ها رو رفت و به مقصد نرسید:
return None
می‌گه: «اوپس! این مسیر به ناکجا آباد می‌رسه. راه دیگه‌ای پیدا کن!» 😅

6. طنز پایانی

این کد انگار یه کارآگاه خبره است که دنبال مجرم (مسیر صحیح) می‌گرده:

  • ردپاها رو دنبال می‌کنه.
  • جای اشتباهی نمی‌ره.
  • آخر کار، همه مسیر رو برمی‌گردونه و می‌گه:
    «بفرما! این راه درستش. تازه نشستم برات کل مسیر رو مستند کردم!» 😎



chatgpt 4o

بررسی کدچک لیستکد نویسیطنز
چیزی مثبت بگو، و چیز مثبت خواهی دید." — جیم تامپسون من کیستم ؟ من کجا هستم ؟ من چه میخواهم ؟
شاید از این پست‌ها خوشتان بیاید