Asosiy mazmunga o'tish

13-dars: Funksiya

4-blokO'z buyruqlaringizni yasash13–16 darslar

Bu darsdan keyin siz

  • def bilan funksiya yozib, uni bir necha marta chaqirasiz
  • parametr va argument farqini aytasiz
  • return va print ni chalkashtirmaysiz — bu darsning asosiy ko’nikmasi

Funksiya — nomlangan kod bo’lagi. Uni bir marta yozasiz, keyin nomi bilan chaqirasiz. Ustama 15 foizga o’zgarsa, bitta joyda tuzatasiz.

funksiyafunction

Nomlangan va qayta ishlatiladigan kod bo’lagi. def kalit so’zi bilan e’lon qilinadi va nomi bilan chaqiriladi.

ustama.py
def ustama_narx(narx):  return narx * 1.12# Endi bitta qatorda hisoblanadi:print(ustama_narx(10000))     # 11200.0print(ustama_narx(2500))      # 2800.0

def ustama_narx(narx) yozganingizda narxparametr: funksiya ichida ishlatiladigan nom. ustama_narx(10000) deb chaqirganda 10000 — argument: o’sha nomga bog’lanadigan haqiqiy qiymat.

parametrparameter

Funksiya e’lonidagi nom. Chaqiruv paytida unga qiymat bog’lanadi.

argumentargument

Chaqiruvda beriladigan haqiqiy qiymat. Parametr — quti, argument — ichiga solingan narsa.

Parametrlar bir nechta bo’lishi mumkin va ularga standart qiymat berilishi ham mumkin. Standart qiymatli parametr chaqiruvda tashlab ketilsa, o’sha qiymat ishlatiladi.

standart.py
def ustama_narx(narx, foiz=12):  return narx * (1 + foiz / 100)print(ustama_narx(10000))         # 11200.0 — standart 12 foizprint(ustama_narx(10000, 15))     # 11500.0 — 15 foiz

return funksiyani to’xtatadi va qiymatni chaqirgan joyga qaytaradi. Qaytgan qiymatni o’zgaruvchiga yozish, hisobga qo’shish, boshqa funksiyaga berish mumkin.

qaytarishreturn

Funksiyaning natijasini chaqirgan joyga uzatish. return bajarilgach funksiya tugaydi — undan keyingi qatorlar ishlamaydi.

Bu darsning eng muhim joyi. print ekranga yozadi va hech narsa qaytarmaydi. return esa qiymat qaytaradi va ekranga hech narsa chiqarmaydi.

Xato darhol ko’rinmasligi bilan xavfli: ekranda son chiqadi, programma ishlayotgandek tuyuladi, keyin bir necha qator pastda tushunarsiz xato paydo bo’ladi.

Avval o'ylang: bu kod nima chiqaradi? Ishga tushirishdan oldin yozing.

Bashorat qiling
def kvadrat(son):  print(son * son)natija = kvadrat(5)print(natija)
Javobni ko'rish
25
None

Birinchi qator funksiya ichidagi print dan chiqdi. Ikkinchisi — natija ning qiymati: funksiyada return yo'q, shuning uchun u None qaytardi.

Avval o'ylang: bu kod nima chiqaradi? Ishga tushirishdan oldin yozing.

Bashorat qiling
def salomlash(ism):  return "Salom, " + ism  print("Bu qator ishlaydimi?")print(salomlash("Aziza"))
Javobni ko'rish
Salom, Aziza

return bajarilgach funksiya darhol tugaydi. Undan keyingi print ga navbat kelmaydi — bunday kod «o'lik kod» deb ataladi.

Ikki variantni ketma-ket qadamlab chiqing. Uchinchi qadamga alohida diqqat qiling: aynan o’sha joyda natija ga None yoziladi va bu odatda sezilmaydi.

return va print

Variantni tanlab qadamlab boring. Klaviatura: → keyingi qadam.

Bu simulyatorda bitta funksiya ikki xil yozilgan: «return» bilan va «print» bilan. Har qadamda o'zgaruvchilar holati va terminal ekrani yonma-yon ko'rsatiladi.

