Python Learningاز صفر تا نوشتن پروژه از حفظ
درس ۶ · پایه‌ها

حلقه‌ها: for، enumerate، sum و all

حدود ۴۵ دقیقه۴ تمرین۶ سؤال آزمون
بعد از این درس می‌توانی:
  • با for روی لیست، range و دیکشنری حلقه بزنی
  • با enumerate شماره‌ی هر عضو را هم داشته باشی
  • جمع و شرط روی همه‌ی اعضا را با sum(...) و all(...) در یک خط بنویسی
  • حلقه‌ای بنویسی که فقط بعضی اعضا را انتخاب کند (فیلتر)

for: برای هر عضو

اجرا کن

خودت امتحان کن

Ctrl + Enter

خط‌های تورفته برای هر عضو یک بار اجرا می‌شوند. خط بدون تورفتگی بعد از حلقه، فقط یک بار در آخر.

range: شمردن

اجرا کن

خودت امتحان کن

Ctrl + Enter

enumerate: عضو به‌همراه شماره‌اش

اجرا کن

خودت امتحان کن

Ctrl + Enter

اگر هر عضو خودش تاپل باشد، می‌توانی همان‌جا بازش کنی:

اجرا کن

خودت امتحان کن

Ctrl + Enter
در پروژه‌ی فروشگاه

فرم برنامه در خط ۷۱ پروژه با همین الگو ساخته می‌شود: for row, (key, label) in enumerate([...]) و دکمه‌ها در خط ۱۳۳ پروژه.

حلقه روی دیکشنری و فیلتر کردن

اجرا کن

خودت امتحان کن

Ctrl + Enter
در پروژه‌ی فروشگاه

تابع refresh در خط ۱۱۶ پروژه و خط ۱۱۷ پروژه همین کار را برای جست‌وجو می‌کند.

تمرین

جمع موجودی

با یک حلقه روی products.items() موجودی همه‌ی کالاها را جمع کن و در total_qty بگذار.

Ctrl + Enter
دیدن راه‌حل (اول خودت تلاش کن)
products = {
    'pen': {'buy': 10, 'sell': 15, 'qty': 3},
    'pencil': {'buy': 4, 'sell': 7, 'qty': 20},
}
total_qty = 0
for name, p in products.items():
    total_qty += p['qty']
تمرین

فیلتر جست‌وجو

لیست found را بساز که نام کالاهایی را داشته باشد که query داخل نامشان (با حروف کوچک) هست.

Ctrl + Enter
دیدن راه‌حل (اول خودت تلاش کن)
names = ['Blue Pen', 'Pencil', 'Red Pen', 'Cup']
query = 'pen'
found = []
for name in names:
    if query in name.lower():
        found.append(name)

sum و all در یک خط

به‌جای ساختن حلقه‌ی کامل برای جمع، می‌شود یک «عبارت مولد» داخل sum نوشت: «برای هر s در sales، مقدار s['qty'] را بده»:

اجرا کن

خودت امتحان کن

Ctrl + Enter

all(...) وقتی True است که شرط برای همه درست باشد:

اجرا کن

خودت امتحان کن

Ctrl + Enter
در پروژه‌ی فروشگاه

گزارش فروش در خط ۶۳ پروژه با دو sum در یک خط حساب می‌شود، و خط ۳۱ پروژه با all چک می‌کند هر سه عدد معتبر باشند.

تمرین

گزارش فروش در یک خط

count جمع qty همه‌ی فروش‌ها و income جمع total همه‌ی فروش‌ها باشد. از sum(... for s in sales) استفاده کن.

Ctrl + Enter
دیدن راه‌حل (اول خودت تلاش کن)
sales = [
    {'name': 'pen', 'qty': 2, 'total': 30},
    {'name': 'pencil', 'qty': 5, 'total': 35},
]
count = sum(s['qty'] for s in sales)
income = sum(s['total'] for s in sales)
مرتب کن

خط‌ها را مرتب کن

این حلقه نام کالاهایی را چاپ می‌کند که جست‌وجو در نامشان هست. مرتب کن (تورفتگی‌ها را ببین).

  1. print(name, p['qty'])
  2. query = 'pen'
  3. for name, p in products.items():
  4. if query in name.lower():

آزمون این درس

برای گذراندن این درس حداقل ۸۰٪ جواب درست لازم است. هر چند بار خواستی می‌توانی دوباره امتحان بدهی.

۱. range(3) چه عددهایی می‌دهد؟
۲. enumerate(['a', 'b']) چه جفت‌هایی می‌دهد؟
۳. sum(x for x in [1, 2, 3]) چیست؟
۴. all(x > 0 for x in [2, 5, 0]) چیست؟
۵. روی دیکشنری، for k, v in d.items() چه می‌دهد؟
۶. خطی که بعد از حلقه بدون تورفتگی آمده چند بار اجرا می‌شود؟