en
Feedback
PyCoders (پایتون)

PyCoders (پایتون)

Open in Telegram

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

Show more
4 115
Subscribers
No data24 hours
-97 days
-1730 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.tlmtr.io/c/1KdwI0/5933800166614220051?ty=x"},"publisher":{"@type":"Organization","name":"PyCoders (پایتون)","url":"https://telemetr.io/en/channels/1599068288-python_rd","image":"https://img.tlmtr.io/c/1KdwI0/5933800166614220051?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":501},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":3},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":5}]}}]}
✨️ نقشه راه پایتون 🐍 @python_rd
✨️ نقشه راه پایتون 🐍 @python_rd

🔸 ترفندهای پایتون 🔅فرق copy و deepcopy در ساختارهای تودرتو خیلی مهمه.
import copy

a = [[1, 2], [3, 4]]
b = copy.copy(a)
c = copy.deepcopy(a)

a[0][0] = 999
print(b)   # تاثیر می‌گیرد
print(c)   # تاثیر نمی‌گیرد
✔️ در واقع copy فقط سطح اول را کپی می‌کند ✔️ اما deepcopy کل ساختار را 🐍 @python_rd

🔸 ترفندهای پایتون 🔅استفاده از loguru برای لاگ‌نویسی حرفه‌ای به جای logging استاندارد که دردسر داره، این خیلی تمیزه:
from loguru import logger

logger.info("User logged in!")
✔️ فرمت تمیز ✔️ فایل‌گردانی خودکار ✔️ قابل توسعه برای پروژه‌های بزرگ 🐍 @python_rd

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

✨ از اون کارهای ساده و زیبا که میشه با پایتون انجامش داد 🐍 @python_rd

🔸 ترفندهای پایتون 🔅ساختن Context Manager بدون کلاس برای ساخت یک context manager لازم نیست کلاس بنویسی. با یک دکوراتور همه‌چیز تمیز و سریع می‌شود.:
from contextlib import contextmanager
import time

@contextmanager
def timer():
    start = time.time()
    yield
    print("Time:", time.time() - start)

with timer():
    sum(range(10_000_000))
✔️ مناسب اندازه‌گیری زمان، مدیریت فایل، اتصال DB و… 🐍 @python_rd

🛡 آموزش نکات امنیتی برای بک‌اند پارت چهارم نکته رمزنگاری پسورد با bcrypt 🔻 چرا bcrypt؟ چون کند طراحی شده و brute-force را سخت می‌کند (برخلاف SHA256 و MD5). 🔻 نمونه استفاده:
import bcrypt

hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt())
bcrypt.checkpw(password.encode(), hashed)
🔻 نکته مهم: ✔️ هرگز پسورد را hash ساده نکن ✔️ همیشه از salt استفاده کن ✔️و مطمئن باش bcrypt بهترین گزینه برای اپلیکیشن‌های بک‌اند است 🐍 @python_rd

🔸 ترفندهای پایتون 🔅استفاده از Generator برای دیتاهای بزرگ به جای خواندن کل فایل در RAM، خط‌به‌خط بخوان:
def read_lines(file):
    for line in open(file):
        yield line

for row in read_lines("big.txt"):
    print(row)
✔️ مصرف حافظه خیلی کمتر ✔️ داده‌های عظیم → مشکلی نیست 🐍 @python_rd

🔸 ترفندهای پایتون 🔅نکته 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