en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

PyCoders (پایتون)

PyCoders (پایتون)

Open in Telegram

◇ #پایتون جادوگر دنیای برنامه نویسی! ◇ معرفی حوزه های کاری پایتون ◇ معرفی کتابخونه های کاربردی ◇ معرفی دوره های مفید ◇ معرفی تکنیک ها و نکات ◇ نقشه راه حوزه های مختلف ◇ اخبار و آپدیت های پایتون ◇ و هر چیزی در مورد پایتون! ■ گروه پایتون: @programmers_py

Show more
4 106
Subscribers
No data24 hours
+57 days
No data30 days
Posts Archive
\n\n\nاگر شما این را مستقیم نمایش دهید، اسکریپت اجرا می‌شود!\n\n🔻 راه‌حل:\n✔️ راه حل اول Escape کردن خروجی سمت سرور\n✔️ استفاده از قالب‌سازهای امن (مثل Django template که auto-escape دارد)\n✔️ جلوگیری از HTML خام در ورودی‌ها\n\n\n🐍 @python_rd","datePublished":"2025-12-04T10:31:36Z","dateModified":"2025-12-04T10:31:36Z","author":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"publisher":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":672},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":3},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":7}]}},{"@type":"ListItem","position":13,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2035","url":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2035","mainEntityOfPage":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2035","headline":"🛡 آموزش نکات امنیتی برای بک‌اند پارت اول نکته SQL Injection 🔻 مشکل: وقتی Query را مستقیم از ورودی کاربر بسازی…","articleBody":"🛡 آموزش نکات امنیتی برای بک‌اند پارت اول\n\nنکته SQL Injection\n\n🔻 مشکل:\nوقتی Query را مستقیم از ورودی کاربر بسازی، هکر می‌تونه Query رو تزریق کنه.\n\n🔻 مثال خطرناک:\n\nusername = input(\"username: \")\nquery = f\"SELECT * FROM users WHERE username = '{username}'\"\n\n\nاگر کاربر وارد کند:\nOR '1'='1 '\nکل جدول برگشت داده می‌شود!\n\n🔻 راه‌حل:\n✔️ استفاده از Prepared Statements / Parameterized Queries\n\n✔️ و ORMها مثل Django ORM یا SQLAlchemy خودشون جلوی این حمله رو می‌گیرن.\n\n\n🐍 @python_rd","datePublished":"2025-12-03T15:34:10Z","dateModified":"2025-12-03T15:34:10Z","author":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"publisher":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":672},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":9},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":11}]}},{"@type":"ListItem","position":14,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2034","url":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2034","mainEntityOfPage":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2034","headline":"🧩 کتابخانه‌های کمتر شناخته‌شده پایتون 🎨 rich برای ساخت خروجی رنگی، جدول، progress bar و لاگ‌های زیبا در ترمین…","articleBody":"🧩 کتابخانه‌های کمتر شناخته‌شده پایتون \n\n\n🎨 rich\n\nبرای ساخت خروجی رنگی، جدول، progress bar و لاگ‌های زیبا در ترمینال.\n\n\n🖥 typer\n\nساده‌ترین راه ساخت CLI حرفه‌ای و سریع فقط با چند خط کد.\n\n\n📝 loguru\n\nلاگ‌نویسی راحت، تمیز و بدون تنظیمات دردسرساز logging استاندارد.\n\n\n🕒 pendulum\n\nمدیریت تاریخ/زمان دقیق‌تر و بهتر از datetime با امکانات اضافی.\n\n\n⚡️ polars\n\nنسخه‌ی بسیار سریع‌تر و مدرن‌تر از pandas برای کار با داده‌های حجیم.\n\n\n🔍 pydantic\n\nبرای ساخت و اعتبارسنجی مدل‌های داده‌ای با سرعت بالا و تایپ دقیق.\n\n\n🔐 cryptography\n\nکتابخانه‌ای امن برای رمزنگاری، هش، امضای دیجیتال و کلیدهای امن.\n\n\n🧪 pytest\n\nساده‌ترین ابزار برای تست‌نویسی سریع، خوانا و ماژولار.\n\n\n📦 python-decouple\n\nبرای مدیریت امن تنظیمات پروژه مثل API Key بدون قرار دادن در کد.\n\n\n👁 tqdm\n\nنمایش Progress Bar حرفه‌ای برای حلقه‌ها و عملیات طولانی.\n\n\n🧰 attrs\n\nجایگزین مختصر و سریع برای کلاس‌های داده‌ای با کد کمتر نسبت به dataclass.\n\n\n🌐 httpx\n\nنسل جدید درخواست‌های HTTP—سریع، async-friendly و مدرن‌تر از requests.\n\n\n🔄 orjson\n\nسریع‌ترین JSON Parser پایتون، مخصوص کارهای سنگین داده‌ای.\n\n\n🧩 marshmallow\n\nبرای serialization / deserialization و validate کردن داده‌ها.\n\n\n📊 tabulate\n\nنمایش داده‌ها در قالب جدول‌های زیبا در ترمینال.\n\n\n📚 poetry\n\nمدیریت پکیج‌ها و پروژه‌های پایتونی با محیط مجازی خودکار و ساده‌تر از pip+venv.\n\n\n🤖 huggingface_hub\n\nبرای دانلود، آپلود و مدیریت مدل‌های ML روی HuggingFace.\n\n\n🔎 boltons\n\nمجموعه‌ای از ابزارهای کوچک و کاربردی که کمبودهای استاندارد پایتون را جبران می‌کند.\n\n\n🧮 sympy\n\nمحاسبات ریاضی نمادین مثل مشتق، انتگرال و معادلات.\n\n\n🗂 python-dotenv\n\nلود کردن متغیرهای محیطی از فایل .env برای امنیت بیشتر.\n\n\n🐍 @python_rd","datePublished":"2025-12-03T10:34:57Z","dateModified":"2025-12-03T10:34:57Z","author":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"publisher":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"commentCount":1,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":791},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":5},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":26},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1}]}},{"@type":"ListItem","position":15,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2033","url":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2033","mainEntityOfPage":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2033","headline":"✨ لایبرری‌های فوق العاده پایتون 🐍 @python_rd","articleBody":"✨ لایبرری‌های فوق العاده پایتون\n\n\n🐍 @python_rd","datePublished":"2025-12-03T08:57:00Z","dateModified":"2025-12-03T08:57:03Z","author":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"publisher":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":1}]}},{"@type":"ListItem","position":16,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2032","url":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2032","mainEntityOfPage":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2032","headline":"🔸 زندگی کوتاهه، از پایتون استفاده کن! 🐍 @python_rd","articleBody":"🔸 زندگی کوتاهه، از پایتون استفاده کن!\n\n\n🐍 @python_rd","datePublished":"2025-12-03T08:55:35Z","dateModified":"2025-12-03T08:55:42Z","author":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"publisher":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":1}]}},{"@type":"ListItem","position":17,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2031","url":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2031","mainEntityOfPage":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2031","headline":"🧩 کتابخانه‌های کمتر شناخته‌شده پایتون 🎨 rich برای ساخت خروجی رنگی، جدول، progress bar و لاگ‌های زیبا در ترمین…","articleBody":"🧩 کتابخانه‌های کمتر شناخته‌شده پایتون \n\n\n🎨 rich\n\nبرای ساخت خروجی رنگی، جدول، progress bar و لاگ‌های زیبا در ترمینال.\n\n\n🖥 typer\n\nساده‌ترین راه ساخت CLI حرفه‌ای و سریع فقط با چند خط کد.\n\n\n📝 loguru\n\nلاگ‌نویسی راحت، تمیز و بدون تنظیمات دردسرساز logging استاندارد.\n\n\n🕒 pendulum\n\nمدیریت تاریخ/زمان دقیق‌تر و بهتر از datetime با امکانات اضافی.\n\n\n⚡️ polars\n\nنسخه‌ی بسیار سریع‌تر و مدرن‌تر از pandas برای کار با داده‌های حجیم.\n\n\n🔍 pydantic\n\nبرای ساخت و اعتبارسنجی مدل‌های داده‌ای با سرعت بالا و تایپ دقیق.\n\n\n🔐 cryptography\n\nکتابخانه‌ای امن برای رمزنگاری، هش، امضای دیجیتال و کلیدهای امن.\n\n\n🧪 pytest\n\nساده‌ترین ابزار برای تست‌نویسی سریع، خوانا و ماژولار.\n\n\n📦 python-decouple\n\nبرای مدیریت امن تنظیمات پروژه مثل API Key بدون قرار دادن در کد.\n\n\n👁 tqdm\n\nنمایش Progress Bar حرفه‌ای برای حلقه‌ها و عملیات طولانی.\n\n\n🧰 attrs\n\nجایگزین مختصر و سریع برای کلاس‌های داده‌ای با کد کمتر نسبت به dataclass.\n\n\n🌐 httpx\n\nنسل جدید درخواست‌های HTTP—سریع، async-friendly و مدرن‌تر از requests.\n\n\n🔄 orjson\n\nسریع‌ترین JSON Parser پایتون، مخصوص کارهای سنگین داده‌ای.\n\n\n🧩 marshmallow\n\nبرای serialization / deserialization و validate کردن داده‌ها.\n\n\n📊 tabulate\n\nنمایش داده‌ها در قالب جدول‌های زیبا در ترمینال.\n\n\n📚 poetry\n\nمدیریت پکیج‌ها و پروژه‌های پایتونی با محیط مجازی خودکار و ساده‌تر از pip+venv.\n\n\n🤖 huggingface_hub\n\nبرای دانلود، آپلود و مدیریت مدل‌های ML روی HuggingFace.\n\n\n🔎 boltons\n\nمجموعه‌ای از ابزارهای کوچک و کاربردی که کمبودهای استاندارد پایتون را جبران می‌کند.\n\n\n🧮 sympy\n\nمحاسبات ریاضی نمادین مثل مشتق، انتگرال و معادلات.\n\n\n🗂 python-dotenv\n\nلود کردن متغیرهای محیطی از فایل .env برای امنیت بیشتر.\n\n\n🐍 @python_rd","datePublished":"2025-12-03T07:14:43Z","dateModified":"2025-12-03T07:14:56Z","author":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"publisher":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":1}]}},{"@type":"ListItem","position":18,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2030","url":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2030","mainEntityOfPage":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2030","headline":"🔸 ترفندهای پایتون 🔅 استفاده از Walrus Operator (:=) گاهی لازم داریم همزمان یک مقدار را بگیریم و بررسی کنیم. ق…","articleBody":"🔸 ترفندهای پایتون\n\n🔅 استفاده از Walrus Operator (:=)\n\nگاهی لازم داریم همزمان یک مقدار را بگیریم و بررسی کنیم.\nقبلاً باید دو خط می‌نوشتیم، اما با walrus همه‌چیز یک‌خطی می‌شود.\n\n\nif (data := fetch_data()):\n print(len(data))\n\n\n✔️ کد کوتاه‌تر\n✔️ خوانایی بیشتر\n✔️ مخصوص پایتون 3.8 به بعد\n\n\n🐍 @python_rd","datePublished":"2025-12-03T07:01:00Z","dateModified":"2025-12-03T07:01:00Z","author":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"publisher":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":716},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":6},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":7}]}},{"@type":"ListItem","position":19,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2028","url":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2028","mainEntityOfPage":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2028","headline":"💚 جمعه سبز سبزلرن ✨ 70% تخفیف روی دوره‌های سبزلرن این فرصت فوق‌العاده رو از دست ندید 🔸لینک دوره الگوریتم: ✨ h…","articleBody":"💚 جمعه سبز سبزلرن\n✨ 70% تخفیف روی دوره‌های سبزلرن\n\nاین فرصت فوق‌العاده رو از دست ندید\n\n\n🔸لینک دوره الگوریتم:\n✨ https://sabzlearn.ir/course/algorithm/\n\n\n🔸لینک دوره متخصص پایتون:\n✨ https://sabzlearn.ir/course/python/\n\n\n🔸لینک دوره متخصص جنگو:\n✨ https://sabzlearn.ir/course/django-ex/\n\n🔸لینک دوره پروژه‌های کاربردی پایتون:\n✨ https://sabzlearn.ir/course/applied-projects-with-python/\n\n\n🔸لینک دوره بهینه‌نویسی پایتون:\n✨ https://sabzlearn.ir/course/python-code-optimization/\n\n\n🔸لینک دوره مصورسازی داده‌ها:\n✨https://sabzlearn.ir/course/data-visualization-with-python/\n\n\n🐍 @python_rd","datePublished":"2025-11-25T11:20:38Z","dateModified":"2025-12-08T08:19:41Z","author":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"publisher":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"commentCount":5,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":757},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5}]}},{"@type":"ListItem","position":20,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2027","url":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2027","mainEntityOfPage":"https://telemetr.io/en/channels/1599068288-python_rd/posts/2027","headline":"از این کامل‌تر دیده بودین؟😍✨","articleBody":"از این کامل‌تر دیده بودین؟😍✨","datePublished":"2025-11-22T15:58:34Z","dateModified":"2025-11-22T15:58:34Z","author":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"publisher":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.telemetr.io/c/1KdwI0/5933800166614220051?ty=x"},"commentCount":3,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":1032},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3}]}}]}
🔸 ترفندهای پایتون 🔅نکته Lazy Import برای سرعت اجرا ماژول‌های سنگین را فقط در زمان نیاز import کن.
def heavy_task():
    import numpy as np
    return np.arange(1_000_000)
