Asosiy mazmunga o'tish

20-dars: Yakuniy loyiha va AI ni to'g'ri ishlatish

5-blokHaqiqiy programma17–20 darslar

Bu darsdan keyin siz

  • AI kodidagi uch tipik xatoni taniysiz
  • kodni ko’z bilan emas, chegara holati bilan tekshirasiz
  • yakuniy loyihani mustaqil qurib topshirasiz

AI ko’p kodni to’g’ri yozadi va aynan shu narsa xavfli: tekshirish odati shakllanmaydi. Xato esa kamdan-kam ochiq bo’ladi — u odatda chegarada yashiringan bo’ladi va oddiy sinovda ko’rinmaydi.

Kodni o’zingizning nomingizdan topshirsangiz, uning har qatori sizniki. Bu 19-darsdagi testlash ko’nikmasi shu yerda ishga tushadi.

Chegara holati tekshirilmagan. Eng ko’p uchraydigan tur: bo’sh ro’yxat, nol, manfiy son. sum(sonlar) / len(sonlar) — bo’sh ro’yxatda yiqiladi.

is va == chalkashligi. is ikki nom bitta obyektni ko’rsatayotganini tekshiradi, == esa qiymatlarni solishtiradi. Qisqa satrlarda is ba’zan tasodifan ishlaydi — shuning uchun xato sinovdan o’tib ketadi.

O’zgaruvchan standart argument. def qosh(element, royxat=[]) — standart ro’yxat funksiya e’lon qilinganda bir marta yaratiladi va barcha chaqiruvlar uchun umumiy bo’ladi. Bu 9-darsdagi aliasingning eng ayyor ko’rinishi.

Kod so’rashda uch narsani qo’shing: kontekst (bu kod nima uchun), chegaralar (qanday kirishlar bo’lishi mumkin) va talab (test bilan bering). Va oxirida bitta so’rov: “chegara holatlarini ayt”.

sorov.py
# So'rov namunasi (kodda emas, AI ga yoziladigan matn):# "Ro'yxatdagi sonlarning o'rtachasini qaytaradigan funksiya yoz.#  Ro'yxat bo'sh bo'lishi mumkin. Manfiy sonlar bo'lishi mumkin.#  Uch assert test ham yoz va qaysi chegara holatlarini#  tekshirmaganingni ayt."print("So'rovni shunday tuzsangiz, javob ham boshqacha bo'ladi")
chegara holatiedge case

Kirishning eng chekka qiymati: bo’sh ro’yxat, nol, manfiy son, bitta element, juda katta son. Xatolar deyarli har doim shu yerda yashiringan bo’ladi.

AI ishlatgan bo’lsangiz, buni yozib qo’yish kerak: qaysi qismda ishlatildi, nima tekshirildi. Maktabingizda AI qoidasi bo’lmasa, o’qituvchidan so’rang.

Bu mavzuning to’liq ko’rinishi — AI Fundamentals modulida. U yerda AI ning ishlash mexanizmi va uni tekshirish protokoli batafsil beriladi.

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

Bashorat qiling
javob = "ha"print(javob == "ha")print(javob is "ha")
Javobni ko'rish
True
True

Ikkalasi ham True — va bu aynan muammo. Qisqa satrlarni Python xotirada bir joyda saqlaydi, shuning uchun is tasodifan ishlaydi. Uzun yoki hisoblab olingan satrda esa u False beradi va xato o'sha yerda chiqadi.

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

Bashorat qiling
def yigish(son, jami=[]):  jami.append(son)  return sum(jami)print(yigish(5))print(yigish(5))print(yigish(5))
Javobni ko'rish
5
10
15

Standart ro'yxat barcha chaqiruvlar uchun bitta. Har chaqiruv unga yana bitta 5 qo'shdi — shuning uchun natija o'sib bordi.

Beshta kodni baholang: qaysi biri to’g’ri, qaysi birida xato bor. Uchtasi buzuq va uchalasi ham oddiy sinovda ishlaydi — ko’z bilan topilmaydi.

AI kodini tekshirish

Har kodga baho bering: to'g'rimi yoki buzuq? Keyin haqiqat ochiladi.

Bu simulyatorda beshta «AI yozgan» kod bo'lagi bor. 3 tasi buzuq, qolgani to'g'ri. Siz har biriga baho berasiz.

JavaScript'siz uch xato turini eslab qoling: bo'sh ro'yxat tekshirilmagan (chegara holati), is o'rniga == kerak bo'lgan joy, va standart qiymati [] bo'lgan parametr. Uchtasi ham oddiy sinovda ishlaydi.

