PyCoders (پایتون)
4.25K subscribers
951 photos
142 videos
67 files
195 links
#پایتون جادوگر دنیای برنامه نویسی!
◇ معرفی حوزه های کاری پایتون
◇ معرفی کتابخونه های کاربردی
◇ معرفی دوره های مفید
◇ معرفی تکنیک ها و نکات
◇ نقشه راه حوزه های مختلف
◇ اخبار و آپدیت های پایتون
◇ و هر چیزی در مورد پایتون!

■ گروه پایتون:
@programmers_py
Download Telegram
🔸 کد بازی دوز یا 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
🔥4👍1
🔸 ترفندهای پایتون

🔅نکته List / Dict Comprehension پیشرفته

به‌جای حلقه‌های طولانی از این روش استفاده کن:

matrix = [[i*j for j in range(5)] for i in range(5)]



✔️ سریع‌تر
✔️ خواناتر
✔️ حرفه‌ای‌تر


🐍 @python_rd
🔥31👍1
بازی دوز یا 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)


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
این دوتا کد در ادامه هم هستند چون طولانی بود تلگرام دو پارتش کرد❤️
🔸 ترفندهای پایتون

🔅استفاده از functools.lru_cache برای کش کردن خروجی توابع

اگر یک تابع بارها با ورودی یکسان صدا زده می‌شود، می‌توانیم خروجی‌اش را کش کنیم تا سرعت چندبرابر شود.


@lru_cache
def fib(n):
...



✔️ مناسب توابع سنگین، API Calls، یا محاسبات تکراری

🐍 @python_rd
1
🛡 آموزش نکات امنیتی برای بک‌اند پارت سوم

نکته روش‌های جلوگیری از CSRF

🔻 اول ببینیم CSRF چیه؟
هکر کاربر را مجبور می‌کند بدون اینکه بفهمد، یک درخواست معتبر و خطرناک ارسال کند.


🔻 راه‌حل‌های قطعی:
✔️ استفاده از CSRF Token تصادفی در فرم‌ها
✔️ چک کردن Origin / Referrer Header
✔️ استفاده از SameSite Cookies
✔️ محدود کردن عملیات حساس به POST / PUT / DELETE

جنگو و فلسک (با افزونه‌ها) خودشان این را پیاده‌سازی می‌کنند.

🐍 @python_rd
تخفیف 70درصدی فقط تا فرداشب....
🔆 مسیر 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
3👍2
🔸 ترفندهای پایتون

🔅نکته Lazy Import برای سرعت اجرا

ماژول‌های سنگین را فقط در زمان نیاز import کن.


def heavy_task():
import numpy as np
return np.arange(1_000_000)



✔️ زمان شروع برنامه کمتر
✔️ مناسب اسکریپت‌های بزرگ


🐍 @python_rd
2
🔸 ترفندهای پایتون

🔅استفاده از Generator برای دیتاهای بزرگ

به جای خواندن کل فایل در RAM، خط‌به‌خط بخوان:

def read_lines(file):
for line in open(file):
yield line

for row in read_lines("big.txt"):
print(row)



✔️ مصرف حافظه خیلی کمتر
✔️ داده‌های عظیم → مشکلی نیست


🐍 @python_rd
1
🛡 آموزش نکات امنیتی برای بک‌اند پارت چهارم

نکته رمزنگاری پسورد با 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
🔥32
🔸 ترفندهای پایتون

🔅ساختن 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
3
This media is not supported in your browser
VIEW IN TELEGRAM
از اون کارهای ساده و زیبا که میشه با پایتون انجامش داد


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


🐍 @python_rd
10
🔸 ترفندهای پایتون

🔅استفاده از loguru برای لاگ‌نویسی حرفه‌ای

به جای logging استاندارد که دردسر داره، این خیلی تمیزه:


from loguru import logger

logger.info("User logged in!")




✔️ فرمت تمیز
✔️ فایل‌گردانی خودکار
✔️ قابل توسعه برای پروژه‌های بزرگ


🐍 @python_rd
7
🔸 ترفندهای پایتون

🔅فرق 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
4
✨️ نقشه راه پایتون


🐍 @python_rd
2
🔸 مسیر Data Scientist
🧬 رودمپ دانشمند داده با پایتون

1) پایتون برای داده
NumPy، Pandas، Matplotlib، Seaborn, Polars.

2) آمار و احتمال
Mean، Variance، Distributionها، Hypothesis Testing.

3) پاکسازی و پردازش داده‌ها
Null values، Outliers، Feature Engineering.

4) یادگیری ماشین
Scikit-learn → Classification، Regression، Clustering.

5) مصورسازی داده‌ها
Plotly، Seaborn، Dash.

6) یادگیری SQL
Queryها، Joinها، Window Functions.

7) ابزارهای واقعی
Jupyter، Git، Docker.