✔️ زمان شروع برنامه کمتر ✔️ مناسب اسکریپت‌های بزرگ 🐍 @python_rd

🔆 مسیر Django Developer 🚀 رودمپ جنگو از صفر تا جونیور 1) مبانی پایتون Syntax، OOP، ماژول‌ها، فایل‌ها، virtualenv. 2) مبانی وب HTTP، Request/Response، Cookie/Session، REST. 3) یادگیری Django Project / App، URL، View، Template، Model، ORM. 4) دیتابیس PostgreSQL + Queryهای ORM + Migrationها. 5) کار با API Django REST Framework → ساخته‌شدن APIهای مدرن. 6) احراز هویت و امنیت JWT، Permissionها، CSRF، مدیریت کاربر. 7) دیپلویمنت Nginx، Gunicorn، Docker، VPS. 8) پروژه واقعی وبلاگ، فروشگاه، سیستم مدیریت کاربر، API کامل. 🐍 @python_rd

تخفیف 70درصدی فقط تا فرداشب....❌

🛡 آموزش نکات امنیتی برای بک‌اند پارت سوم نکته روش‌های جلوگیری از CSRF 🔻 اول ببینیم CSRF چیه؟ هکر کاربر را مجبور می‌کند بدون اینکه بفهمد، یک درخواست معتبر و خطرناک ارسال کند. 🔻 راه‌حل‌های قطعی: ✔️ استفاده از CSRF Token تصادفی در فرم‌ها ✔️ چک کردن Origin / Referrer Header ✔️ استفاده از SameSite Cookies ✔️ محدود کردن عملیات حساس به POST / PUT / DELETE جنگو و فلسک (با افزونه‌ها) خودشان این را پیاده‌سازی می‌کنند. 🐍 @python_rd

