آموزش پایتون
88 subscribers
281 photos
21 videos
81 files
178 links
ارتباط با ما:
@learnpythonicyBot

لینک گروه چت:
https://t.me/learnpythonicychat

لینک چنل ایتا:
https://eitaa.com/learnpythonicy
Download Telegram
Maml_ArefehKabiri.ipynb
7.4 KB
✔️ متالرنینگ (Meta-Learning) با پایتون — مدلی که خودش یاد می‌گیرد چطور یاد بگیرد!


در این پروژه یک نسخه‌ی مینیمال از الگوریتم MAML را با PyTorch پیاده‌سازی کردم؛
مدلی که با دیدن فقط چند نمونه از یک تسک جدید، می‌تواند سریع خودش را فیت کند.
اینجا روی یک مسئله‌ی ساده‌ی سینوسی تستش کردیم تا رفتار «یادگیریِ سریع» مدل مشخص شود.


🔹 ساخت دیتاست‌های تصادفی (sine tasks)
🔹 تعریف مدل MLP
🔹 Inner loop و Outer loop
🔹 ذخیره مدل نهایی
🔹 مشاهده نوسان Meta-Loss در طول آموزش


متالرنینگ یکی از تکنیک‌های مهم در حوزه‌های few-shot learning، رباتیک، پزشکی، personalization و AI adaptive systems است.

#meta_learning | #metaLearnig | #maml | @learnpythonicy

📌 برای دریافت نسخه کامل‌تر یا راهنماهای بعدی، پیام بدید یا نظر بذارید.
@learnpythonicyBot
✔️ خلاصه‌ای از مهم‌ترین دستورات Pandas برای شروع تحلیل داده.
با یادگیری این‌ها، اولین قدم جدی‌تان در Data Analysis برداشته می‌شود. 🚀

#pandas | #Cheat_Sheet

☀️@LearnPythonIcy
1
This media is not supported in your browser
VIEW IN TELEGRAM
⭕️ شناسایی و اندازه‌گیری خودکار دانه‌های برنج با OpenCV

در این آموزش یاد می‌گیری چطور:


✔️ بخش‌های سفید تصویر را استخراج کنی
✔️ نویز پس‌زمینه را حذف کنی
✔️ دانه‌های واقعی را فیلتر کنی
✔️ اندازه دقیق هر دانه را روی تصویر بنویسی

این یک مثال عالی برای پروژه‌های Machine Vision است.

کد کامل را میخوای؟؟
کلمه برنج را کامنت کن 👇

#opencv | #cv2 | #numpy

🌟@LearnPythonIcy
🤓2
This media is not supported in your browser
VIEW IN TELEGRAM
🎯 پیدا کردن دانه برنج با اندازه دلخواه

سیستم هوشمند ما
1️⃣ شناسایی تمام دانه‌های برنج در تصویر
2️⃣ دریافت عدد ورودی از کاربر
3️⃣ پیدا کردن دانه‌ای که مساحتش به عدد شما نزدیک‌تر است
4️⃣ مشخص کردن دانه انتخابی با کادر و نمایش اندازه دقیق

ویژگی‌ها
تشخیص خودکار دانه‌ها
جستجوی هوشمند نزدیک‌ترین اندازه
حذف نویز و ذرات ریز
نمایش واضح دانه انتخابی

📊 کاربرد
کنترل کیفیت، جداسازی دانه‌های خارج از سایز، پروژه‌های دانشگاهی، سیستم‌های درجه‌بندی کشاورزی


#opencv | #cv2 | #numpy

🌟@LearnPythonIcy
✔️ 10 Python Dictionary Tricks You Should Know! 🐍

1️⃣ ساخت دیکشنری با مقدار پیش‌فرض
from collections import defaultdict
d = defaultdict(int)

2️⃣ ادغام دو دیکشنری (Python 3.9+)
merged = dict1 | dict2

3️⃣ برعکس کردن key و value
reversed_dict = {v: k for k, v in my_dict.items()}

4️⃣ گرفتن مقدار با مقدار پیش‌فرض امن
value = my_dict.get("key", 0)

5️⃣ مرتب‌سازی دیکشنری بر اساس value
sorted_dict = dict(sorted(my_dict.items(), key=lambda x: x[1]))

6️⃣ حذف آیتم و گرفتن مقدار همزمان
value = my_dict.pop("key")

