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
Nazariya
“Nazariya” bo'limiga havolaNega tekshirish kerak
“Nega tekshirish kerak” bo'limiga havolaAI 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.
Uch tipik xato
“Uch tipik xato” bo'limiga havolaChegara 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.
Qanday so’rash kerak
“Qanday so’rash kerak” bo'limiga havolaKod 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”.
# 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.
Oshkoralik
“Oshkoralik” bo'limiga havolaAI 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.
Bashorat qiling
“Bashorat qiling” bo'limiga havolaAvval o'ylang: bu kod nima chiqaradi? Ishga tushirishdan oldin yozing.
javob = "ha"print(javob == "ha")print(javob is "ha")Haqiqiy natija:
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.
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.
def yigish(son, jami=[]): jami.append(son) return sum(jami)print(yigish(5))print(yigish(5))print(yigish(5))Haqiqiy natija:
5 10 15
Standart ro'yxat barcha chaqiruvlar uchun bitta. Har chaqiruv unga yana bitta 5 qo'shdi — shuning uchun natija o'sib bordi.
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.
Sinab ko’r
“Sinab ko’r” bo'limiga havolaBeshta 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
AI dan so'radim: «ro'yxatdagi sonlarning o'rtachasini qaytaradigan funksiya yoz»
def ortacha(sonlar): return sum(sonlar) / len(sonlar)Xato turi: chegara holati
Bo'sh ro'yxat tekshirilmagan: ortacha([]) chaqirilsa len(sonlar) nol bo'ladi va ZeroDivisionError chiqadi. Kod to'g'ri ko'rinadi, chunki oddiy sinovda ([1,2,3]) mukammal ishlaydi.
if not sonlar: return 0 (yoki None qaytarish — bu qarorni siz qabul qilasiz)
AI dan so'radim: «foydalanuvchi javobini tekshiradigan kod yoz»
javob = input("Davom etamizmi? ") if javob is "ha": print("Davom etamiz")Xato turi: is va == chalkashligi
isikki nom BITTA obyektni ko'rsatayotganini tekshiradi,==esa qiymatlarni solishtiradi. Qisqa satrlar uchunisba'zan tasodifan ishlaydi — va aynan shu xavfli: kod sinovda o'tadi, keyin boshqa joyda ishlamaydi.if javob == "ha":
AI dan so'radim: «kvadratni hisoblaydigan funksiya yoz»
def kvadrat(son): return son * sonKod to'g'ri. Har javobda ayb izlash ham xato: tekshirish «hammasi joyida» degan xulosaga ham kelishi kerak, aks holda tekshiruv ishonchini yo'qotadi.
AI dan so'radim: «ro'yxatga element qo'shadigan funksiya yoz»
def qosh(element, royxat=[]): royxat.append(element) return royxatXato turi: o'zgaruvchan standart argument
Standart qiymat funksiya BIR MARTA e'lon qilinganda yaratiladi, har chaqiruvda emas. Shu sababli bitta ro'yxat barcha chaqiruvlar uchun umumiy bo'ladi: qosh(1) → [1], keyin qosh(2) → [1, 2]. Bu 9-darsdagi aliasingning eng ayyor ko'rinishi.
def qosh(element, royxat=None): keyin if royxat is None: royxat = []
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))Kod to'g'ri:
withfayl yopilishini kafolatlaydi vaencoding="utf-8"o'zbekcha matn uchun majburiy. Fayl mavjud bo'lmasa FileNotFoundError chiqadi — lekin bu xato emas, bu to'g'ri xatti-harakat.
Har kodni ko'z bilan emas, chegara holati bilan tekshiring: bo'sh ro'yxat, nol, manfiy son, ikkinchi chaqiruv.
Xatoni toping
“Xatoni toping” bo'limiga havolaBu kod ataylab buzuq — xatoni toping
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.
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.
O’zingizni sinang
“O’zingizni sinang” bo'limiga havola1Nega 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.
Yakuniy loyiha
“Yakuniy loyiha” bo'limiga havolaTopshiriq — 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.