🔸 ترفندهای پایتون 🔅استفاده از functools.lru_cache برای کش کردن خروجی توابع اگر یک تابع بارها با ورودی یکسان صدا زده می‌شود، می‌توانیم خروجی‌اش را کش کنیم تا سرعت چندبرابر شود.
@lru_cache
def fib(n):
    ...
✔️ مناسب توابع سنگین، API Calls، یا محاسبات تکراری 🐍 @python_rd

این دوتا کد در ادامه هم هستند چون طولانی بود تلگرام دو پارتش کرد❤️



        if current_player == human_player:
            print("نوبت توست 👤")
            move_index = get_valid_move(board)
            board[move_index] = human_player
        else:
            print("نوبت هوش مصنوعی است 🤖 ...")
            move_index = find_best_move(board, ai_player, human_player)
            # اگر به هر دلیلی None برگشت (نظریاً نباید), اولین خانه خالی را پر می‌کنیم
            if move_index is None:
                for i in range(9):
                    if board[i] not in ["X", "O"]:
                        move_index = i
                        break
            board[move_index] = ai_player

        # چک برنده شدن
        if check_winner(board, current_player):
            print_board(board)
            if current_player == human_player:
                print("🏆 آفرین! تو بردی! 👏")
            else:
                print("🤖 هوش مصنوعی برد! دفعه بعد شکستش بده 😉")
            break

        # چک مساوی شدن
        if is_draw(board):
            print_board(board)
            print("🤝 بازی مساوی شد!")
            break

        # تعویض بازیکن
        current_player = ai_player if current_player == human_player else human_player

