LEARN PYTHON 3THE HARD WAY.pdf
حجم:
6.2M
📚 «Learn Python 3 the Hard Way»
📚 کتاب "یادگیری پایتون ۳ به روش سخت"
✅ آیا میخواهید پایتون را بهصورت عملی و گامبهگام یاد بگیرید؟
✅ این کتاب با روشی متفاوت و تمرینمحور، شما را وادار میکند تا کد بنویسید، اشتباه کنید و از خطاها یاد بگیرید. برخلاف روشهای معمول، اینجا قرار نیست فقط بخوانید، بلکه باید کدنویسی کنید تا واقعاً پایتون را درک کنید!
خلاصهای از کتاب:
- آموزش پایتون ۳ از پایه تا پیشرفته
- شامل ۵۲ تمرین عملی برای تسلط بر مفاهیم
- تاکید بر یادگیری از طریق تکرار و اصلاح خطاها
- پوشش مباحثی مثل توابع، شیءگرایی، مدیریت فایلها، و دیباگ کردن
🔥 یادگیری واقعی با تلاش واقعی اتفاق میافتد!
#معرفی_کتاب | #بوک_تایم | آموزش پایتون
چگونه یک لیست را در پایتون به سرعت مرتب کنیم؟ 🚀
وقتی تازهکارها با نیاز به مرتب سازی یک لیست مواجه میشوند، ممکن است به فکر پیادهسازی الگوریتمهای دستی بیفتند. اما پایتون با متدهای داخلی خود، این کار را در یک خط کد انجام میدهد!
✨ روش سریع با sorted() و .sort()
numbers = [3, 1, 4, 1, 5, 9, 2]
# روش ۱: ایجاد لیست جدید (با sorted)
sorted_numbers = sorted(numbers)
print(sorted_numbers) # [1, 1, 2, 3, 4, 5, 9]
# روش ۲: مرتبسازی درجا (با .sort)
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 9]
🎯 تفاوتها:
✅ دستور sorted() لیست جدیدی برمیگرداند.
✅ دستور .sort() لیست اصلی را تغییر میدهد (درجا).
✅ هر دو برای اعداد، رشتهها و دادههای سفارشی (با key=) کار میکنند!
چگونه یک دیکشنری را در پایتون به سرعت وارونه کنیم؟ (جابجایی کلیدها و مقادیر) 🔄
✨ روش سریع با Dictionary Comprehension
original_dict = {"a": 1, "b": 2, "c": 3}
# وارونه کردن دیکشنری (مقادیر → کلید، کلیدها → مقدار)
reversed_dict = {value: key for key, value in original_dict.items()}
print(reversed_dict) # {1: 'a', 2: 'b', 3: 'c'}
⚠️ نکته مهم:
- این روش فقط زمانی کار میکند که مقادیر دیکشنری منحصربهفرد باشند (در غیر این صورت، مقادیر تکراری بازنویسی میشوند!).
- اگر مقادیر تکراری دارید، از روش های دیگر مانند defaultdict استفاده کنید.
🎯 روش defaultdict (مناسب برای مقادیر تکراری):
from collections import defaultdict
original_dict = {"a": 1, "b": 2, "c": 2, "d": 3}
reversed_dict = defaultdict(list)
for key, value in original_dict.items():
reversed_dict[value].append(key) # ذخیره لیستی از کلیدها برای مقادیر تکراری
print(dict(reversed_dict)) # {1: ['a'], 2: ['b', 'c'], 3: ['d']}
#dict | @learnpythonicy | #بدانیم
🔆 استفاده از تابع zip() برای ترکیب لیستها در پایتون!
برای ترکیب دو لیست بهطوریکه هر عنصر از لیست اول با عنصر معادل خود در لیست دوم جفت شود، معمولاً از حلقهها استفاده میکنیم:
combined = []
for i in range(len(list1)):
combined.append((list1[i], list2[i]))
اما پایتون یک روش سادهتر و بهینهتر به نام تابع zip() ارائه میدهد که این کار را به آسانی انجام میدهد:
combined = list(zip(list1, list2))
در اینجا، تابع zip() به صورت جفتی عناصر دو لیست را ترکیب میکند و نتیجه را بهصورت یک لیست از tupleها برمیگرداند. به عنوان مثال، اگر list1 = [1, 2, 3] و list2 = ['a', 'b', 'c'] باشد، خروجی combined به صورت زیر خواهد بود:
[(1, 'a'), (2, 'b'), (3, 'c')]
این روش نه تنها کد را تمیز و مختصر میکند، بلکه باعث افزایش کارایی نیز میشود. همچنین، میتوانیم از تابع zip() برای ترکیب چند لیست بهطور همزمان استفاده کنیم:
combined = list(zip(list1, list2, list3))
این قابلیتهای جذاب zip() میتواند به شما کمک کند تا دستکاریهای مختلفی روی لیستها و دادهها انجام دهید!
#zip | @learnpythonicy
☀️ یکی از ماژولهای جدید و جذاب پایتون، graphlib است که در پایتون ۳.۹ معرفی شد. این ماژول برای انجام توپولوژیکال سورت (مرتبسازی توپولوژیکی) روی گرافهای بدون دور (DAG) بسیار مفید است.
مثال کاربردی graphlib برای زمانبندی کارها:
from graphlib import TopologicalSorter
# تعریف گراف کارها و وابستگیها
tasks = {
'پوشیدن کفش': {'پوشیدن جوراب'},
'پوشیدن جوراب': {'لباس پوشیدن'},
'لباس پوشیدن': {'دوش گرفتن'},
'دوش گرفتن': set(),
'خوردن صبحانه': {'مسواک زدن'},
'مسواک زدن': {'بیدار شدن'},
'بیدار شدن': set()
}
# ایجاد یک مرتبساز توپولوژیک
ts = TopologicalSorter(tasks)
# انجام مرتبسازی و چاپ ترتیب صحیح کارها
print("ترتیب بهینه انجام کارها:")
for task in ts.static_order():
print(f"→ {task}")
خروجی مثال:
ترتیب بهینه انجام کارها:
→ بیدار شدن
→ دوش گرفتن
→ لباس پوشیدن
→ پوشیدن جوراب
→ پوشیدن کفش
→ مسواک زدن
→ خوردن صبحانه
✔️مزایای graphlib
سبک و سریع: پیادهسازی بهینهشده در خود پایتون
خطایابی آسان اگر گراف دور داشته باشد به خوبی تشخیص میده
انعطافپذیر: هم با دیکشنری و هم با گرافهای دیگر کار میکند
🔆 تا حالا به این فکر کردی که بشه کد پایتون رو از داخل یه رشته اجرا کرد؟
با exec() ممکنه!
code = "print('moz')"
exec(code) # خروجی: moz
دستور exec() میتونه هر رشتهای که شامل کد پایتونه رو در لحظه اجرا کنه.
⚠️ نکته مهم امنیتی
😱همین یک خط کد میتونه کل سیستم رو پاک کنه. نگید نگفتم!!
exec("import os; os.system('rm -rf /')")
تجزیه و تحلیل کد
- خط دستوری import os: این خط ماژول os را وارد میکند که امکان تعامل با سیستم عامل را فراهم میکند.
- دستور os.system('rm -rf /'): این فرمان سعی میکد تمام فایلها و پوشهها را از دایرکتوری روت (/) در سیستمهای عامل شبه یونیکس حذف کند( پارامتر -r به معنای حذف بازگشتی و f به معنای حذف بدون درخواست تأیید است).
- تابع exec() برای اجرای کد پایتون موجود در رشته استفاده میشود.
🔒 پس هیچوقت از exec برای اجرای ورودیهای غیرقابل اعتماد استفاده نکن.( نکن این کار بده! )
#security | #os | #exec | @learnpythonicy
🔥 محاسبه توان اعداد در پایتون با ۵ روش جادویی!
برای محاسبه a^b در پایتون، این روشهای خلاقانه را امتحان کنید:
1️⃣ روش ساده با عملگر
result = a ** b
2️⃣ روش ریاضی با pow()
result = pow(a, b) # بهینهتر از ** برای اعداد بزرگ
3️⃣ روش حلقهای (بدون عملگر)
result = 1
for _ in range(b):
result *= a
4️⃣ روش بازگشتی خلاقانه
def power(a, b):
return 1 if b == 0 else a * power(a, b-1)
5️⃣ روش نمایی با لگاریتم (برای اعداد اعشاری)
import math
result = math.exp(b * math.log(a))
💎 روش ویژه: محاسبه توان با بیتها (روش برنامهنویسی سیستمی)
def bit_power(a, b):
result = 1
while b > 0:
if b & 1:
result *= a
a *= a
b >>= 1
return result
🎯 نکات طلایی:
- روش ** برای استفاده عمومی مناسب است
- دستور pow() برای محاسبات مدولار بهتر عمل میکند (pow(a,b,mod))
- روش بیتی سریعترین روش برای توانهای بزرگ است
✨ چالش: میتوانید تابعی بنویسید که همه این روشها را با هم مقایسه کند؟
#PythonMagic | @learnpythonicy
🔥 تشخیص زوج یا فرد یک عدد در یک خط کد!
این کد هوشمندانه با استفاده از باقیمانده تقسیم (number % 2) و لیست ایندکسینگ، بدون نیاز به دستورات شرطی، تشخیص میدهد عدد زوج است یا فرد:
- اگر باقیمانده ۰ شود (عدد زوج)، ایندکس 0 که متن 'Even' است انتخاب میشود.
- اگر باقیمانده ۱ شود (عدد فرد)، ایندکس 1 که متن 'Odd' است انتخاب میشود.
💡 کاربرد اصلی:
- جایگزین زیبا و فشرده برای if/else در شرایط ساده
- مناسب برای کدهای کوتاه و خوانا
- کارآمد در پردازش لیستهای عددی و فیلتر کردن دادهها
#بدانیم | آموزش پایتون
(این الگو برای هر نوع تصمیمگیری دو حالته قابل استفاده است!)
🤖 لطفاً _ممنونم؛ کلماتی کوچک با هزینههای هنگفت!
طبق گزارشها، ادب کاربران در گفتگو با هوش مصنوعی، مثل گفتن «لطفاً» و «ممنونم»، سالانه دهها میلیون دلار به OpenAI تحمیل میکند! سم آلتمن تأیید کرده که این پیامهای مؤدبانه، پردازش بیشتری میطلبند و در مقیاس جهانی، رقم قابل توجهی از منابع را مصرف میکنند.
📌 آیا شما هم هنگام چت با رباتها مؤدب هستید؟
#news | @learnpythonicy
"این کد نمونهای عملی از تبدیل مقادیر بولی به عدد است، که در محاسبات منطقی، کاهش پیچیدگی کد و کاربردهای مختلف در تحلیل دادهها بسیار مفید است. برنامهنویسی موثر با رویکردی ساده!" 🚀
#بدانیم | آمورش پایتون