Bu bo'lim to'liq amaliyot: uchta ishlaydigan dastur qurildi — "Son topish", "So'z topish" va Kirill-Lotin transliterator. Konspektda har loyihaning qurilish mantig'i, kalit kod qismlari va umumiy saboqlar.
1-loyiha: "Son topish" o'yini
Kompyuter 1–100 oralig'ida son "o'ylaydi"; foydalanuvchi taxmin qiladi; dastur "kattaroq/kichikroq" deb yo'naltiradi. Yadro:
import random
yashirin = random.randint(1, 100)
urinish = 0
while True:
taxmin = int(input("Sonni toping: "))
urinish += 1
if taxmin < yashirin:
print("Kattaroq son ayting")
elif taxmin > yashirin:
print("Kichikroq son ayting")
else:
print(f"Topdingiz! Urinishlar: {urinish}")
break
Bu yerda oldingi bo'limlarning deyarli hammasi ishladi: random.randint — tasodifiy son, while True + break — o'yin tsikli, if/elif/else — yo'naltirish, hisoblagich — urinishlar.
2-qismda qo'shilgani — kiritishni tekshirish. Foydalanuvchi son o'rniga "salom" yozsa, int() dasturni ValueError bilan yiqitadi. Himoya — kiritishni oldindan tekshirish:
kiritildi = input("Sonni toping: ")
if not kiritildi.isdigit():
print("Iltimos, son kiriting")
continue
taxmin = int(kiritildi)
.isdigit() — matn faqat raqamlardan iboratligini tekshiradi. (Keyinroq, Fayllar va xatolar bo'limida, xuddi shu himoya try-except bilan ham quriladi.)
3-qismda — urinishlar limiti va kodni funksiyalarga ajratish: o'yin mantig'i oyna() funksiyasiga o'tdi, qayta o'ynash so'rovi tashqi tsiklga.
2-loyiha: "So'z topish" o'yini
Kompyuter so'z tanlaydi, foydalanuvchi harfma-harf ochadi. Yangi ishlatilgan usullar:
import random
sozlar = ["python", "dastur", "klaviatura"]
soz = random.choice(sozlar) # ro'yxatdan tasodifiy tanlash
topilgan = []
# so'zning joriy holatini ko'rsatish: p _ t _ o n
for harf in soz:
if harf in topilgan:
print(harf, end=" ")
else:
print("_", end=" ")
Kalit g'oyalar:
random.choice(royxat)— ro'yxatdan tasodifiy element;- topilgan harflar alohida ro'yxatda yuritiladi; ekran holati har aylanishda shu ro'yxatga qarab quriladi;
- harf so'zda bormi —
harf in soz; oldin aytilganmi —harf in topilgan; - yutuq sharti: so'zning hamma harfi
topilganda; mag'lubiyat: urinishlar tugadi.
O'yinning butun holati ikkita o'zgaruvchida (soz, topilgan) turibdi — holatni minimal saqlash keyinchalik katta dasturlarda ham asosiy tamoyil.
3-loyiha: Kirill-Lotin transliterator
Real ishlatsa bo'ladigan dastur: matnni bir yozuvdan ikkinchisiga o'giradi. Asosi — almashtirish jadvali (lug'at):
jadval = {"sh": "ш", "ch": "ч", "o'": "ў", "g'": "ғ", "a": "а", "s": "с", "h": "ҳ"}
matn = "shahar"
natija = matn
for lotin, kirill in jadval.items():
natija = natija.replace(lotin, kirill)
print(natija)
Natija:
шаҳар
Eng muhim saboq — tartib. Agar s va h avval, sh keyin almashtirilsa, "shahar"dagi sh avval с+ҳ bo'lib bo'linadi va natija buziladi. To'g'ri tartib: avval ikki belgili birikmalar (sh, ch, o', g'), keyin bittaliklar. Ma'lumot ustida ketma-ket amallar bajarilganda tartib masalasi doim diqqat talab qiladi — bu loyiha uni yaqqol ko'rsatdi.
2-qismda dastur ikki yo'nalishli qilindi (lotin↔kirill), maxsus holatlar (bosh harflar, e/э) qayta ishlandi va mantiq funksiyalarga ajratildi.
Uch loyihaning umumiy saboqlari
- Dekompozitsiya. Har loyiha "minimal ishlaydigan versiya → qo'shimchalar" yo'lida qurildi. Katta masalani bir urinishda yozishga harakat — boshlovchining eng katta tuzog'i.
- input() har doim matn qaytaradi. Son kerak bo'lsa
int(); foydalanuvchi xato kiritishi mumkinligi normadir — dastur bunga tayyor bo'lishi kerak. - Holatni oz saqlang. O'yinning butun holati 2-3 o'zgaruvchiga sig'sa, kodni tushunish ham, tuzatish ham oson.
- Oxirgi qadam — funksiyalarga ajratish. Uchala loyihada ham ishlagan kod so'ngida funksiyalarga bo'lindi. "Avval ishlasin, keyin chiroyli bo'lsin" — to'g'ri tartib, lekin ikkinchi qadamni tashlab ketmang.
Eslab qoling
random.randint(a, b)— oraliqda son;random.choice(royxat)— ro'yxatdan element..isdigit()— kiritilgan matn raqamligini tekshirish yo'li.while True+break— o'yin/muloqot tsiklining standart shakli.- Almashtirishlar ketma-ketligida tartib natijani o'zgartiradi: maxsus (uzun) holatlar oldin.
- Ishlagan kodni funksiyalarga ajratish — loyihaning yakuniy, majburiy qadami.
Amaliyot
- "Son topish"ga 7 urinishlik limit qo'shing; limit tugasa yashirin son e'lon qilinib o'yin tugasin.
- O'yin oxirida "Yana o'ynaysizmi? (ha/yo'q)" so'rang; "ha" — yangi son bilan qayta boshlash.
- "So'z topish"da so'zlar ro'yxatini 10 taga yetkazing va har aylanishda qolgan urinishlar sonini ko'rsating.
- Transliterator jadvalini to'ldiring (kamida 15 juftlik) va "dastur", "cho'l", "g'isht" so'zlarida sinang — tartib to'g'riligini tekshiring.
- Istalgan loyihani modulga chiqaring: mantiq
oyin.pyda, asosiy fayl faqat import qilib ishga tushirsin. - (Qo'shimcha) Uchala dasturni bitta menyuga birlashtiring: foydalanuvchi 1/2/3 tanlasa, mos o'yin ishga tushsin.
Bo'lim testi loyihalardagi asosiy yechimlarni so'raydi.