Topshiriqlar 3 (Funksiyalar)

Quyidagi mashqlar source/python3/functions.ipynb mavzulari asosida tuzilgan.

1. Funksiya va return

  1. hello() nomli funksiya yozing. U chaqirilganda 2 ta satr chiqarib bersin (masalan, salomlashish va dars nomi).

  2. find_square(n) funksiyasini yozing: n ning kvadratini return qilsin. 3 ta turli qiymatda sinab ko‘ring.

  3. sum_to_n(n) funksiyasi: 1 dan n gacha bo‘lgan sonlar yig‘indisini qaytarsin.

  4. find_area_per(a, b) funksiyasi: to‘g‘ri to‘rtburchak yuza va perimetrini bittadan ortiq qiymat sifatida qaytarsin (tuple). Natijani yuza, perimetr = ... ko‘rinishida ajrating.

  5. is_prime(n) funksiyasi: n tub son bo‘lsa True, aks holda False qaytarsin. 1, 2, 3, 4, 9, 79 kabi sonlarda tekshiring.

2. Argumentlar: tartib, kalit so‘zlar, default

  1. full_name(fname, lname) funksiyasi yozing va uni 2 xil usulda chaqiring:

    1. oddiy tartib bilan;

    2. keyword argument bilan (lname=...).

  2. power(base, exp=2) funksiyasi yozing: base**exp qaytarsin.

    • exp berilmasa kvadratini qaytarsin.

  3. greet(country="Uzbekistan") funksiyasi yozing: mamlakatga qarab matn chiqarsin.

    • 3 marta turli qiymat bilan chaqiring, 1 marta argument bermasdan chaqiring.

  4. (Xatoni tushunish) nameAge(name, age) funksiyasi berilgan bo‘lsin.

    1. nameAge("Ali", 20) va nameAge(20, "Ali") ni chaqirib ko‘ring.

    2. Ikkinchi holatda nima uchun mantiqiy xato bo‘lishini 2–3 gap bilan izohlang.

3. *args

  1. my_sum(*values) funksiyasi yozing: ixtiyoriy sondagi sonlarni yig‘ib qaytarsin.

    • 1 ta, 2 ta, 5 ta argument bilan sinab ko‘ring.

  2. max_of(*values) funksiyasi yozing: eng katta qiymatni qaytarsin (tayyor max() ishlatmasdan).

  3. print_args(*args) funksiyasi yozing: kelgan argumentlarni tartib bilan chop qilsin va type(args) ni ham chiqarsin.

4. **kwargs

  1. print_profile(**kwargs) funksiyasi yozing: har bir kalit: qiymat ni alohida satrda chiqarsin.

  2. build_user(**kwargs) funksiyasi yozing: kelgan kwargs ni aynan dict sifatida qaytarsin.

  3. (Aralash) register(name, *skills, **info) funksiyasi yozing.

    • name majburiy.

    • skills (masalan, "python", "math") ro‘yxat qilib chiqsin.

    • info (masalan, age=20, city='Toshkent') lug‘at qilib chiqsin.

5. Hujjat qatori (docstring)

  1. evenOdd(x) funksiyasini yozing va unga docstring qo‘shing:

    • docstring ichida x nimani anglatishi va qaytadigan natija/chiqaradigan matn yozilsin.

  2. evenOdd.__doc__ ni chop eting.

  3. (Xato topish) Funksiyani argument bermasdan chaqirsangiz (evenOdd()), nima bo‘ladi? Nega? To‘g‘ri chaqirish misolini yozing.

6. Parametr cheklovlari: / va * (positional-only / keyword-only)

  1. Positional-only parametrlar:

    • def f(a, b, /, c=5): ... ko‘rinishida funksiya yozing.

    • f(1, 2, c=10) ishlasin.

    • f(a=1, b=2, c=10) chaqiruv nega ishlamasligini izohlang.

  2. Keyword-only parametrlar:

    • def g(a, b, *, c=5): ... ko‘rinishida funksiya yozing.

    • g(1, 2, c=10) ishlasin.

    • g(1, 2, 10) nega xato berishini izohlang.

7. Kichik amaliy masalalar

  1. normalize_text(text, lower=True) funksiyasi:

    • lower=True bo‘lsa matnni kichik harflarga o‘tkazsin.

    • bo‘sh joylarni ikki tomondan .strip() qilsin.

  2. count_vowels(text) funksiyasi: text ichidagi unli harflar sonini qaytarsin (o‘zbek lotin unli harflari bilan).

  3. safe_div(a, b, default=None) funksiyasi:

    • agar b==0 bo‘lsa default ni qaytarsin;

    • aks holda a/b ni qaytarsin.

  4. stats(nums) funksiyasi: ro‘yxat uchun (min, max, mean) qaytarsin (mean ni o‘zingiz hisoblang).

8. Ixtiyoriy (qiyinroq)

  1. apply(func, values) funksiyasi yozing: values ro‘yxatidagi har bir elementga func ni qo‘llab yangi ro‘yxat qaytarsin.

    • apply(find_square, [1,2,3]) kabi sinab ko‘ring.

  2. make_multiplier(k) funksiyasi yozing: u ichida mult(x) degan ichki funksiya qaytarsin va mult(x)=k*x bo‘lsin.

    • times2 = make_multiplier(2) va times2(7) ni tekshiring.