🟢 ترفند کوتاه پایتون
💡 با یک خط کد، جای دو متغیر رو عوض کن! 😎
🐍 تو پایتون لازم نیست برای جابهجایی مقدار دو متغیر، متغیر کمکی بسازی:
📤 خروجی:
✅ این روش هم کوتاهه، هم خوانا و مخصوصاً تو کدهای روزمره به کارت میاد.
📌 ذخیره کن که یادت نره!
🔗 @pytechnoo | پایتک 🚀
#Python #ترفند_پایتون #برنامه_نویسی
💡 با یک خط کد، جای دو متغیر رو عوض کن! 😎
🐍 تو پایتون لازم نیست برای جابهجایی مقدار دو متغیر، متغیر کمکی بسازی:
a = 10
b = 20
a, b = b, a
print(a, b)
📤 خروجی:
20 10
✅ این روش هم کوتاهه، هم خوانا و مخصوصاً تو کدهای روزمره به کارت میاد.
📌 ذخیره کن که یادت نره!
🔗 @pytechnoo | پایتک 🚀
#Python #ترفند_پایتون #برنامه_نویسی
❤2
🟢 آموزش کاربردی
💡 هنوز برای چسبوندن متن و متغیرها از
استفاده میکنی؟ 👀
🐍 با قابلیت f-string خروجیهات رو تمیزتر بنویس:
📤 خروجی:
✅ فقط کافیه قبل از کوتیشن حرف
بذاری و متغیر رو داخل
قرار بدی.
💻 سادهتر بنویس، خواناتر کدنویسی کن!
🔗 @pytechnoo | پایتک 🚀
#Python #آموزش_پایتون #ترفند_برنامه_نویسی
💡 هنوز برای چسبوندن متن و متغیرها از
+
استفاده میکنی؟ 👀
🐍 با قابلیت f-string خروجیهات رو تمیزتر بنویس:
name = "سارا"
score = 18.5
print(f"{name} نمرهی {score} گرفت.")
📤 خروجی:
سارا نمرهی 18.5 گرفت.
✅ فقط کافیه قبل از کوتیشن حرف
f
بذاری و متغیر رو داخل
{}قرار بدی.
💻 سادهتر بنویس، خواناتر کدنویسی کن!
🔗 @pytechnoo | پایتک 🚀
#Python #آموزش_پایتون #ترفند_برنامه_نویسی
❤2
🟢 چالش حدس خروجی
💡 فکر میکنی پایتون برای هر دو لیست زیر
برمیگردونه؟ 🤔
کدوم گزینه درسته؟ 👇
🔹 الف)
🔹 ب)
🔹 ج)
⏳ قبل از اجرای کد، یه حدس بزن!
✅ پاسخ صحیح: گزینهیب
📤 خروجی:
False
True
🐍 نکته: لیست خالی
محسوب میشه، اما لیست
خالی نیست؛ حتی اگه تنها عضو اون صفر باشه!
🔗 @pytechnoo | پایتک 🚀
#چالش_پایتون #Python #آموزش_برنامه_نویسی
💡 فکر میکنی پایتون برای هر دو لیست زیر
True
برمیگردونه؟ 🤔
print(bool([]))
print(bool([0]))
کدوم گزینه درسته؟ 👇
🔹 الف)
True
False
🔹 ب)
False
True
🔹 ج)
False
False
⏳ قبل از اجرای کد، یه حدس بزن!
✅ پاسخ صحیح: گزینهی
📤 خروجی:
True
🐍 نکته: لیست خالی
False
محسوب میشه، اما لیست
[0]
خالی نیست؛ حتی اگه تنها عضو اون صفر باشه!
🔗 @pytechnoo | پایتک 🚀
#چالش_پایتون #Python #آموزش_برنامه_نویسی
❤2
🟢 معرفی قابلیت کاربردی
💡 میخوای پرتکرارترین کلمههای یک متن رو پیدا کنی؟ لازم نیست از صفر شروع کنی! 🚀
🐍 کتابخانهی استاندارد
این کار رو برات انجام میده:
📤 خروجی:
✅ با
دو کلمهی پرتکرار متن رو پیدا میکنی؛ بدون نیاز به نصب کتابخانهی اضافی!
📌 این ابزار برای تحلیل متن و بررسی فراوانی دادهها کاربردیه.
🔗 @pytechnoo | پایتک 🚀
#Python #کتابخانه_پایتون #کدنویسی
💡 میخوای پرتکرارترین کلمههای یک متن رو پیدا کنی؟ لازم نیست از صفر شروع کنی! 🚀
🐍 کتابخانهی استاندارد
Counter
این کار رو برات انجام میده:
from collections import Counter
text = "python is fun and python is useful"
words = text.split()
print(Counter(words).most_common(2))
📤 خروجی:
[('python', 2), ('is', 2)]✅ با
most_common(2)
دو کلمهی پرتکرار متن رو پیدا میکنی؛ بدون نیاز به نصب کتابخانهی اضافی!
📌 این ابزار برای تحلیل متن و بررسی فراوانی دادهها کاربردیه.
🔗 @pytechnoo | پایتک 🚀
#Python #کتابخانه_پایتون #کدنویسی
❤2
🟢 پروژهی کوچک و واقعی
💡 با چند خط پایتون، گذرواژهی تصادفی بساز! 🔐
🐍 برای تولید گذرواژه از ماژول
استفاده کن؛ این ماژول برای کاربردهای امنیتی مناسبتر از
معمولیه.
📤 نمونه خروجی:
🔸 خروجی هر بار متفاوته.
🔸 این نمونه از حروف انگلیسی و اعداد استفاده میکنه؛ برای امنیت بیشتر، طول و تنوع نویسهها رو متناسب با نیازت انتخاب کن.
🚀 اولین پروژهی کوچیکت رو اجرا کن!
🔗 @pytechnoo | پایتک
#Python #پروژه_پایتون #اتوماسیون
💡 با چند خط پایتون، گذرواژهی تصادفی بساز! 🔐
🐍 برای تولید گذرواژه از ماژول
secrets
استفاده کن؛ این ماژول برای کاربردهای امنیتی مناسبتر از
random
معمولیه.
import secrets
import string
chars = string.ascii_letters + string.digits
password = "".join(
secrets.choice(chars) for _ in range(12)
)
print(password)
📤 نمونه خروجی:
mQ7zR2aL9vBc
🔸 خروجی هر بار متفاوته.
🔸 این نمونه از حروف انگلیسی و اعداد استفاده میکنه؛ برای امنیت بیشتر، طول و تنوع نویسهها رو متناسب با نیازت انتخاب کن.
🚀 اولین پروژهی کوچیکت رو اجرا کن!
🔗 @pytechnoo | پایتک
#Python #پروژه_پایتون #اتوماسیون
❤2
💡 هنوز برای پیدا کردن باگها فقط از
استفاده میکنی؟ 👀
🐍 این روش اسمش Print Debugging هست و هنوز هم کاربرد داره؛ اما وقتی کدت پیچیده میشه، استفاده از Debugger میتونه کار رو خیلی راحتتر کنه!
با دیباگر میتونی:
✅ اجرای برنامه رو متوقف کنی.
✅ مقدار متغیرها رو ببینی.
✅ خطبهخط کدت رو بررسی کنی.
📌 تو بیشتر از کدوم روش استفاده میکنی؟
یا Debugger؟
🔗 @pytechnoo | پایتک 🚀
#Python #دیباگ #برنامه_نویسی
print()
استفاده میکنی؟ 👀
🐍 این روش اسمش Print Debugging هست و هنوز هم کاربرد داره؛ اما وقتی کدت پیچیده میشه، استفاده از Debugger میتونه کار رو خیلی راحتتر کنه!
با دیباگر میتونی:
✅ اجرای برنامه رو متوقف کنی.
✅ مقدار متغیرها رو ببینی.
✅ خطبهخط کدت رو بررسی کنی.
📌 تو بیشتر از کدوم روش استفاده میکنی؟
print()
یا Debugger؟
🔗 @pytechnoo | پایتک 🚀
#Python #دیباگ #برنامه_نویسی
❤2
💡 میدونستی میتونی اجرای برنامه رو دقیقاً روی یک خط متوقف کنی؟ 🎯
🐍 قابلیت Breakpoint در ابزارهایی مثل VS Code و PyCharm همین کار رو انجام میده!
📌 کافیه روی کنار خط موردنظر کلیک کنی و برنامه رو با حالت Debug اجرا کنی.
وقتی اجرا به اون خط برسه، متوقف میشه و میتونی مقدار متغیرها رو بررسی کنی.
✅ دیگه لازم نیست برای پیدا کردن هر باگ، کل برنامه رو خطبهخط اجرا کنی!
📌 این قابلیت رو ذخیره کن تا موقع دیباگ به کارت بیاد.
🔗 @pytechnoo | پایتک 🚀
#Python #VSCode #PyCharm
🐍 قابلیت Breakpoint در ابزارهایی مثل VS Code و PyCharm همین کار رو انجام میده!
📌 کافیه روی کنار خط موردنظر کلیک کنی و برنامه رو با حالت Debug اجرا کنی.
وقتی اجرا به اون خط برسه، متوقف میشه و میتونی مقدار متغیرها رو بررسی کنی.
✅ دیگه لازم نیست برای پیدا کردن هر باگ، کل برنامه رو خطبهخط اجرا کنی!
📌 این قابلیت رو ذخیره کن تا موقع دیباگ به کارت بیاد.
🔗 @pytechnoo | پایتک 🚀
#Python #VSCode #PyCharm
❤2
💡 توی دیباگر، تفاوت Step Over و Step Into رو میدونی؟ 🤔
🐍 این دو ابزار برای حرکت مرحلهبهمرحله در کد استفاده میشن:
🔹 Step Over: خط فعلی رو اجرا میکنه و به خط بعدی میره، بدون اینکه وارد تابع فراخوانیشده بشه.
🔹 Step Into: اگه خط فعلی تابعی رو صدا بزنه، وارد بدنهی اون تابع میشه.
🔹 Step Out: ادامهی تابع فعلی رو اجرا میکنه و به محل فراخوانی برمیگرده.
✅ با شناخت این سه ابزار، راحتتر میفهمی کدت دقیقاً کجا و چطور اجرا میشه.
🔗 @pytechnoo | پایتک 🚀
#Python #Debugging #آموزش_پایتون
🐍 این دو ابزار برای حرکت مرحلهبهمرحله در کد استفاده میشن:
🔹 Step Over: خط فعلی رو اجرا میکنه و به خط بعدی میره، بدون اینکه وارد تابع فراخوانیشده بشه.
🔹 Step Into: اگه خط فعلی تابعی رو صدا بزنه، وارد بدنهی اون تابع میشه.
🔹 Step Out: ادامهی تابع فعلی رو اجرا میکنه و به محل فراخوانی برمیگرده.
✅ با شناخت این سه ابزار، راحتتر میفهمی کدت دقیقاً کجا و چطور اجرا میشه.
🔗 @pytechnoo | پایتک 🚀
#Python #Debugging #آموزش_پایتون
❤2
💡 برنامهات داخل یک حلقه هزاران بار اجرا میشه؟ لازم نیست هر بار متوقفش کنی! 🚀
🐍 با Conditional Breakpoint میتونی مشخص کنی برنامه فقط وقتی متوقف بشه که یک شرط برقرار باشه.
مثلاً در دیباگر، این شرط رو برای بررسی یک مادهی غذایی قرار بده:
حالا با برقرار شدن شرط، اجرای برنامه متوقف میشه و میتونی وضعیت متغیرها رو بررسی کنی.
✅ این روش برای حلقههای طولانی و پیدا کردن خطاهای وابسته به یک مقدار خاص خیلی کاربردیه.
🔗 @pytechnoo | پایتک 🚀
#Python #Debugging #ترفند_پایتون
🐍 با Conditional Breakpoint میتونی مشخص کنی برنامه فقط وقتی متوقف بشه که یک شرط برقرار باشه.
مثلاً در دیباگر، این شرط رو برای بررسی یک مادهی غذایی قرار بده:
ingredient["name"].lower() == "salsa"
حالا با برقرار شدن شرط، اجرای برنامه متوقف میشه و میتونی وضعیت متغیرها رو بررسی کنی.
✅ این روش برای حلقههای طولانی و پیدا کردن خطاهای وابسته به یک مقدار خاص خیلی کاربردیه.
🔗 @pytechnoo | پایتک 🚀
#Python #Debugging #ترفند_پایتون
❤2
💡 وقتی برنامه متوقف میشه، لازم نیست حدس بزنی متغیرها چه مقداری دارن! 👀
🐍 در دیباگر پایتون، پنل Variables بهت اجازه میده مقدار متغیرهای فعلی رو بررسی کنی.
قابلیت Call Stack هم نشون میده از چه تابعهایی به محل فعلی رسیدی.
مثلاً اگر خطایی داخل یک تابع رخ بده، میتونی مسیر فراخوانی تابعها رو بررسی کنی و بفهمی برنامه چطور به اون نقطه رسیده.
📌 نکته: قبل از تغییر کد، اول وضعیت متغیرها و مسیر اجرای برنامه رو بررسی کن.
🔗 @pytechnoo | پایتک 🚀
#Python #دیباگ #ترفند_پایتون
🐍 در دیباگر پایتون، پنل Variables بهت اجازه میده مقدار متغیرهای فعلی رو بررسی کنی.
قابلیت Call Stack هم نشون میده از چه تابعهایی به محل فعلی رسیدی.
مثلاً اگر خطایی داخل یک تابع رخ بده، میتونی مسیر فراخوانی تابعها رو بررسی کنی و بفهمی برنامه چطور به اون نقطه رسیده.
📌 نکته: قبل از تغییر کد، اول وضعیت متغیرها و مسیر اجرای برنامه رو بررسی کن.
🔗 @pytechnoo | پایتک 🚀
#Python #دیباگ #ترفند_پایتون
❤2
🛠 یک نکته مهم برای ساخت تایمر در پایتون
در یک تایمر ساده ممکنه از این منطق استفاده کنیم:
این روش برای تمرین و پروژههای ساده قابل فهمه؛ اما یک نکته داره: زمان هر دور حلقه دقیقاً یک ثانیه نیست، چون اجرای کدهای داخل حلقه هم زمان میبره.
در نتیجه، هرچه تایمر طولانیتر باشه، ممکنه اختلاف کوچکی بین زمان واقعی و زمان محاسبهشده ایجاد بشه.
برای تایمر دقیقتر میتونی از
استفاده کنی؛ این تابع برای اندازهگیری گذر زمان مناسبه:
💡 نکته برنامهنویسی: بهجای اینکه فقط تعداد دفعات اجرای حلقه رو بشماری، میتونی زمان واقعی سپریشده رو اندازه بگیری.
🔗 @pytechnoo | پایتک 🚀
#Python #Time #پروژه_پایتون
در یک تایمر ساده ممکنه از این منطق استفاده کنیم:
time_elapsed = 0
while time_elapsed < total_seconds:
time.sleep(1)
time_elapsed += 1
این روش برای تمرین و پروژههای ساده قابل فهمه؛ اما یک نکته داره: زمان هر دور حلقه دقیقاً یک ثانیه نیست، چون اجرای کدهای داخل حلقه هم زمان میبره.
در نتیجه، هرچه تایمر طولانیتر باشه، ممکنه اختلاف کوچکی بین زمان واقعی و زمان محاسبهشده ایجاد بشه.
برای تایمر دقیقتر میتونی از
time.monotonic()
استفاده کنی؛ این تابع برای اندازهگیری گذر زمان مناسبه:
import time
duration = 10
end_time = time.monotonic() + duration
while True:
remaining = max(0, int(end_time - time.monotonic()))
print(f"\rزمان باقیمانده: {remaining:02d}", end="", flush=True)
if remaining == 0:
break
time.sleep(0.1)
print("\nزمان تمام شد!")
💡 نکته برنامهنویسی: بهجای اینکه فقط تعداد دفعات اجرای حلقه رو بشماری، میتونی زمان واقعی سپریشده رو اندازه بگیری.
🔗 @pytechnoo | پایتک 🚀
#Python #Time #پروژه_پایتون
❤2
⌨️ یک اشتباه رایج در پایتون: input عدد برنمیگردونه!
وقتی از
استفاده میکنی، مقدار دریافتی بهصورت رشته (
) برمیگرده؛ حتی اگر کاربر عدد وارد کنه.
مثلاً:
اگر میخوای با ورودی محاسبات ریاضی انجام بدی، باید اون رو تبدیل کنی:
مثلاً اگر کاربر ۲ دقیقه و ۱۵ ثانیه وارد کنه، نتیجه میشه ۱۳۵ ثانیه.
⚠️ اگر کاربر بهجای عدد چیزی مثل
وارد کنه،
خطا میده. در برنامه واقعی بهتره ورودی رو اعتبارسنجی کنی و خطا رو مدیریت کنی.
🔗 @pytechnoo | پایتک 🚀
#Python #Input #آموزش_پایتون
وقتی از
input()
استفاده میکنی، مقدار دریافتی بهصورت رشته (
str
) برمیگرده؛ حتی اگر کاربر عدد وارد کنه.
مثلاً:
age = input("How old are you? ")
print(type(age)) # <class 'str'>اگر میخوای با ورودی محاسبات ریاضی انجام بدی، باید اون رو تبدیل کنی:
minutes = int(input("چند دقیقه؟ "))
seconds = int(input("چند ثانیه؟ "))
total_seconds = minutes * 60 + seconds
print(f"زمان کل: {total_seconds} ثانیه")مثلاً اگر کاربر ۲ دقیقه و ۱۵ ثانیه وارد کنه، نتیجه میشه ۱۳۵ ثانیه.
⚠️ اگر کاربر بهجای عدد چیزی مثل
hello
وارد کنه،
int()
خطا میده. در برنامه واقعی بهتره ورودی رو اعتبارسنجی کنی و خطا رو مدیریت کنی.
🔗 @pytechnoo | پایتک 🚀
#Python #Input #آموزش_پایتون
❤2
🪄 کاراکترهایی که ظاهر ترمینال رو تغییر میدن!
بعضی کاراکترها در پایتون فقط برای نمایش متن نیستن؛ میتونن رفتار مکاننما و ظاهر ترمینال رو هم تغییر بدن.
به اینها معمولاً Escape Sequence گفته میشه.
چند نمونه کاربردی:
باعث میشه متن به خط بعدی بره.
یک فاصله تب ایجاد میکنه.
و برای کنترل بیشتر ترمینال، میتونی از توالیهای ANSI استفاده کنی:
در ترمینالهایی که از این توالیها پشتیبانی میکنن:
صفحه رو پاک میکنه.
مکاننما رو به موقعیت ابتدایی میبره.
🎯 این قابلیتها برای ساخت تایمرهای زنده، نمایش وضعیت برنامه و ابزارهای خط فرمان مفیدن.
⚠️ پشتیبانی از توالیهای ANSI به ترمینال و محیط اجرا بستگی داره؛ ممکنه همهجا یکسان عمل نکنن.
🔗 @pytechnoo | پایتک 🚀
#Python #ANSI #ترفند_پایتون
بعضی کاراکترها در پایتون فقط برای نمایش متن نیستن؛ میتونن رفتار مکاننما و ظاهر ترمینال رو هم تغییر بدن.
به اینها معمولاً Escape Sequence گفته میشه.
چند نمونه کاربردی:
print("Hello\nWorld")\n
باعث میشه متن به خط بعدی بره.
print("Hello\tWorld")\t
یک فاصله تب ایجاد میکنه.
و برای کنترل بیشتر ترمینال، میتونی از توالیهای ANSI استفاده کنی:
print("\033[2J\033[H", end="")در ترمینالهایی که از این توالیها پشتیبانی میکنن:
\033[2J
صفحه رو پاک میکنه.
\033[H
مکاننما رو به موقعیت ابتدایی میبره.
🎯 این قابلیتها برای ساخت تایمرهای زنده، نمایش وضعیت برنامه و ابزارهای خط فرمان مفیدن.
⚠️ پشتیبانی از توالیهای ANSI به ترمینال و محیط اجرا بستگی داره؛ ممکنه همهجا یکسان عمل نکنن.
🔗 @pytechnoo | پایتک 🚀
#Python #ANSI #ترفند_پایتون
❤2
💡 وقتی پایتون خطا میده، اولین کار این نیست که کل کدت رو تغییر بدی! 🐍
به Traceback توجه کن؛ این گزارش مسیر رسیدن به خطا رو نشون میده و معمولاً محل بروز مشکل رو مشخص میکنه.
مثلاً:
خروجی خطا:
📌 اینجا تلاش کردیم به عضوی دسترسی پیدا کنیم که در لیست وجود نداره.
نکته: خطی که خطا در اون رخ میده، همیشه محل اصلی ایجاد مشکل نیست؛ گاهی دادهی اشتباه از بخش دیگری وارد برنامه شده.
🔗 @pytechnoo | پایتک 🚀
#Python #خطایابی #آموزش_برنامه_نویسی
به Traceback توجه کن؛ این گزارش مسیر رسیدن به خطا رو نشون میده و معمولاً محل بروز مشکل رو مشخص میکنه.
مثلاً:
numbers = [10, 20]
print(numbers[3])
خروجی خطا:
IndexError: list index out of range
📌 اینجا تلاش کردیم به عضوی دسترسی پیدا کنیم که در لیست وجود نداره.
نکته: خطی که خطا در اون رخ میده، همیشه محل اصلی ایجاد مشکل نیست؛ گاهی دادهی اشتباه از بخش دیگری وارد برنامه شده.
🔗 @pytechnoo | پایتک 🚀
#Python #خطایابی #آموزش_برنامه_نویسی
❤2
💡 گاهی کدت درسته، اما دادهای که دریافت میکنه باعث خطا میشه! ⚠️
🐍 فرض کن برنامهات مادهی
رو میشناسه، اما کاربر
وارد میکنه.
📤 خروجی:
✅ با
فاصلههای ابتدا و انتها حذف میشن و با
حروف انگلیسی کوچک میشن.
📌 دادهها رو اعتبارسنجی کن تا خطاهای مشابه زودتر شناسایی بشن.
🔗 @pytechnoo | پایتک 🚀
#Python #اعتبارسنجی_داده #ترفند_پایتون
🐍 فرض کن برنامهات مادهی
salsa
رو میشناسه، اما کاربر
SALSA
وارد میکنه.
locations = {
"salsa": "sauces",
"tomato": "produce"
}
ingredient = "SALSA"
name = ingredient.strip().lower()
print(locations.get(name, "Not found"))📤 خروجی:
sauces
✅ با
strip()
فاصلههای ابتدا و انتها حذف میشن و با
lower()
حروف انگلیسی کوچک میشن.
📌 دادهها رو اعتبارسنجی کن تا خطاهای مشابه زودتر شناسایی بشن.
🔗 @pytechnoo | پایتک 🚀
#Python #اعتبارسنجی_داده #ترفند_پایتون
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3
دوستان نظرتون خیلی برام مهمه، همه میدونیم که این پیامرسان ها کیفیت خوبی ندارند، اما باعث میشن این جمعمون کمرنگ نشه.👌
برای منی که این چنل رو تازه راه انداختم و میخام کسب و کار خودمو پیش ببرم، شرایط سخت تر هم میشه!
پس لطفا حمایتم کنید و توی نظرسنجی شرکت کنید.❤️🙏🏻
برای منی که این چنل رو تازه راه انداختم و میخام کسب و کار خودمو پیش ببرم، شرایط سخت تر هم میشه!
پس لطفا حمایتم کنید و توی نظرسنجی شرکت کنید.❤️🙏🏻
❤3
💡 چرا
گاهی یک دسته رو چند بار ایجاد میکنه؟ 🤔
🐍 تابع
از ماژول استاندارد
، عناصر پشتسرهم با کلید یکسان رو گروهبندی میکنه؛ خودش دادهها رو مرتب نمیکنه!
📤 خروجی:
✅ اگر میخوای هر دسته یکبار تشکیل بشه، قبلش دادهها رو بر اساس کلید گروهبندی مرتب کن.
🔗 @pytechnoo | پایتک 🚀
#Python #itertools #ترفند_پایتون
groupby()
گاهی یک دسته رو چند بار ایجاد میکنه؟ 🤔
🐍 تابع
groupby()
از ماژول استاندارد
itertools
، عناصر پشتسرهم با کلید یکسان رو گروهبندی میکنه؛ خودش دادهها رو مرتب نمیکنه!
from itertools import groupby
items = [
("produce", "avocado"),
("dairy", "milk"),
("produce", "cilantro")
]
items.sort(key=lambda x: (x[0], x[1]))
for location, group in groupby(
items, key=lambda x: x[0]
):
print(location, [name for _, name in group])
📤 خروجی:
dairy ['milk']
produce ['avocado', 'cilantro']
✅ اگر میخوای هر دسته یکبار تشکیل بشه، قبلش دادهها رو بر اساس کلید گروهبندی مرتب کن.
🔗 @pytechnoo | پایتک 🚀
#Python #itertools #ترفند_پایتون
❤3