if __name__ == "__main__":
    main()
🎖 اینجا یه بازیکن انسانه و یه بازیکن هوش مصنوعی که خودش فکر می‌کنه، بهترین حرکت رو حساب می‌کنه و جواب می‌ده (با الگوریتم minimax)، یعنی بازی اتوماتیک و غیرقابل شکست میشه. 🐍 @python_rd

✨ بازی دوز یا Tic Tac Toe نسخه هوش مصنوعی در این نسخه از بازی یک هوش مصنوعی با الگوریتم minimax بازی می‌کنه و عملاً شکست‌ناپذیره🤌🏻
"""
Tic Tac Toe با هوش مصنوعی (Unbeatable AI)
Python 3.x
"""

def print_board(board):
    """Prints the board in a nice 3x3 grid."""
    print()
    print(f" {board[0]} | {board[1]} | {board[2]} ")
    print("---+---+---")
    print(f" {board[3]} | {board[4]} | {board[5]} ")
    print("---+---+---")
    print(f" {board[6]} | {board[7]} | {board[8]} ")
    print()

def check_winner(board, player):
    """Returns True if player ('X' or 'O') has won."""
    winning_combos = [
        (0, 1, 2), (3, 4, 5), (6, 7, 8),  # rows
        (0, 3, 6), (1, 4, 7), (2, 5, 8),  # cols
        (0, 4, 8), (2, 4, 6)              # diagonals
    ]
    return any(board[a] == board[b] == board[c] == player for a, b, c in winning_combos)