7️⃣ ساخت دیکشنری از دو لیست
result = dict(zip(keys, values))

8️⃣ بررسی وجود چند key به‌صورت همزمان
if {"a", "b"} <= my_dict.keys():
print("Exists")

9️⃣ دیکشنری کامپرهنشن
squares = {x: x**2 for x in range(5)}

🔟 شمارش تکرار آیتم‌ها
from collections import Counter
count = Counter(["a", "b", "a", "c"])

> ⚠️ دیکشنری‌ها خیلی قدرتمندن؛ ولی خوانایی کد رو فدای کوتاه‌نویسی نکن!



#dict | #PythonTricks | @LearnPythonicy

👇 کدومش بیشتر به کارت خورد؟ کامنت کن!
This media is not supported in your browser
VIEW IN TELEGRAM
✔️ یادت هست اون دایناسوری که وقتی اینترنت قطع می‌شد بازی می‌کردیم؟

میتونی خودت با پایتون بسازی! 🦖

امکانات:
▫️ کنترل ساده با Space و Down
▫️ صداگذاری حرفه‌ای
▫️ ذخیره‌سازی High Score

تجربه بازی رو با پایتون از دست نده:
(لینک گیت‌هاب)

#pygame | #random | #sys | #os | @learnpythonicy
یلدا مبارک 🌚
4
✔️ یافتن فایل‌ها با الگوریتم glob

ماژول glob در پایتون، جستجوی فایل‌ها را با استفاده از الگوهای خاص و ساده فراهم می‌کند. با استفاده از این ماژول می‌توانید فایل‌ها را از دایرکتوری‌های مختلف جستجو کرده و حتی به صورت بازگشتی در زیرشاخه‌ها نیز این کار را انجام دهید.

مثال‌ها:

1. جستجو برای تمامی فایل‌های .txt:

glob.glob('*.txt')   


2. جستجو برای فایل‌هایی که نام آن‌ها با test شروع می‌شود و پسوند .py دارند:

glob.glob('test[0-9].py')   


3. جستجو بازگشتی در دایرکتوری‌ها:
glob.glob('selenium/**', recursive=True)

این ابزار در پایتون به طور پیش‌فرض موجود است و می‌تواند در پروژه‌های مختلف برای مدیریت و جستجوی فایل‌ها مفید باشد.

#glob | @LearnPythonicy
chess_game.py
31.5 KB
بازی شطرنج با پایتون: قوانینی کامل، تجربه‌ای واقعی! 🚀

از حرکت‌های دقیق تا کیش/مات و پات، همه چیز در این پروژه به دقت پیاده‌سازی شده. آماده برای رقابت دو نفره، با کدی ماژولار و قابل توسعه. پروژه‌ای که باهاش می‌تونی برنامه‌نویسی پیشرفته رو تجربه کنی!

#بازی | #شطرنج
#game | #chess | @learnpythonicy
✔️ کتابخانه‌ی textwrap یک کتابخانه‌ی استاندارد است که برای قالب‌بندی متن در مواقعی استفاده می‌شود که به چاپ زیبا و منظم نیاز داریم.

این کتابخانه قابلیت‌هایی مشابه ویرایشگرهای متن و نرم‌افزارهای پردازش متن ارائه می‌دهد.

مروری کوتاه بر قابلیت‌ها:

textwrap.fill() —
متن را دریافت کرده و یک متن قالب‌بندی‌شده برمی‌گرداند؛ خط اول تورفتگی خود را حفظ می‌کند و فاصله‌های ابتدای هر خط بعدی در قالب پاراگراف قرار داده می‌شوند.

textwrap.dedent() —
برای حذف تورفتگی (پیشوند فاصله‌ی مشترک) از تمام خطوط متن استفاده می‌شود.

textwrap.indent() —
برای افزودن یک پیشوند متنی به تمام خطوط یک پاراگراف به‌کار می‌رود.

#textwrap | @learnpythonicy
✔️ تابع reduce

در پایتون، ماژول functools دسترسی به قابلیت‌های تابعی (Functional Programming) زبان را فراهم می‌کند.
یکی از توابع مهم و کاربردی این ماژول، تابع reduce است که با اعمال متوالی یک تابع مشخص روی عناصر یک مجموعه داده، آن مجموعه را به یک مقدار نهایی کاهش می‌دهد و نتایج میانی را در طول فرآیند حفظ می‌کند.