JavaScript'siz eng muhim qadam: «print» bilan yozilgan funksiya ekranga 25 chiqaradi, lekin hech narsa qaytarmaydi. Demak «natija = kvadrat(5)» qatoridan keyin «natija» ning qiymati «None» bo'ladi va «None * 2» TypeError beradi.

    O'zgaruvchilar

    Terminal

    Bu kod ataylab buzuq — xatoni toping

    Buzuq kod
    def ortacha(a, b):  print((a + b) / 2)natija = ortacha(4, 6)print("O'rtacha:", natija * 2)

    Python shunday javob beradi:

    5.0
    Traceback (most recent call last):
    File "ortacha.py", line 4, in <module>
      print("O'rtacha:", natija * 2)
    TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
    Sababi va tuzatish

    Funksiya natijani ekranga yozdi, lekin qaytarmadi. natija ning qiymati None bo'lib qoldi.

    Tuzatish bitta so’zda: print o’rniga return. Ekranda 5.0 chiqqani chalg’itadi — u funksiya ichidagi print dan kelgan, natija esa allaqachon yo’qolgan edi.

    tuzatilgan.py
    def ortacha(a, b):  return (a + b) / 2natija = ortacha(4, 6)print("O'rtacha:", natija * 2)     # O'rtacha: 10.0

    1Parametr va argument farqi nimada?

    Javobni ko'rish

    Parametr — funksiya e’lonidagi nom (def ustama(narx) dagi narx). Argument — chaqiruvda berilgan haqiqiy qiymat (ustama(10000) dagi 10000).

    2return yozilmagan funksiya nima qaytaradi?

    Javobni ko'rish

    None. Bu «hech narsa» degani va u bilan arifmetika qilib bo’lmaydi — TypeError chiqadi.

    3print va return ni qanday ajratib eslab qolasiz?

    Javobni ko'rish

    print odam uchun — ekranga yozadi. return programma uchun — qiymatni qaytaradi. Bittasi ko’rinadi, ikkinchisi ishlatiladi.

    4return dan keyingi qatorlar ishlaydimi?

    Javobni ko'rish

    Yo’q. return funksiyani darhol tugatadi. Undan keyin yozilgan kod hech qachon bajarilmaydi — bunday kodni «o’lik kod» deyiladi.

    5Bir xil hisob 10 joyda takrorlanayotgan bo'lsa, nima qilasiz?

    Javobni ko'rish

    Funksiyaga chiqaraman. Keyin o’zgarish kerak bo’lsa, 10 joy emas, bitta joy tuzatiladi.

    Topshiriq — darajangizni tanlang

    Asos · 5–7-sinf — Vizual va aniq ko'rsatmali

    salomlash(ism) funksiyasini yozing: u "Salom, Aziza!" ko’rinishidagi satrni qaytaradi. Uni uch xil ism bilan chaqirib, natijalarni chop eting. Keyin print variantini ham yozib ko’ring va farqni daftaringizga bir gapda yozing.

    Mustahkam · 8–9-sinf — Matnli masala, o'zingiz tuzasiz

    chegirma(narx, foiz) funksiyasini yozing: chegirmadan keyingi narxni qaytarsin, foiz ning standart qiymati 10 bo’lsin. Keyin ikkinchi funksiya yozing — jami(narxlar) — u ro’yxatdagi barcha narxlarga chegirma qo’llab umumiy summani qaytarsin. Ikkinchi funksiya birinchisini chaqirsin.

    Chuqur · 10–11-sinf — Algoritmik, chegara holatlari bilan

    baho_harfi(ball) funksiyasini yozing: 90+ → "A", 70+ → "B", 50+ → "C", aks holda "D". Chegara holatlarini alohida tekshirib chiqing: 90, 89, 70, 50, 0 va manfiy son. Manfiy ball kelganda funksiya nima qilishi kerak — "D" qaytarsinmi yoki boshqa narsa? Qaroringizni izohda asoslang.

    Darsni belgilash uchun JavaScript kerak. Bu progressni saqlash uchun ishlatiladi — darslikning o'zi JavaScript'siz ham to'liq o'qiladi.