def is_draw(board):
    """Returns True if all cells are filled and no winner."""
    return all(cell in ["X", "O"] for cell in board)

def get_valid_move(board):
    """Asks the human player for a valid move (1-9)."""
    while True:
        move_str = input("شماره خانه (1 تا 9) را وارد کن: ")
        if not move_str.isdigit():
            print("❌ فقط عدد وارد کن.")
            continue

        move = int(move_str)
        if move < 1 or move > 9:
            print("❌ عدد باید بین 1 تا 9 باشد.")
            continue

        index = move - 1
        if board[index] in ["X", "O"]:
            print("❌ این خانه قبلاً پر شده. یکی دیگه انتخاب کن.")
            continue

        return index

def minimax(board, is_maximizing, ai_player, human_player):
    """Minimax algorithm: returns score from AI perspective."""
    if check_winner(board, ai_player):
        return 1
    if check_winner(board, human_player):
        return -1
    if is_draw(board):
        return 0

    if is_maximizing:
        best_score = -999
        for i in range(9):
            if board[i] not in ["X", "O"]:
                backup = board[i]
                board[i] = ai_player
                score = minimax(board, False, ai_player, human_player)
                board[i] = backup
                if score > best_score:
                    best_score = score
        return best_score
    else:
        best_score = 999
        for i in range(9):
            if board[i] not in ["X", "O"]:
                backup = board[i]
                board[i] = human_player
                score = minimax(board, True, ai_player, human_player)
                board[i] = backup
                if score < best_score:
                    best_score = score
        return best_score

def find_best_move(board, ai_player, human_player):
    """Finds the best move for AI using minimax."""
    best_score = -999
    best_move = None
    for i in range(9):
        if board[i] not in ["X", "O"]:
            backup = board[i]
            board[i] = ai_player
            score = minimax(board, False, ai_player, human_player)
            board[i] = backup
            if score > best_score:
                best_score = score
                best_move = i
    return best_move