به‌عنوان مثال، می‌توان عملکرد reduce را در ضرب متوالی اعداد مشاهده کرد:
ابتدا عدد 1 در 2 ضرب می‌شود، سپس حاصل به‌دست‌آمده در 3 ضرب می‌گردد و این روند به همین شکل ادامه پیدا می‌کند.

#python | #functools | @learnpythonicy
✔️ حذف None و مقادیر تکراری با حفظ ترتیب در پایتون

در بسیاری از سناریوهای واقعی (دیتاپروسسینگ، لاگ‌ها، ورودی کاربر)،
علاوه بر حذف مقادیر تکراری و None، حفظ ترتیب عناصر هم اهمیت دارد.

در این حالت استفاده از set مناسب نیست، چون ترتیب را از بین می‌برد.
راه‌حل تمیز و پایتونیک، استفاده از dict.fromkeys است:

data = [1, 2, None, 3, 2, None, 4, 1]

clean_data = list(dict.fromkeys(x for x in data if x is not None))

print(clean_data)

📌 خروجی:
[1, 2, 3, 4]


🔍 مزایا
. ترتیب لیست حفظ می‌شود
. بدون حلقه‌ی دستی
. مناسب پیش‌پردازش دیتا

⚠️ نکته:
این روش از پایتون 3.7 به بعد کاملاً قابل اعتماد است (ترتیب دیکشنری حفظ می‌شود).

#fromkeys | #dict | #list | #none | @LearnPythonIcy
✔️ گروه‌بندی آیتم‌ها در پایتون با defaultdict

در بسیاری از سناریوهای واقعی
(دیتاپروسسینگ، گزارش‌گیری، لاگ‌ها، دسته‌بندی داده‌ها)،
نیاز داریم آیتم‌ها را بر اساس یک کلید مشخص گروه‌بندی کنیم.
روش‌های معمول با if و in کد را شلوغ می‌کنند.
راه‌حل پایتونیک و تمیز: استفاده از defaultdict.
from collections import defaultdict

data = [
("apple", "fruit"),
("carrot", "vegetable"),
("banana", "fruit"),
("spinach", "vegetable"),
]

grouped = defaultdict(list)

for item, category in data:
grouped[category].append(item)

print(dict(grouped))

📌 خروجی:
{
'fruit': ['apple', 'banana'],
'vegetable': ['carrot', 'spinach']
}


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

⚠️ نکته: defaultdict مقدار پیش‌فرض می‌سازد،
پس اگر نوع داده اشتباه انتخاب شود، ممکن است باگ پنهان ایجاد کند.

#defaultdict | #collections | #python | #dataprocessing | @LearnPythonIcy
اول بگوو خروجی این کد چیه؟🤨



🧠 Python Mutability Trick — چرا جواب این عجیب میشه؟

کدی که می‌بینی ساده به‌نظر میاد، ولی پشتش یکی از مهم‌ترین مفاهیم پایتون قایمه:
لیست mutable هست و عمل ضرب روی لیست، فقط referenceها رو تکثیر می‌کنه، نه لیست جدید!
x = [[]]
y = x * 3
y[0].append(1)
print(len(y[1]))

📌 نتیجه؟
چاپ می‌کنه: 1

چــــرا؟
چون x[0] یک لیست خالیه و وقتی می‌گی x * 3 پایتون همون یک لیست رو سه بار اشاره میده.
پس y[0]، y[1] و y[2] همگی در اصل یک لیست مشترک هستن.
هر تغییری روی یکی، روی همش اعمال میشه.

🔥 نکته تستیِ پست:

هر وقت تو پایتون لیست رو ضرب کردی، بدون copy چطور می‌تونی از این دام فرار کنی؟

جواب 👇
y = [list(x[0]) for _ in range(3)]


#تست_تایم | @learnpythonicy
دقت در محاسبات عددی (Floating vs Decimal vs Fraction)

در اغلب زبان‌های برنامه‌نویسی، اعداد اعشاری از نوع Floating-point به‌صورت دودویی در حافظه ذخیره می‌شوند.
این یعنی در بسیاری از محاسبات، با مقادیر تقریبی سروکار داریم، نه عدد دقیق.

برای افزایش دقت:

می‌توان از Decimal استفاده کرد که خطای اعشاری را تا حد زیادی کاهش می‌دهد،

اما حتی Decimal هم در برخی سناریوهای خاص کاملاً بی‌نقص نیست.

