✅ مثالهای کاربردی ترکیبی
💠 مدیریت سبد خرید:
cart = ["sib", "moz", "sib", "portoghal"]
cart.remove("sib") # Hazf avalin sib
item = cart.pop(0) # Hazf va gereftane moz
print(f"Item hazf shode: {item}")
del cart[0:1] # Hazf yek onsor dige
print(cart) # Khoroji: ["portoghal"]
cart.clear() # Khali kardane sabad
print(cart) # Khoroji: []
—-—-—-—-—-—-—-—-—-—-—
💠 فیلتر کردن دادههای نامعتبر:
data = ["ali", "", "zahra", "", "babak"]
try:
while "" in data:
data.remove("") # Hazf khaliha
except ValueError:
pass
print(data) # Khoroji: ["ali", "zahra", "babak"]
—-—-—-—-—-—-—-—-—-—-—
💠 مدیریت موجودی انبار:
stock = ["sib", "moz", "portoghal", "anar"]
if stock:
item = stock.pop() # Hazf akharin item
print(f"Item bargiri shod: {item}")
del stock[0:2] # Hazf do item aval
print(stock) # Khoroji: ["anar"]
💯 @PythonForYou 🧑💻👩💻
📢 تسلط بر فهرستها (بدون متدهای حذف و اضافه) 🐍
تو این پست قراره عمیقتر به فهرستها (Lists) در پایتون نگاه کنیم و روی تکنیکها و متدهایی تمرکز کنیم که فراتر از اضافه و حذف عنصرن. 😎
از چرخش فهرست و حلقهها گرفته تا برشها، آمار ساده، و نکات تورفتگی، همهچیز اینجاست! 🚀
بریم شروع کنیم!
💯 @PythonForYou 🧑💻👩💻
✨ اینجا روی متدهایی تمرکز میکنیم که برای مدیریت، مرتبسازی، و تحلیل فهرستها استفاده میشن.
🔰 index(value): ایندکس اولین نمونه از یه مقدار رو برمیگردونه.
fruits = ["sib", "moz", "portoghal", "sib"]
print(fruits.index("sib")) # Khoroji: 0
—-—-—-—-—-—-—-—-—-—-—
🔰 count(value): تعداد دفعات یه مقدار تو فهرست رو برمیگردونه.
print(fruits.count("sib")) # Khoroji: 2
—-—-—-—-—-—-—-—-—-—-—
🔰 sort(key=None, reverse=False): فهرست رو بهصورت درجا مرتب میکنه.
numbers = [3, 1, 4, 2]
numbers.sort()
print(numbers) # Khoroji: [1, 2, 3, 4]
numbers.sort(reverse=True)
print(numbers) # Khoroji: [4, 3, 2, 1]
—-—-—-—-—-—-—-—-—-—-—
🔰 reverse(): ترتیب فهرست رو معکوس میکنه (درجا).
numbers = [1, 2, 3, 4]
numbers.reverse()
print(numbers) # Khoroji: [4, 3, 2, 1]
—-—-—-—-—-—-—-—-—-—-—
🔰 copy(): یه کپی سطحی از فهرست میسازه.
fruits = ["sib", "moz"]
fruits_copy = fruits.copy()
fruits_copy[0] = "portoghal"
print(fruits) # Khoroji: ["sib", "moz"]
print(fruits_copy) # Khoroji: ["portoghal", "moz"]
💯 @PythonForYou 🧑💻👩💻
⭐️ تکنیکهای پیشرفته و نکات ریز
1️⃣ چرخش درون کل یک فهرست
🔸 چرخش درجا یعنی جابهجایی عناصر بدون ساخت فهرست جدید.
✨ مثال چرخش کامل:
numbers = [1, 2, 3, 4]
numbers.reverse()
print(numbers) # Khoroji: [4, 3, 2, 1]
✨ مثال چرخش به تعداد خاص (2 خانه به چپ):
numbers = [1, 2, 3, 4]
k = 2
numbers[:] = numbers[k:] + numbers[:k]
print(numbers) # Khoroji: [3, 4, 1, 2]
—-—-—-—-—-—-—-—-—-—-—
2️⃣ نگاهی دقیقتر به حلقهی for
حلقههای for برای پیمایش فهرستها عالیان.
🔹 پیمایش مستقیم:
fruits = ["sib", "moz", "portoghal"]
for fruit in fruits:
print(f"Mive: {fruit}")
# Khoroji:
# Mive: sib
# Mive: moz
# Mive: portoghal
🔹 با ایندکس و enumerate:
for i, fruit in enumerate(fruits):
print(f"Index {i}: {fruit}")
—-—-—-—-—-—-—-—-—-—-—
3️⃣ انجام کارهای بیشتر بر روی فهرستها
با حلقهها میتونی کارهای پیچیدهتری مثل فیلتر کردن یا تبدیل انجام بدی.
✨ مثال فیلتر کردن:
numbers = [1, 2, 3, 4]
evens = [num for num in numbers if num % 2 == 0]
print(evens) # Khoroji: [2, 4]
—-—-—-—-—-—-—-—-—-—-—
4️⃣ انجام کارهایی پس از حلقهی for
بعد از حلقه، میتونی نتایج رو جمعبندی کنی.
✨ مثال جمع و میانگین:
numbers = [1, 2, 3, 4]
total = sum(numbers)
print(f"Jame: {total}, Miyangin: {total / len(numbers)}")
# Khoroji: Jame: 10, Miyangin: 2.5
—-—-—-—-—-—-—-—-—-—-—
5️⃣ پیشگیری از خطاهای تورفتگی
🔸 تورفتگی فراموششده:
numbers = [1, 2, 3]
for num in numbers:
print(num) # IndentationError
✨ درست:
for num in numbers:
print(num)
🔸 فراموشی تورفتگی خطوط اضافی:
for num in numbers:
print(num)
print("Payan") # Bayad kharej az halghe bashe
🔸 تورفتگی غیرضروری:
numbers = [1, 2, 3]
print(numbers) # IndentationError
🔸 تورفتگی غیرضروری پس از حلقه:
for num in numbers:
print(num)
print("Ghalat!") # In to halghe-st
🔸 فراموشی دو نقطه (:):
for num in numbers # SyntaxError
print(num)
—-—-—-—-—-—-—-—-—-—-—
6️⃣ ساخت فهرستهای عددی
🔹 استفاده از range():
numbers = list(range(1, 6)) # [1, 2, 3, 4, 5]
print(numbers)
🔹 ساخت فهرست با ()range:
even_numbers = list(range(2, 11, 2)) # [2, 4, 6, 8, 10]
print(even_numbers)
🔹 آمار ساده با فهرست اعداد:
numbers = [3, 1, 4, 2]
print(f"Koochik: {min(numbers)}") # Khoroji: Koochik: 1
print(f"Bozorg: {max(numbers)}") # Khoroji: Bozorg: 4
print(f"Jame: {sum(numbers)}") # Khoroji: Jame: 10
print(f"Miyangin: {sum(numbers) / len(numbers)}") # Khoroji: Miyangin: 2.5
🔹 خلاصه فهرست:
cubes = [x**3 for x in range(1, 5)] # [1, 8, 27, 64]
print(cubes)
—-—-—-—-—-—-—-—-—-—-—
7️⃣ کار با بخشی از فهرست (برشها)
🔸 برش زدن:
numbers = [1, 2, 3, 4, 5]
print(numbers[1:4]) # Khoroji: [2, 3, 4]
print(numbers[::2]) # Khoroji: [1, 3, 5]
print(numbers[::-1]) # Khoroji: [5, 4, 3, 2, 1]
🔸 حرکت درون برش:
slice = numbers[1:4]
for num in slice:
print(num) # 2, 3, 4
numbers[1:4] = [20, 30, 40]
print(numbers) # Khoroji: [1, 20, 30, 40, 5]
🔸 نسخهبرداری:
fruits = ["sib", "moz"]
fruits_copy = fruits[:]
fruits_copy[0] = "portoghal"
print(fruits) # Khoroji: ["sib", "moz"]
print(fruits_copy) # Khoroji: ["portoghal", "moz"]
💯 @PythonForYou 🧑💻👩💻
📢 تسلط بر StopIteration 🐍
در اینجا قراره خطای StopIteration تو پایتون رو حسابی باز کنیم! 😎
این خطا وقتی با ایتراتورها یا ژنراتورها کار میکنی پیش میاد و فهمش برای مدیریت حلقهها و دادههای بزرگ خیلی کلیدیه. از پایه تا ترفندهای حرفهای، همهچیز اینجاست! 🚀
بریم شروع کنیم!
این StopIteration چیه؟ 🤔
در واقع StopIteration یه خطای داخلی (exception) تو پایتونه که وقتی یه ایتراتور یا ژنراتور به انتهای مقادیرش میرسه، پرتاب (raise) میشه. این خطا به پایتون میگه دیگه مقداری برای پیمایش وجود نداره. معمولاً تو کار با ژنراتورها یا متد ()next باهاش روبهرو میشی.
📌 چرا اتفاق میافته؟
وقتی سعی کنی از یه ایتراتور یا ژنراتور مقداری بگیری و چیزی باقی نمونده باشه، StopIteration پرتاب میشه.
💯 @PythonForYou 🧑💻👩💻
💠 ژنراتورها و مدیریت StopIteration
ژنراتورها ابزارهایی قدرتمند در پایتون برای تولید مقادیر بهصورت تنبل (lazy) هستند. وقتی مقادیرشان تمام شود، خطای StopIteration پرتاب میکنند. در ادامه کاربردها و ترفندهای کار با ژنراتورها را بررسی میکنیم.
1️⃣ ژنراتورها (Generator Expressions)
ژنراتورها با عبارات مولد (مانند (x for x in range(3))) ساخته میشوند و با تابع next() مقادیر را یکییکی تولید میکنند.
✨مثال:
gen = (x for x in range(3))
print(next(gen)) # Khoroji: 0
print(next(gen)) # Khoroji: 1
print(next(gen)) # Khoroji: 2
print(next(gen)) # Khata: StopIteration
2️⃣ توابع ژنراتور با yield
توابعی که از yield استفاده میکنند، ژنراتور هستند و هنگام اتمام مقادیر، StopIteration پرتاب میکنند.
✨ مثال:
def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
print(next(gen)) # Khoroji: 1
print(next(gen)) # Khoroji: 2
print(next(gen)) # Khoroji: 3
print(next(gen)) # Khata: StopIteration
3️⃣ حلقههای for
حلقههای for بهطور خودکار StopIteration را مدیریت میکنند، بنابراین خطایی نمیبینید.
✨ مثال:
for num in range(3):
print(num) # Khoroji: 0, 1, 2
💯 @PythonForYou 🧑💻👩💻
🎯 نکات و ترفندها
🔸 مدیریت خطا با try-except: برای جلوگیری از کرش برنامه، از try-except استفاده کنید:
gen = (x for x in range(2))
try:
print(next(gen)) # Khoroji: 0
print(next(gen)) # Khoroji: 1
print(next(gen)) # Khata: StopIteration
except StopIteration:
print("Generator Tamam Shod! 🚫")
🔸 مقدار پیشفرض در ()next: با تعیین مقدار پیشفرض، از خطای StopIteration جلوگیری کنید:
gen = (x for x in range(2))
print(next(gen, "Tamam Shod")) # Khoroji: 0
print(next(gen, "Tamam Shod")) # Khoroji: 1
print(next(gen, "Tamam Shod")) # Khoroji: Tamam Shod
🔸 یکبارمصرف بودن ژنراتورها: ژنراتورها فقط یکبار قابل پیمایشاند:
gen = (x for x in range(3))
print(list(gen)) # Khoroji: [0, 1, 2]
print(list(gen)) # Khoroji: []
🔸 ترکیب با itertools: ماژول itertools ابزارهای مفیدی برای مدیریت ژنراتورها ارائه میدهد:
from itertools import islice
gen = (x**2 for x in range(10))
print(list(islice(gen, 5))) # Khoroji: [0, 1, 4, 9, 16]
🔸 تشخیص پایان ژنراتور: برای بررسی پایان ژنراتور بدون خطا:
gen = (x for x in range(2))
while True:
value = next(gen, None)
if value is None:
print("Tamam Shod!")
break
print(value) # Khoroji: 0, 1, Tamam Shod!
💯 @PythonForYou 🧑💻👩💻
🛠 مثالهای کاربردی
🔸 فیلتر کردن اعداد زوج:
def evens():
for num in range(10):
if num % 2 == 0:
yield num
gen = evens()
try:
while True:
print(next(gen))
except StopIteration:
print("اعداد زوج تمام شدند!") # خروجی: 0, 2, 4, 6, 8, اعداد زوج تمام شدند!
🔸 خواندن فایل خطبهخط:
def read_lines(filename):
with open(filename, "r") as file:
for line in file:
yield line.strip()
gen = read_lines("sample.txt")
try:
while True:
print(next(gen))
except StopIteration:
print("فایل تمام شد!")
🔸 جستجوی اولین عدد زوج:
def find_first_even(numbers):
for num in numbers:
if num % 2 == 0:
yield num
break
gen = find_first_even([1, 3, 4, 5, 6])
print(next(gen, "هیچ زوج نبود!")) # خروجی: 4
💡 نکات حرفهای
- همیشه StopIteration را مدیریت کنید، مگر اینکه از حلقه for استفاده کنید.
- برای کارهای پیچیده، از ماژول itertools (مانند cycle یا islice) استفاده کنید.
- هنگام دیباگ، مطمئن شوید دادههای ورودی ژنراتور درست هستند.
💯 @PythonForYou 🧑💻👩💻
۷ کاربرد خفن حلقهی while تو پایتون 🐍
حلقهی while تو پایتون مثل یه رفیق باحاله که تا وقتی بهش نگی "تموم کن"، کارشو ادامه میده! 😍
آمادهاید؟ بزن بریم! 🚗
—-—-—-—-—-—-—-—-—-—-—
۱. شمردن اعداد مثل حرفهایها! 🔢
با حلقهی while میتونی یه سری عدد رو بشمری و نشون بدی. مثلاً از ۱ تا ۵:
current_number = 1
while current_number <= 5:
print(current_number)
current_number += 1
✨ چطور کار میکنه؟
- از عدد ۱ شروع میکنیم.
- تا وقتی current_number از ۵ بزرگتر نشده، عدد رو چاپ میکنه و یه واحد بهش اضافه میکنه.
- خروجی: 1 2 3 4 5
مثل یه ماشین حساب باحال که خودش میشمره! 😎
—-—-—-—-—-—-—-—-—-—-—
۲. بذار کاربر بگه کی تموم شه! 🛑
میتونی برنامهای بنویسی که تا وقتی کاربر نخواد، ادامه بده. مثلاً یه برنامه که هر چی کاربر مینویسه، تکرار میکنه تا وقتی بگه "quit":
prompt = "\nYe chizi bego, manam tekrar mikonam!"
prompt += "\nAge khasti tamum she, benevis 'quit': "
message = ""
while message != 'quit':
message = input(prompt)
if message != 'quit':
print(message)
✨ چطور کار میکنه؟
- برنامه از کاربر میپرسه چی بنویسه.
- تا وقتی کاربر quit ننویسه، هر چی بگه رو تکرار میکنه.
- خروجی: مثلاً اگه بنویسی "سلام"، میگه "سلام". اگه بنویسی "quit"، تموم!
- این برای چتبات یا بازیهای تعاملی عالیه! 🎮
—-—-—-—-—-—-—-—-—-—-—
۳. استفاده از پرچم (flag) برای کنترل برنامه 🚩
برای برنامههای پیچیده که چند تا شرط میتونن تمومش کنن، از یه flag استفاده میکنیم. مثلاً:
prompt = "\nYe chizi bego, manam tekrar mikonam!"
prompt += "\nAge khasti tamum she, benevis 'quit': "
active = True
while active:
message = input(prompt)
if message == 'quit':
active = False
else:
print(message)
✨ چطور کار میکنه؟
- یه متغیر active تعریف میکنیم که True هست.
- تا وقتی active برابر True باشه، برنامه ادامه میده.
- اگه کاربر quit بنویسه، active میشه False و برنامه تموم.
- این روش برای بازیهایی که چند تا اتفاق میتونن بازیشو تموم کنن خیلی خوبه! 🎯
—-—-—-—-—-—-—-—-—-—-—
۴. با break یهو از حلقه بپر بیرون! 🚪
اگه بخوای فوری از حلقه خارج شی، از break استفاده کن. مثلاً برنامهای که از کاربر اسم شهرایی که رفته رو میپرسه:
prompt = "\nEsm ye shahr ke didi ro bego:"
prompt += "\n(Vaghti tamum kardi, benevis 'quit'): "
while True:
city = input(prompt)
if city == 'quit':
break
else:
print(f"Are! Manam doost daram be {city.title()} beram!") # Jomle khoshgel ba esm shahr
✨ چطور کار میکنه؟
- حلقه با while True تا همیشه میره، مگر اینکه break بزنه!
- اگه کاربر quit بنویسه، برنامه تموم میشه.
- وگرنه اسم شهر رو با یه جملهی باحال چاپ میکنه.
- خروجی: مثلاً tehran -> "Are! Manam doost daram be Tehran beram!"
—-—-—-—-—-—-—-—-—-—-—
۵. با continue برگرد اول حلقه! 🔄
با continue میتونی بگی کدوم کدها اجرا نشن و برگردی اول حلقه. مثلاً فقط اعداد فرد رو چاپ کن:
current_number = 0
while current_number < 10:
current_number += 1
if current_number % 2 == 0:
continue
print(current_number) # Faghat adad haye fard ro chap mikone
✨ چطور کار میکنه؟
از ۰ شروع میکنه.
هر بار یه واحد به عدد اضافه میکنه.
اگه عدد زوج باشه (بخشپذیر به ۲)، با continue برمیگرده اول حلقه.
فقط اعداد فرد چاپ میشن: 1 3 5 7 9
—-—-—-—-—-—-—-—-—-—-—
۶. مراقب حلقههای بینهایت باش! ⚠️
حلقههای while اگه درست تنظیم نشن، ممکنه تا ابد ادامه بدن! 😱 مثلاً:
x = 1
while x <= 5:
print(x)
# x += 1 # Age ino faramoosh koni, halghe ta abad edame dare!
✨ چطور کار میکنه؟
- اگه یادت بره x رو زیاد کنی، x همیشه ۱ میمونه و حلقه تا ابد 1 چاپ میکنه!
- برای جلوگیری، همیشه مطمئن شو که حلقه یه راه خروج داره (مثل break یا تغییر متغیر).
📌 نکته: اگه برنامهت تو حلقه گیر کرد، Ctrl+C بزن تا بندازی! 😉
—-—-—-—-—-—-—-—-—-—-—
۷. حلقههاتو تست کن! 🧪
همیشه حلقههاتو چک کن که درست تموم شن:
- اگه برنامه باید با وارد کردن یه مقدار خاص (مثل quit) تموم شه، تستش کن.
- مطمئن شو که شرط حلقه میتونه False بشه یا break درست کار کنه.
- این کار باعث میشه برنامهت مثل ساعت کار کنه! ⏰
💯 @PythonForYou 🧑💻👩💻