PyCoders (پایتون)
Open in Telegram
◇ #پایتون جادوگر دنیای برنامه نویسی! ◇ معرفی حوزه های کاری پایتون ◇ معرفی کتابخونه های کاربردی ◇ معرفی دوره های مفید ◇ معرفی تکنیک ها و نکات ◇ نقشه راه حوزه های مختلف ◇ اخبار و آپدیت های پایتون ◇ و هر چیزی در مورد پایتون! ■ گروه پایتون: @programmers_py
Show more4 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}]}}]}















4 106
🔸 ترفندهای پایتون
🔅نکته Lazy Import برای سرعت اجرا
ماژولهای سنگین را فقط در زمان نیاز import کن.
def heavy_task():
import numpy as np
return np.arange(1_000_000)
✔️ زمان شروع برنامه کمتر
✔️ مناسب اسکریپتهای بزرگ
🐍 @python_rd4 106
🔆 مسیر 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
4 106
🛡 آموزش نکات امنیتی برای بکاند پارت سوم
نکته روشهای جلوگیری از CSRF
🔻 اول ببینیم CSRF چیه؟
هکر کاربر را مجبور میکند بدون اینکه بفهمد، یک درخواست معتبر و خطرناک ارسال کند.
🔻 راهحلهای قطعی:
✔️ استفاده از CSRF Token تصادفی در فرمها
✔️ چک کردن Origin / Referrer Header
✔️ استفاده از SameSite Cookies
✔️ محدود کردن عملیات حساس به POST / PUT / DELETE
جنگو و فلسک (با افزونهها) خودشان این را پیادهسازی میکنند.
🐍 @python_rd
4 106
🔸 ترفندهای پایتون
🔅استفاده از functools.lru_cache برای کش کردن خروجی توابع
اگر یک تابع بارها با ورودی یکسان صدا زده میشود، میتوانیم خروجیاش را کش کنیم تا سرعت چندبرابر شود.
@lru_cache
def fib(n):
...
✔️ مناسب توابع سنگین، API Calls، یا محاسبات تکراری
🐍 @python_rd4 106
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_rd4 106
✨ بازی دوز یا 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)4 106
🔸 ترفندهای پایتون
🔅نکته List / Dict Comprehension پیشرفته
بهجای حلقههای طولانی از این روش استفاده کن:
matrix = [[i*j for j in range(5)] for i in range(5)]
✔️ سریعتر
✔️ خواناتر
✔️ حرفهایتر
🐍 @python_rd4 106
🔸 کد بازی دوز یا 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_rd4 106
🔸 ترفندهای پایتون
🔅 استفاده از Walrus Operator (:=)
گاهی لازم داریم همزمان یک مقدار را بگیریم و بررسی کنیم.
قبلاً باید دو خط مینوشتیم، اما با walrus همهچیز یکخطی میشود.
if (data := fetch_data()):
print(len(data))
✔️ کد کوتاهتر
✔️ خوانایی بیشتر
✔️ مخصوص پایتون 3.8 به بعد
🐍 @python_rd4 106
🛡 آموزش نکات امنیتی برای بکاند پارت دوم
نکته XSS
🔻 مشکل:
اگر ورودی کاربر را بدون فیلتر در HTML نمایش دهی، میتونه جاوااسکریپت تزریق کند.
🔻 مثال خطرناک:
کاربر در فرم کامنت وارد میکند:
<script>alert("Hacked!")</script>
اگر شما این را مستقیم نمایش دهید، اسکریپت اجرا میشود!
🔻 راهحل:
✔️ راه حل اول Escape کردن خروجی سمت سرور
✔️ استفاده از قالبسازهای امن (مثل Django template که auto-escape دارد)
✔️ جلوگیری از HTML خام در ورودیها
🐍 @python_rd4 106
🛡 آموزش نکات امنیتی برای بکاند پارت اول
نکته 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_rd4 106
🧩 کتابخانههای کمتر شناختهشده پایتون
🎨 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
4 106
🧩 کتابخانههای کمتر شناختهشده پایتون
🎨 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
4 106
🔸 ترفندهای پایتون
🔅 استفاده از Walrus Operator (:=)
گاهی لازم داریم همزمان یک مقدار را بگیریم و بررسی کنیم.
قبلاً باید دو خط مینوشتیم، اما با walrus همهچیز یکخطی میشود.
if (data := fetch_data()):
print(len(data))
✔️ کد کوتاهتر
✔️ خوانایی بیشتر
✔️ مخصوص پایتون 3.8 به بعد
🐍 @python_rd4 106
💚 جمعه سبز سبزلرن
✨ 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