📌 وقتی دقت ۱۰۰٪ اهمیت دارد (مثل محاسبات مالی، آماری یا ریاضی دقیق)،
بهترین انتخاب Fraction است.

که Fraction عدد را به‌صورت کسر منطقی (صورت/مخرج) ذخیره می‌کند، نه اعشار تقریبی؛
در نتیجه محاسبات:
. دقیق
. قابل پیش‌بینی
. بدون خطای اعشاری
انجام می‌شوند.

خلاصه‌ی انتخاب

float → سریع ولی تقریبی

Decimal → دقیق‌تر، مناسب محاسبات حساس

Fraction → دقیق‌ترین گزینه برای محاسبات ایده‌آل


🧪 مثال
from decimal import Decimal
from fractions import Fraction

# float
print(0.1 + 0.2)
# خروجی: 0.30000000000000004

# Decimal
print(Decimal("0.1") + Decimal("0.2"))
# خروجی: 0.3

# Fraction
print(Fraction(1, 10) + Fraction(2, 10))
# خروجی: 3/10

📌 نکته مهم:

float
به‌خاطر نمایش دودویی دچار خطا می‌شود.

Decimal
باید با رشته (string) ساخته شود.

Fraction
نتیجه را دقیق و بدون خطا نگه می‌دارد


#numbers | #precision | #FloatingPoint | #Decimal | #Fraction | @Learnpythonicy
2
کار با فایل‌های YAML در Python با کتابخانه PyYAML

کتابخانه PyYAML امکان کار آسان و مؤثر با فایل‌های YAML (YAML Ain’t Markup Language) را فراهم می‌کند. این فرمت معمولاً برای پیکربندی‌ها، تنظیمات و تبادل داده‌های ساختاریافته استفاده می‌شود.

import yaml

# داده‌ای که می‌خواهیم در فایل ذخیره کنیم
data_to_write = {'name': 'علی', 'age': 25, 'city': 'تهران'}

# نوشتن داده در فایل YAML
with open('example.yaml', 'w') as file:
yaml.dump(data_to_write, file, default_flow_style=False)

# خواندن داده از فایل YAML
with open('example.yaml', 'r') as file:
loaded_data = yaml.safe_load(file)
print(f"داده‌های بارگذاری شده: {loaded_data}")


خروجی فایل example.yaml:

age: 25
city: تهران
name: علی


در این مثال، ما دیکشنری data_to_write را در فایل example.yaml ذخیره کرده و سپس داده‌ها را دوباره در متغیر loaded_data بارگذاری می‌کنیم.

کتابخانه PyYAML ابزار ساده و خوانایی برای کار با داده‌های YAML در Python فراهم می‌کند. چه برای ذخیره پیکربندی‌ها، چه تبادل داده‌های ساختاریافته، PyYAML باعث می‌شود کد شما خوانا و آسان برای استفاده باشد. 🙂‍↔️

#yaml | #pyyaml | @learnpythonicy
این تست واقعاً ذهن آدمو درگیر می‌کنه 😈

اول فکر کن خروجی این کد چیه؟ 🤯 و بعد توضیحات و بخون!



Output: [[1, 3], [2], [1, 3]]

چرا اینطور شد

- خط ۲: append روی لیست مشترک، همه رو [1] می‌کنه
- خط ۳: x[1] + [2] یه لیست جدیــد می‌سازه و به x[1] نسبت داده می‌شه ← دیگه با بقیه مشترک نیست، میشه [2]
- خط ۴: extend روی لیست مشترک (که هنوز x[0] و x[2] بهش وصله) عدد ۳ رو اضافه می‌کنه ← هر دو می‌شن [1, 3]

🔥نکته تستیِ پست
عملگر + همیشه یه لیست جدید می‌سازه، در حالی که append و extend روی لیست موجود تغییر اعمال می‌کنند!

🎯 سوال
اگه به جای x[1] = x[1] + [2] می‌نوشتیم x[1].append(2) چی میشد؟ 🤔👇

#تست_تایم | @learnpythonicy
⛔️🚫⛔️🚫⛔️🚫⛔️🚫

. دوست دارید پست‌ها چه مدلی باشه؟
. تو چه حیطه‌ای از پایتون؟
. در چه سطحی باشه؟
و...
پیشنهاد و نظراتتون و دریغ نکنید از من! 💝🙏

کامنت کنید یا ناشناس بفرستید.
@learnpythonicyBot