Baholandi: 0/5 · to'g'ri aniqlangan:0

  1. AI dan so'radim: «ro'yxatdagi sonlarning o'rtachasini qaytaradigan funksiya yoz»

    def ortacha(sonlar):
        return sum(sonlar) / len(sonlar)

  2. AI dan so'radim: «foydalanuvchi javobini tekshiradigan kod yoz»

    javob = input("Davom etamizmi? ")
    if javob is "ha":
        print("Davom etamiz")

  3. AI dan so'radim: «kvadratni hisoblaydigan funksiya yoz»

    def kvadrat(son):
        return son * son

  4. AI dan so'radim: «ro'yxatga element qo'shadigan funksiya yoz»

    def qosh(element, royxat=[]):
        royxat.append(element)
        return royxat

  5. AI dan so'radim: «matn faylini o'qiydigan kod yoz»

    with open("matn.txt", encoding="utf-8") as f:
        matn = f.read()
    print(len(matn))

Har kodni ko'z bilan emas, chegara holati bilan tekshiring: bo'sh ro'yxat, nol, manfiy son, ikkinchi chaqiruv.

Bu kod ataylab buzuq — xatoni toping

Buzuq kod
def eng_arzon(narxlar):  eng = narxlar[0]  for narx in narxlar:      if narx < eng:          eng = narx  return engprint(eng_arzon([]))

Python shunday javob beradi:

Traceback (most recent call last):
File "narx.py", line 7, in <module>
  print(eng_arzon([]))
File "narx.py", line 2, in eng_arzon
  eng = narxlar[0]
IndexError: list index out of range
Sababi va tuzatish

Kodning o'zi to'g'ri yozilgan — narxlar[0] dan boshlash [19-darsdagi](/python-basic/lesson-19/) to'g'ri usul. Lekin bo'sh ro'yxat holati uchun qaror qabul qilinmagan.

Bu xato “kod buzuq” degani emas: kod tugallanmagan. Bo’sh ro’yxat kelganda nima qaytarish kerak — buni siz hal qilasiz va testda yozib qo’yasiz.

tuzatilgan.py
def eng_arzon(narxlar):  if not narxlar:      return None            # qaror: bo'sh ro'yxatda narx yo'q  eng = narxlar[0]  for narx in narxlar:      if narx < eng:          eng = narx  return engassert eng_arzon([5, 2, 9]) == 2assert eng_arzon([]) is Noneassert eng_arzon([-3, -7]) == -7print("Barcha testlar o'tdi")

Diqqat: is None — bu is ning to’g’ri ishlatilishi. None butun programmada yagona obyekt, shuning uchun uni aynan is bilan solishtiriladi. Satrlar va sonlar uchun esa == ishlatiladi.

1Nega 19 dars davomida AI'dan kod so'ralmadi?

Javobni ko'rish

Yechimni ko’rgan miya o’z modelini qurmaydi. Model qurmagan odam esa AI’siz hech narsa yoza olmaydi — va AI kodini tekshira ham olmaydi.

2AI kodidagi uch tipik xato qaysi?

Javobni ko'rish

Chegara holati tekshirilmagan, is va == chalkashligi, o’zgaruvchan standart argument (royxat=[]).

3javob is «ha» — nega bunday taqqoslash xavfli?

Javobni ko'rish

Qisqa satrlarda u tasodifan ishlaydi va sinovdan o’tib ketadi. Uzun yoki hisoblab olingan satrda esa False beradi.

4is qachon to'g'ri ishlatiladi?

Javobni ko'rish

None bilan solishtirishda: if royxat is None. None yagona obyekt. Satr va sonlar uchun == ishlatiladi.

5AI kodini qabul qilishdan oldin nima qilasiz?

Javobni ko'rish

Chegara holatlarini o’zim sinab ko’raman: bo’sh ro’yxat, nol, manfiy son, ikkinchi chaqiruv. Imkon bo’lsa test yozaman.

Topshiriq — darajangizni tanlang

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

turtle bilan o’z naqshingizni chizadigan programma yozing. Foydalanuvchidan rang va tomonlar sonini so’rasin (input() va int()), keyin naqsh chizsin. Kamida bitta funksiya va bitta sikl bo’lsin. Fayl nomi lotin harflarida, bo’shliqsiz.

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

CSV faylidan sinf baholarini o’qib hisobot chiqaradigan programma yozing: o’rtacha baho, eng yuqori va eng past baho, 5 olganlar soni. Talablar: kamida uch funksiya, with open va encoding="utf-8", bo’sh qator va sarlavhadan himoya. Natija yangi faylga yozilsin.

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

Yuqoridagi hammasi, ustiga: har funksiyaga kamida uch assert test (to’rt chegara holati majburiy), try/except bilan fayl yo’qligidan himoya, funksiyalarni alohida modulga chiqarish va README.md — programma nima qiladi, qanday ishga tushiriladi, qanday kirishlarni qabul qiladi.

Oxirgi talab alohida: agar biror qismda AI ishlatgan bo’lsangiz, README.md da uch qator yozing — qaysi qismda ishlatildi, nima tekshirildi, qaysi xatoni topdingiz.

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