def main():
    print("🎮 بازی دوز با هوش مصنوعی (Tic Tac Toe + AI)")
    print("این نسخه، هوش مصنوعی تقریباً بدون شکست داره 😉")
    print("چینش خانه‌ها به شکل زیر است:")
    demo_board = [str(i) for i in range(1, 10)]
    print_board(demo_board)

    # انتخاب علامت توسط کاربر
    while True:
        human_player = input("دوست داری X باشی یا O؟ (X/O): ").strip().upper()
        if human_player in ["X", "O"]:
            break
        print("فقط X یا O وارد کن.")

    ai_player = "O" if human_player == "X" else "X"
    print(f"تو = {human_player}  |  هوش مصنوعی = {ai_player}")

    board = [str(i) for i in range(1, 10)]

    # اگر انسان O باشد، AI با X شروع می‌کند
    current_player = "X"

    while True:
        print_board(board)

🔸 ترفندهای پایتون 🔅نکته List / Dict Comprehension پیشرفته به‌جای حلقه‌های طولانی از این روش استفاده کن:
matrix = [[i*j for j in range(5)] for i in range(5)]
✔️ سریع‌تر ✔️ خواناتر ✔️ حرفه‌ای‌تر 🐍 @python_rd

🔸 کد بازی دوز یا Tic Tac Toe دو نفره
"""
Tic-Tac-Toe (2-player, console version)
Python 3.x
"""

def print_board(board):
    """Prints the board in a nice 3x3 grid."""
    print()
    print(f" {board[0]} | {board[1]} | {board[2]} ")
    print("---+---+---")
    print(f" {board[3]} | {board[4]} | {board[5]} ")
    print("---+---+---")
    print(f" {board[6]} | {board[7]} | {board[8]} ")
    print()

def check_winner(board, player):
    """Returns True if player ('X' or 'O') has won."""
    winning_combos = [
        (0, 1, 2), (3, 4, 5), (6, 7, 8),  # rows
        (0, 3, 6), (1, 4, 7), (2, 5, 8),  # columns
        (0, 4, 8), (2, 4, 6)              # diagonals
    ]
    for a, b, c in winning_combos:
        if board[a] == board[b] == board[c] == player:
            return True
    return False

def is_draw(board):
    """Returns True if all cells are filled and no winner."""
    return all(cell in ["X", "O"] for cell in board)

def get_valid_move(board):
    """Asks the current player for a valid move (1-9)."""
    while True:
        move_str = input("شماره خانه (1 تا 9) را وارد کن: ")
        if not move_str.isdigit():
            print("❌ فقط عدد وارد کن.")
            continue

        move = int(move_str)
        if move < 1 or move > 9:
            print("❌ عدد باید بین 1 تا 9 باشد.")
            continue

        index = move - 1
        if board[index] in ["X", "O"]:
            print("❌ این خانه قبلاً پر شده. یکی دیگه انتخاب کن.")
            continue

        return index

def main():
    print("🎮 بازی دوز (Tic Tac Toe)")
    print("بازیکن 1 = X  |  بازیکن 2 = O")
    print("چینش خانه‌ها روی صفحه به شکل زیر است:")
    demo_board = [str(i) for i in range(1, 10)]
    print_board(demo_board)

    # شروع بازی
    board = [str(i) for i in range(1, 10)]
    current_player = "X"

    while True:
        print_board(board)
        print(f"نوبت بازیکن {current_player} است.")
        move_index = get_valid_move(board)
        board[move_index] = current_player

        # چک برنده شدن
        if check_winner(board, current_player):
            print_board(board)
            print(f"🏆 بازیکن {current_player} برنده شد!")
            break

        # چک مساوی شدن
        if is_draw(board):
            print_board(board)
            print("🤝 بازی مساوی شد!")
            break

        # تعویض بازیکن
        current_player = "O" if current_player == "X" else "X"

if __name__ == "__main__":
    main()
با دوستاتون بازی کنید و لذت ببرید🫶🏻❤️ 🐍 @python_rd

🔸 ترفندهای پایتون 🔅 استفاده از Walrus Operator (:=) گاهی لازم داریم همزمان یک مقدار را بگیریم و بررسی کنیم. قبلاً باید دو خط می‌نوشتیم، اما با walrus همه‌چیز یک‌خطی می‌شود.
if (data := fetch_data()):
    print(len(data))
✔️ کد کوتاه‌تر ✔️ خوانایی بیشتر ✔️ مخصوص پایتون 3.8 به بعد 🐍 @python_rd