8) پروژه‌ها
تحلیل دیتاست، پیش‌بینی قیمت، مدل طبقه‌بندی، داشبورد تعاملی.


🐍 @python_rd
🔥2
بازی سنگ، کاغذ، قیچی یا Rock-Paper-Scissors

"""
Rock - Paper - Scissors
Python 3.x
"""

import random

def main():
print("✂️ سنگ - کاغذ - قیچی ✂️")
choices = ["سنگ", "کاغذ", "قیچی"]

while True:
print("\nانتخاب کن:")
print("1 = سنگ")
print("2 = کاغذ")
print("3 = قیچی")

move_str = input("عدد انتخابت؟ ")

if not move_str.isdigit():
print(" فقط عدد وارد کن.")
continue

move = int(move_str)
if move not in [1, 2, 3]:
print(" عدد باید 1، 2 یا 3 باشد.")
continue

player = choices[move - 1]
computer = random.choice(choices)

print(f"تو: {player} | کامپیوتر: {computer}")

# تعیین برنده
if player == computer:
print("🤝 مساوی!")
elif (player == "سنگ" and computer == "قیچی") or \
(player == "کاغذ" and computer == "سنگ") or \
(player == "قیچی" and computer == "کاغذ"):
print("🏆 تو بردی!")
else:
print("🤖 کامپیوتر برد!")

again = input("دوباره بازی کنیم؟ (y/n): ").strip().lower()
if again != "y":
print("🌟 بازی تمام شد! مرسی که بازی کردی.")
break

if __name__ == "__main__":
main()



با دوستاتون بازی کنید و لذتشو ببرین🫶🏻❤️

🐍 @python_rd
🔥1
کد کامل بازی Pac-Man ساده

اول پکیج زیر رو نصب کنید:
pip install pygame



حالا میریم سراغ کد:

import pygame
import random

pygame.init()

WIDTH, HEIGHT = 600, 400
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Pac-Man (Simple Version)")

FPS = 60
clock = pygame.time.Clock()

# Colors
YELLOW = (255, 255, 0)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
WHITE = (255, 255, 255)

# Pac-man setup
pac_size = 20
pac_x, pac_y = WIDTH // 2, HEIGHT // 2
pac_speed = 4

# Ghost setup
ghost_size = 20
ghost_x, ghost_y = random.randint(0, WIDTH), random.randint(0, HEIGHT)
ghost_speed = 2

# Food
food_size = 8
foods = [(random.randint(10, WIDTH-10), random.randint(10, HEIGHT-10)) for _ in range(20)]
score = 0

# Movement variables
dx, dy = 0, 0

running = True
while running:
clock.tick(FPS)

for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

# movement
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
dx, dy = -pac_speed, 0
elif event.key == pygame.K_RIGHT:
dx, dy = pac_speed, 0
elif event.key == pygame.K_UP:
dx, dy = 0, -pac_speed
elif event.key == pygame.K_DOWN:
dx, dy = 0, pac_speed

# Update pacman
pac_x += dx
pac_y += dy

# Boundary check
pac_x = max(0, min(WIDTH - pac_size, pac_x))
pac_y = max(0, min(HEIGHT - pac_size, pac_y))

# Move ghost
if pac_x > ghost_x: ghost_x += ghost_speed
if pac_x < ghost_x: ghost_x -= ghost_speed
if pac_y > ghost_y: ghost_y += ghost_speed
if pac_y < ghost_y: ghost_y -= ghost_speed

# Eating food
new_foods = []
for fx, fy in foods:
if abs(pac_x - fx) < pac_size and abs(pac_y - fy) < pac_size:
score += 1
else:
new_foods.append((fx, fy))
foods = new_foods

WIN.fill(BLACK)

# Draw pacman
pygame.draw.circle(WIN, YELLOW, (pac_x, pac_y), pac_size)

# Draw ghost
pygame.draw.rect(WIN, RED, (ghost_x, ghost_y, ghost_size, ghost_size))

# Draw food
for fx, fy in foods:
pygame.draw.circle(WIN, WHITE, (fx, fy), food_size)

# Display score
font = pygame.font.SysFont(None, 30)
img = font.render(f"Score: {score}", True, WHITE)
WIN.blit(img, (10, 10))

# Check collision with ghost
if abs(pac_x - ghost_x) < pac_size and abs(pac_y - ghost_y) < pac_size:
font = pygame.font.SysFont(None, 50)
over = font.render("GAME OVER!", True, WHITE)
WIN.blit(over, (WIDTH//2-120, HEIGHT//2-20))
pygame.display.update()
pygame.time.delay(2000)
running = False

pygame.display.update()

pygame.quit()



برای اجرا با ترمینال باید:
python pacman.py



🔸 با کلیدهای جهت‌دار حرکت می‌کنی
🔸 امتیاز جمع می‌کنی
🔸 اگر روح بهت بخوره Game Over میشی

🐍 @python_rd
2