🛡 آموزش نکات امنیتی برای بک‌اند پارت دوم نکته XSS 🔻 مشکل: اگر ورودی کاربر را بدون فیلتر در HTML نمایش دهی، می‌تونه جاوااسکریپت تزریق کند. 🔻 مثال خطرناک: کاربر در فرم کامنت وارد می‌کند:
<script>alert("Hacked!")</script>
اگر شما این را مستقیم نمایش دهید، اسکریپت اجرا می‌شود! 🔻 راه‌حل: ✔️ راه حل اول Escape کردن خروجی سمت سرور ✔️ استفاده از قالب‌سازهای امن (مثل Django template که auto-escape دارد) ✔️ جلوگیری از HTML خام در ورودی‌ها 🐍 @python_rd

🛡 آموزش نکات امنیتی برای بک‌اند پارت اول نکته SQL Injection 🔻 مشکل: وقتی Query را مستقیم از ورودی کاربر بسازی، هکر می‌تونه Query رو تزریق کنه. 🔻 مثال خطرناک:
username = input("username: ")
query = f"SELECT * FROM users WHERE username = '{username}'"
اگر کاربر وارد کند: OR '1'='1 ' کل جدول برگشت داده می‌شود! 🔻 راه‌حل: ✔️ استفاده از Prepared Statements / Parameterized Queries ✔️ و ORMها مثل Django ORM یا SQLAlchemy خودشون جلوی این حمله رو می‌گیرن. 🐍 @python_rd

🧩 کتابخانه‌های کمتر شناخته‌شده پایتون 🎨 rich برای ساخت خروجی رنگی، جدول، progress bar و لاگ‌های زیبا در ترمینال. 🖥 typer ساده‌ترین راه ساخت CLI حرفه‌ای و سریع فقط با چند خط کد. 📝 loguru لاگ‌نویسی راحت، تمیز و بدون تنظیمات دردسرساز logging استاندارد. 🕒 pendulum مدیریت تاریخ/زمان دقیق‌تر و بهتر از datetime با امکانات اضافی. ⚡️ polars نسخه‌ی بسیار سریع‌تر و مدرن‌تر از pandas برای کار با داده‌های حجیم. 🔍 pydantic برای ساخت و اعتبارسنجی مدل‌های داده‌ای با سرعت بالا و تایپ دقیق. 🔐 cryptography کتابخانه‌ای امن برای رمزنگاری، هش، امضای دیجیتال و کلیدهای امن. 🧪 pytest ساده‌ترین ابزار برای تست‌نویسی سریع، خوانا و ماژولار. 📦 python-decouple برای مدیریت امن تنظیمات پروژه مثل API Key بدون قرار دادن در کد. 👁 tqdm نمایش Progress Bar حرفه‌ای برای حلقه‌ها و عملیات طولانی. 🧰 attrs جایگزین مختصر و سریع برای کلاس‌های داده‌ای با کد کمتر نسبت به dataclass. 🌐 httpx نسل جدید درخواست‌های HTTP—سریع، async-friendly و مدرن‌تر از requests. 🔄 orjson سریع‌ترین JSON Parser پایتون، مخصوص کارهای سنگین داده‌ای. 🧩 marshmallow برای serialization / deserialization و validate کردن داده‌ها. 📊 tabulate نمایش داده‌ها در قالب جدول‌های زیبا در ترمینال. 📚 poetry مدیریت پکیج‌ها و پروژه‌های پایتونی با محیط مجازی خودکار و ساده‌تر از pip+venv. 🤖 huggingface_hub برای دانلود، آپلود و مدیریت مدل‌های ML روی HuggingFace. 🔎 boltons مجموعه‌ای از ابزارهای کوچک و کاربردی که کمبودهای استاندارد پایتون را جبران می‌کند. 🧮 sympy محاسبات ریاضی نمادین مثل مشتق، انتگرال و معادلات. 🗂 python-dotenv لود کردن متغیرهای محیطی از فایل .env برای امنیت بیشتر. 🐍 @python_rd

✨ لایبرری‌های فوق العاده پایتون 🐍 @python_rd

🔸 زندگی کوتاهه، از پایتون استفاده کن! 🐍 @python_rd

🧩 کتابخانه‌های کمتر شناخته‌شده پایتون 🎨 rich برای ساخت خروجی رنگی، جدول، progress bar و لاگ‌های زیبا در ترمینال. 🖥 typer ساده‌ترین راه ساخت CLI حرفه‌ای و سریع فقط با چند خط کد. 📝 loguru لاگ‌نویسی راحت، تمیز و بدون تنظیمات دردسرساز logging استاندارد. 🕒 pendulum مدیریت تاریخ/زمان دقیق‌تر و بهتر از datetime با امکانات اضافی. ⚡️ polars نسخه‌ی بسیار سریع‌تر و مدرن‌تر از pandas برای کار با داده‌های حجیم. 🔍 pydantic برای ساخت و اعتبارسنجی مدل‌های داده‌ای با سرعت بالا و تایپ دقیق. 🔐 cryptography کتابخانه‌ای امن برای رمزنگاری، هش، امضای دیجیتال و کلیدهای امن. 🧪 pytest ساده‌ترین ابزار برای تست‌نویسی سریع، خوانا و ماژولار. 📦 python-decouple برای مدیریت امن تنظیمات پروژه مثل API Key بدون قرار دادن در کد. 👁 tqdm نمایش Progress Bar حرفه‌ای برای حلقه‌ها و عملیات طولانی. 🧰 attrs جایگزین مختصر و سریع برای کلاس‌های داده‌ای با کد کمتر نسبت به dataclass. 🌐 httpx نسل جدید درخواست‌های HTTP—سریع، async-friendly و مدرن‌تر از requests. 🔄 orjson سریع‌ترین JSON Parser پایتون، مخصوص کارهای سنگین داده‌ای. 🧩 marshmallow برای serialization / deserialization و validate کردن داده‌ها. 📊 tabulate نمایش داده‌ها در قالب جدول‌های زیبا در ترمینال. 📚 poetry مدیریت پکیج‌ها و پروژه‌های پایتونی با محیط مجازی خودکار و ساده‌تر از pip+venv. 🤖 huggingface_hub برای دانلود، آپلود و مدیریت مدل‌های ML روی HuggingFace. 🔎 boltons مجموعه‌ای از ابزارهای کوچک و کاربردی که کمبودهای استاندارد پایتون را جبران می‌کند. 🧮 sympy محاسبات ریاضی نمادین مثل مشتق، انتگرال و معادلات. 🗂 python-dotenv لود کردن متغیرهای محیطی از فایل .env برای امنیت بیشتر. 🐍 @python_rd

🔸 ترفندهای پایتون 🔅 استفاده از Walrus Operator (:=) گاهی لازم داریم همزمان یک مقدار را بگیریم و بررسی کنیم. قبلاً باید دو خط می‌نوشتیم، اما با walrus همه‌چیز یک‌خطی می‌شود.
if (data := fetch_data()):
    print(len(data))
✔️ کد کوتاه‌تر ✔️ خوانایی بیشتر ✔️ مخصوص پایتون 3.8 به بعد 🐍 @python_rd

💚 جمعه سبز سبزلرن ✨ 70% تخفیف روی دوره‌های سبزلرن این فرصت فوق‌العاده رو از دست ندید 🔸لینک دوره الگوریتم: ✨ https://sabzlea
💚 جمعه سبز سبزلرن ✨ 70% تخفیف روی دوره‌های سبزلرن این فرصت فوق‌العاده رو از دست ندید 🔸لینک دوره الگوریتم: ✨ https://sabzlearn.ir/course/algorithm/ 🔸لینک دوره متخصص پایتون: ✨ https://sabzlearn.ir/course/python/ 🔸لینک دوره متخصص جنگو: ✨ https://sabzlearn.ir/course/django-ex/ 🔸لینک دوره پروژه‌های کاربردی پایتون: ✨ https://sabzlearn.ir/course/applied-projects-with-python/ 🔸لینک دوره بهینه‌نویسی پایتون: ✨ https://sabzlearn.ir/course/python-code-optimization/ 🔸لینک دوره مصورسازی داده‌ها: ✨https://sabzlearn.ir/course/data-visualization-with-python/ 🐍 @python_rd

از این کامل‌تر دیده بودین؟😍✨