1-sahifa 2-sahifa
Download 363.98 Kb.
|
Python
- Bu sahifa navigatsiya:
- 127-bet 14,8. Kopchilik 127
- 129-bet 10/14. Mashqlar 129
- 130-bet 15 takrorlash
- 131-bet 15.1. Indeks bilan qidirish 131 15.1. Indeks bilan qidirish
- 1-qadam: Birinchidan, c ga ozgaruvchan nuqta
- 2-qadam: Keyin ozgaruvchi a-ga ishora qiladi
- 133-bet 15.1. Indeks bilan qidirish 133
- 3 qadam: Va nihoyat, harf t, royxat yoq qilinadi
- 4 bosqich: c va a belgilari yoq qilinadi belgi t qoladi
- 15.3. Elementlarni kochadan otkazish
- 135-bet 15.5. Hisoblash paytida elementlarni royxatlardan olib tashlash 135
- 15.4. Operatordan foydalanish mumkin. egalik huquqini tasdiqlash uchun
- 15.5. Royxatdagi narsalarni ochirish qidiruvda
- 137-sahifa 15.7. Qopqoqlar 137
- 138-sahifa 138
- 139-bet 15.9. Mashqlar 139 15,8. Xulosa
126 14-bob. Konteynerlar: ro'yxatlar, to'plamlar va to'plamlar >>> raqamlar = [0, 1, 1, 2, 3, 4, 5, 6, ... 7, 8, 9] >>> digit_set = set (sonlar) # Qo'shimcha 1ni olib tashlash Silsilasini ham ega tom ma'nodagi sintaksisi tashkil etilishi mumkin } { : >>> digit_set = {0, 1, 1, 2, 3, 4, 5, 6, ... 7, 8, 9} Yuqorida aytib o'tilganidek, mo'l-ko'lchilik juda yaxshi niya nusxalari. Bir qatorga asoslangan to'plamlarni yaratishda barcha dublonlar o'chirildi. Shunday qilib, raqamli_setdan qo'shimcha element 1-nusxa:
>>> raqamli_set {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Ishlatiladigan aksessuarlar ishlashini tekshirish uchun ham : >>> 9 raqamli_setda Rost >>> 42-sonli raqamlarda Yolg'on ESLATMA Python-da maxsus a'zolik protokoli mavjud. Agar sinf (ko'p bo'lsa) foydalanuvchi tomonidan belgilangan ro'yxat, sinf yoki sinf) usulni amalga oshiradi __contains__ (yoki shafqatsiz kuch protokoli), undan foydalanish uchun foydalanish mumkin. Verki aksessuarlari. Komplektlarni amalga oshirish xususiyati tufayli ularning bog'liqligini tekshirish ancha tezroq bo'lishi mumkin ro'yxatni tekshirishdan ko'ra. Quyidagi misol g'alati deb nomlangan to'plamni yaratadi . Bo'ladi keyingi misollarda ishlatiladi: >>> toq = {1, 3, 5, 7, 9} Python to'plamlari ko'pchilik nazariyasining klassik operatsiyalarini qo'llab-quvvatlaydi birliklar ( | ), kesishish ( & ), ayirish ( - ) va. kabi xususiyatlarga ega Yopish OR ( ^ ).
14,8. Ko'pchilik 127 Ajratish operatori ( - ) bir xil to'plamdan elementlarni olib tashlaydi, boshqa to'plamdan: >>> toq = {1, 3, 5, 7, 9} # Ajratish >>> juft = raqamli_set - g'alati >>> hatto {0, 8, 2, 4, 6} Natija elementlarining tartibiga e'tibor bering: bir qarashda u o'zboshimchalik bilan ko'rinadi. Agar elementlarning tartibi siz uchun muhim bo'lsa, buning o'rniga to'plamlar boshqa ma'lumot turlaridan foydalangan holda yaxshiroqdir. Kesish jarayoni ( & ) ichida mavjud bo'lgan elementlarni qaytaradi ularning to'plamlari: >>> asosiy = to'plam ([2, 3, 5, 7]) # Ikkala to'plamda >>> prime_even = eng yaxshi va hatto >>> eng yaxshi {2}
ikkala to'plamning elementlari (dublikatlarsiz): >>> raqamlar = g'alati | hatto >>> chop etish (raqamlar) {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
ikkita to'plamning bittasida mavjud: >>> first_five = to'plam ([0, 1, 2, 3, 4]) >>> ikki_to_six = to'plam ([2, 3, 4, 5, 6]) >>> in_one = first_five ^ two_to_six >>> chop etish (in_one) {0, 1, 5, 6}
Ro'yxat o'rniga to'plamdan qachon foydalanish kerak? Shuni yodda tutingki, ko'pchilik Xususiyatlar egalik huquqini tekshirish va dublikatlarni olib tashlash uchun optimallashtirilgan.
128 14-bob. Konteynerlar: ro'yxatlar, to'plamlar va to'plamlar katov. Agar siz ro'yxatlarni birlashtirsangiz yoki ayirmoqchi bo'lsangiz, balki ro'yxatlar o'rniga to'plamlardan foydalanishingiz kerak. Ko'pchilik egalik huquqini tekshirishda ancha samarali ishlaydi. nosti. Yilda operator fotoalbomlarda uchun tezroq ro'yxatlar ko'ra bo'ladi. Muallif: hech bo'lmaganda, siz ushbu tezlikni to'lashingiz kerak: ro'yxatlardan farqli o'laroq va shkafchalar, to'plamlar maxsus saqlash buyurtmasini qo'llab-quvvatlamaydi elementlar. Agar elementlarning tartibi siz uchun muhim bo'lsa, strukturadan foydalaning unda saqlanadigan ma'lumotlar. 14.9. Xulosa Ushbu bob ba'zi bir o'rnatilgan konteyner turlarini tavsiflaydi. Boshida ro'yxatlar ko'rib chiqildi - o'zgaruvchan tartibli ketma-ketliklar telnosti. Ro'yxat usullari yangi ro'yxatni qaytarmasligini unutmang, lekin odatda ro'yxatni "joyida" o'zgartiring. Ro'yxatlar qo'shishni qo'llab-quvvatlaydi o'zboshimchalik bilan elementlar, lekin odatda ro'yxat bir xil turdagi saqlanadi elementlar. Keyin tuynuklar tekshirildi. Tuyalar shuningdek buyurtma qilingan va ro'yxatlar, lekin ro'yxatlardan farqli o'laroq, bog'chalar o'zgarishni qo'llab-quvvatlamaydi "joyida". Amalda, ular odatda vakillik qilish uchun ishlatiladi ma'lumotlar yozuvlari - masalan, ma'lumotlar bazasidan o'qiladigan qatorlar. Ichida har xil turdagi yozuvlarni saqlash mumkin ob'ektlar. Bo'lim oxirida to'plamlar taqdim etildi. Ko'pchilik bor o'zgarishi mumkin, ammo ular buyurtma qilinmagan. Ular uchun ishlatiladi dublikatlarni olib tashlash va egalik huquqini tekshirish. Ishlatilganligi sababli hash mexanizmi to'plamlari tezkor ishlaydi va samarali. Buning uchun to'plam elementlari to'planishi kerak. yuvish yo'li bilan.
1. Ro'yxat tuzing, unda hamkasblaringiz va do'stlaringiz ismlarini saqlang. Ro'yxat identifikatori o'zgartirildimi? Ro'yxatni tartiblash. Ka- Qaysi element ro'yxatning yuqori qismida? Qaysi element ikkinchi qosh?
10/14. Mashqlar 129 2. Ismingiz, familiyangiz va yoshingiz bilan qo'shma gap yarating. Soz- odamlar ro'yxatini bering va unga o'zingizning guruhingizni biriktiring. Yaratmoq do'stlaringiz haqida tegishli ma'lumotga ega bo'lgan boshqa bog'chalar va ularni ro'yxatga qo'shing. Ro'yxatni tartiblash. Kitobda qachon funktsiyalari ko'rib chiqiladi, siz parametrdan foydalanishingiz mumkin tugmachani istalgan satr bo'yicha tartiblash uchun tugma: ism, familiya- yoshi yoki yoshi. 3. Do'stlaringiz ismlari yozilgan ro'yxat yarating. O'nta bilan ro'yxat yarating eng mashhur ismlarni bog'lang. Amaliyot orqali ko'p Keyin biron bir do'stingizning ismlari bu erda ekanligini tekshiring ro'yxati. 4. Gutenberg loyihasi 1 veb-saytiga tashrif buyuring va matnlar sahifasini toping Shekspir. Matnni uchta katakchalarga o'ralgan qatorga qo'ying. dummies. Ralf Uoldodan matn paragrafi bilan boshqa qator yarating Emerson. Ro'yxatni olish uchun .split string usulidan foydalaning har bir matndan so'zlar. To'plamlar bilan ishlashdan foydalanish, ikkala muallifning matnlarida uchraydigan umumiy so'zlarni ham bering har bir muallif uchun noyob so'zlar. 5. Tuplalar va ro'yxatlar o'xshash, ammo har xil xatti-harakatlarga ega. Is- atributlarni topish uchun o'rnatilgan operatsiyalardan foydalaning ketma-ketlik ob'ekti mavjud bo'lmagan ro'yxat ob'ekti. 1 https://www.gutenberg.org/
15 takrorlash Tizimlar bilan ishlashda standart iboralardan biri bu borlar ketma-ketligi. Masalan, siz filtrlashingiz mumkin Elementlardan biri, elementlarga funktsiyani qo'llang, chiqish Ushbu muammoni hal qilish uchun siz tsikldan foydalanishingiz mumkin parcha uchun . Quyidagi misol ro'yxatdagi barcha satrlarni ko'rsatadi: >>> ['c', 'a', 't'] dagi harflar uchun: ... bosma (xat) v a
>>> chop etish (xat) t
Eslatma: qurilishi uchun Loop bir yo'g'on ichakni (o'z ichiga olgan :) uchun, (girintilidir kodini kiriting uchun halqa blokda ). For for loopda Python ushlab turilishi kerak bo'lgan yangi harfni yaratadi joriy element. Iltimos Eslatma: indeks saqlanadi emas yilda harf , lekin satr. Davr tugagandan so'ng Python o'zgaruvchini o'chirmaydi.
15.1. Indeks bilan qidirish 131 15.1. Indeks bilan qidirish C kabi tillarda tartiblash tomonidan amalga oshirilmaydi ketma-ketlikning elementlari, ammo indekslar bo'yicha. Indekslardan foydalanib, siz ko'rsatilgan indekslari bilan elementlarni olish mumkin. Quyida ko'rsatilgan o'rnatilgan muammoni hal qilish uchun variantlardan biri Python diapazoni va len funktsiyalari : >>> hayvonlar = ["mushuk", "it", "qush"] >>> diapazon bo'yicha indeks uchun (len (hayvonlar)): ... chop etish (indeks, hayvonlar [indeks]) 0 mushuk
1 it 2 qush
Yuqoridagi parcha kodini o'z ichiga olgan bir bobini bilan : bu muddat, odatda ammo Python-ni kerakli darajada ishlatmayotganingizni anglatadi. Odatda olish uchun ketma-ketlikdagi iteratsiyalar bajariladi indekslarga emas, balki ketma-ketlikdagi narsalarga kirish. Shunga qaramasdan ba'zi hollarda indeks ham kerak. Python quyidagilarni ta'minlaydi: bir bor ajralmas bo'ladi Enumerate funktsiyasi bilan uyg'unligi qator va len ortiqcha bo'ladi. Enumerate funktsiyasi bir necha qatorni qaytaradi ( indeks,
>>> hayvonlar = ["mushuk", "it", "qush"] >>> indeks uchun, sonlardagi qiymat (hayvonlar): ... bosib chiqarish (indeks, qiymat) 0 mushuk 1 it
2 qush Bir qatorda indeks va qiymat juftligi mavjud bo'lganligi sababli siz tiklashingiz mumkin ikkita o'zgaruvchini yaratish uchun ko'p qavatli o'rashdan foydalaning , indeks va qiymat , o'ng qator uchun . O'zgaruvchan nomlarni ajratish kerak vergul Agar ulanish uzunligi o'zgaruvchilar soniga to'g'ri keladigan bo'lsa, bir kiritilgan uchun Ichak , Python siz uchun, ularni yaratadi.
132 15-bob. Qaytarishlar A Loopda o'zgaruvchini yaratish [,,]
Id: 4f3b Turi: Ro'yxat xat 'c'
Str ['c', 'a', 't'] harflari uchun: 'a' Str
"t" Str
1-qadam: Birinchidan, c ga o'zgaruvchan nuqta bosma (xat) Xulosa Xulosa
bilan [,,]
Id: 4f3b Turi: Ro'yxat xat 'c'
Str ['c', 'a', 't'] harflari uchun: 'a' Str
"t" Str
2-qadam: Keyin o'zgaruvchi a-ga ishora qiladi bosma (xat) v a
Kompyuter nima qiladi O'zgaruvchan ob'ektlar Anjir. 15.1. A Loopda o'zgaruvchini yaratish. Yangi harf o'zgaruvchisi yaratiladi; birinchidan, u "c" harfiga ishora qiladi, bosib chiqarish chaqiruvi orqali bosib chiqariladi. Keyin pastadir keyingi iteratsiyaga va o'zgaruvchiga o'tadi "a" ga ishora
15.1. Indeks bilan qidirish 133 [,,]
Id: 4f3b Turi: Ro'yxat xat 'c'
Str ['c', 'a', 't'] harflari uchun: 'a' Str
"t" Str
3 qadam: Va nihoyat, harf t, ro'yxat yo'q qilinadi bosma (xat) Xulosa v
t [,,]
Id: 4f3b Turi: Ro'yxat xat 'c'
Str ['c', 'a', 't'] harflari uchun: 'a' Str
"t" Str
4 bosqich: c va a belgilari yo'q qilinadi belgi t qoladi bosma (xat) Xulosa v
t Anjir. 15.2. For loopi davom etadi va 't' tugagandan so'ng u tugaydi. Unda axlat yig'ish paytida ro'yxat tom ma'noda yo'q qilingan payt. "C" va "a" dan beri faqat ro'yxatni ko'rsatadi, ular ham yo'q qilinadi. Ammo harf o'zgaruvchan "t" ga ishora qilishni davom ettiradi. Python bu o'zgaruvchini yo'q qilmaydi va u for for loop tugallangandan keyin mavjud bo'lishni davom ettiradi
134 15-bob. Qaytarishlar 15.2. Loop chiqish Ba'zan tsiklning bajarilishini muddatidan oldin to'xtatish kerak, pastadir barcha elementlar ustida iteratsiya oldin. Break kalit so'z turadi Siz eng yaqin bo'lgan ichki pastadir. Keyingi pro gramm salbiylarni aniqlaguncha raqamlarni yig'adi raqam. Bunday holda, ko'chadan bajarilishi break buyrug'i bilan to'xtatiladi : >>> raqamlar = [3, 5, 9, -1, 3, 1] >>> natija = 0 >>> elementlar uchun raqamlarda: ... agar element <0: ... tanaffus
... natija + = element >>> chop etish (natija) 17
Mos ravishda natija + = element
ekvivalent: natija = natija + element Yaxshilangan tayinlash biroz tezroq bo'ladi, chunki qabul qilish Natijada o'zgaruvchi faqat bir marta bajariladi. Bundan tashqari, jamoa yarim himoyada Bu yanada ixcham va tezroq tanishtirilgan ko'rinadi. ESLATMA Agar ichki blok uchun blokda sakkiz bo'shliqlar bilan girintilidir bo'ladi. Bloklar mumkin joylashtirilishi kerak va har bir daraja o'z belgisiga ega bo'lishi kerak.
Looplarning yana bir standart idiomi - bu individual elementlarni qachon o'tkazib yuborish shafqatsiz kuch. Tanasi bo'lsa uchun Ichak bajarish uchun bir oz vaqt talab etadi, va u faqat ketma-ketlikning ba'zi elementlari uchun bajarilishi kerak
15.5. Hisoblash paytida elementlarni ro'yxatlardan olib tashlash 135 Umuman olganda, davom etadigan kalit so'z siz uchun foydalidir . Davom etish buyrug'i Python-ga hozirgi pastadir elementini qayta ishlashni bekor qilishni buyuradi va blok uchun boshidan pastadir , keyingi qiymat bilan. Quyidagi misol ro'yxatdagi barcha ijobiy raqamlarni umumlashtiradi: >>> raqamlar = [3, 5, 9, -1, 3, 1] >>> natija = 0 >>> elementlar uchun raqamlarda: ... agar element <0: ...
davom eting ... natija = natija + element >>> chop etish (natija) 21
egalik huquqini tasdiqlash uchun Biz buyruq foydalangan yilda Loop uchun . Pythonda bu buyruq egalik huquqini tasdiqlash uchun ham foydalanish mumkin. Agar Siz agar siz ro'yxatda berilgan element mavjudligini bilmoqchi bo'lsangiz, foydalaning buyruq bilan tekshirish uchun: >>> hayvonlar = ["mushuk", "it", "qush"] >>> Hayvonlarda "qush" Rost
Agar siz indeksni bilishingiz kerak bo'lsa .index usulidan foydalaning : >>> hayvonlar.index ('qush') 2
Yuqorida aytib o'tilganidek, ro'yxatlar o'zgarishi mumkin. O'zgartirish Ko'prik siz ularga elementlarni qo'shishingiz yoki olib tashlashingiz mumkinligini anglatadi. Undan tashqari Bundan tashqari, ro'yxatlar ketma-ketlikdir, bu ularning tarkibini anglatadi saralash mumkin.
136 15-bob. Qaytarishlar Masalan, agar siz ismlarning ro'yxatini shunday filtrlashni xohlasangiz unda faqat "Jon" yoki "Pol" elementlari qolgan edi , shunday bo'lishi mumkin edi noto‘g‘ri: >>> ismlar = ['Djon', 'Pol', 'Jorj', ... 'Ringo'] >>> ismlarda ism uchun: ... agar ism ['John', 'Paul'] da bo'lmasa: ...
ismlar (ism) >>> chop etish (ismlari) ['Djon', 'Pol', 'Ringo'] Nima sodir bo `LDI? Python ro'yxatlar o'zgartirilmaydi deb taxmin qiladi saralash jarayonida. "Jorj" ga etib borganingizda , ko'chadan nomni olib tashlaydi ro'yxati. Ichki amalga oshirishda Python oqimni kuzatadi pastadir uchun . Ayni paytda, ro'yxatda faqat uchta narsa qoladi: "Jon" , "Pol" va "Ringo" . Biroq, for loop hozirgi deb hisoblaydi indeks 3 bilan pozitsiya (to'rtinchi element), to'rtinchi element esa yo'q mavjud, shuning uchun pastadir to'xtaydi va 'Ringo' elementi qoladi joyida. Elementlarni olib tashlash uchun ikkita alternativ echim mavjud qidirish jarayonida ro'yxat. Birinchi variantda o'chirilgan narsalar ro'yxat bo'yicha birinchi o'tish joyida tanlangan. Keyingi ko'chadan iteratsiya faqat o'chirilishi kerak bo'lgan narsalar mavjud ( ismlar_to_remove ), va ularni manbalar ro'yxatidan ( ismlar ) olib tashlaydi : >>> ismlar = ['Djon', 'Pol', 'Jorj', ... 'Ringo'] >>> name_to_remove = [] >>> ismlarda ism uchun: ... agar ism ['John', 'Paul'] da bo'lmasa: ...
name_to_remove.append (ism) >>> ismlar uchun ... name.remove (ism) >>> chop etish (ismlari) ['John', 'Paul']
15.7. Qopqoqlar 137 Yana bir yechim - bu ro'yxat nusxasini takrorlash. Amalga oshirish juda oson. tilim nusxasini qurish [:] tomonidan ishlatiladi , ko'rib chiqiladi tilim bo'limida: >>> ismlar = ['Djon', 'Pol', 'Jorj', ... 'Ringo'] Ismlar uchun >>> uchun ismlar [:]: # ismlarning nusxasi ... agar ism ['John', 'Paul'] da bo'lmasa: ... ismlar (ism) >>> chop etish (ismlari) ['John', 'Paul'] 15.6. Boshqa blok A uchun Ichak ham bir bo'lishi mumkin , boshqa blok . Boshqa blokdagi har qanday kod for loop break buyrug'iga erishmasa, bajariladi . Quyidagi misol ko'chadan raqamlar musbat ekanligini tekshiradi tanasi: >>> ijobiy = noto'g'ri >>> elementlar soni uchun: ... agar num <0: ... tanaffus
... yana: ... ijobiy = To'g'ri Davom etish buyruqlari boshqa blokning bajarilishiga ta'sir qilmaydi . Boshqa buyruq nomi biroz g'alati ko'rinadi. Uchun uchun Loop, uni butun ketma-ketlik qayta ishlanganligini bildiradi. Ilgarigi blok ko'chadan uchun qilingan ko'pincha elementlar yo'qligini band edilar. 15.7. Qopqoqlar Python kodni blokini bir necha marta bajarishga imkon beradi, ba'zilarida shart to'g'ri qoladi. Bunday konstruktsiya vaqt pastadir , va uni yaratish uchun while buyrug'idan foydalaning . Esa halqa quyidagicha
138 15-bob. Qaytarishlar natijasi to'g'ri yoki noto'g'ri bo'lgan va ifoda ortida bo'lgan ifoda yo'g'on ichak bor. Pythonda yo'g'on ichakning orqasidan nimani eslang ( :) ? Ha kiruvchi kod bloki. Ushbu blok natijaga qadar davom etadi ifoda to'g'ri qoladi . Dastur osongina paydo bo'lishi mumkin cheksiz tsikl. Sizning dasturingiz tufayli cheksiz pastadir odatda istalmagan bo'ladi Ma tsiklda chiqish imkoniyatisiz "muzlaydi". Biroq, qoida istisnolar mavjud: masalan, server cheksiz pastadir ichida bo'ladi va so'rovlarni qayta ishlaydi. Kodda boshqa istisno mavjud Yuqori darajadagi Python cheksiz generatordir. Jeneratör o'zini faqat qiymatlarni yaratadigan kechiktirilgan ro'yxat kabi tutadi qachon ular qidiruvga jalb qilinadi. Agar bilsangiz oqim ishlashi bilan generatorni oqim deb hisoblash mumkin. (Jeneratörlar ushbu kitobda yoritilmagan, lekin men ularni kitobda tasvirlab beraman yuqori darajaga.) Odatda, agar sizda shafqatsiz kuchni qo'llab-quvvatlaydigan ob'ekt bo'lsa, for pastadir uchun loop yordamida elementlar ustida iteratsiya . Esa ko'chadan ishlatiladi shafqatsiz kuchni qo'llab-quvvatlaydigan narsaga oson kirish imkoni bo'lmagan taqdirda. Vaqt pastadirini ishlatishga odatiy misol , bu orqaga qaytarish: >>> n = 3 >>> n-0 bo'lganda: ... chop etish (n) ... n = n - 1 3 2 1 Break buyrug'i, shuningdek , vaqt qatoridan chiqish uchun ham ishlatilishi mumkin : >>> n = 3 >>> haqiqiy bo'lsa: ... chop etish (n) ... n = n - 1 ... agar n == 0: ...
tanaffus
15.9. Mashqlar 139 15,8. Xulosa Ushbu bobda takroriy takrorlash uchun ishlatishni ko'rib chiqamiz. ketma-ketlik elementlari. Siz ko'chadan olib borishingiz mumkinligini ko'rdingiz ro'yxatlar bo'yicha qidirish; qatorlar, tuynuklar, so'zlar bo'yicha qidirish ham mumkin Varjam va boshqa ma'lumotlar tuzilmalari. Bundan tashqari, siz belgilashingiz mumkin ona darslari, deb qo'llab-quvvatlash ro'yxat uchun tomonidan ko'chadan amalga oshirish usuli .__ iter__ . Uchun Ichak vasvasaga qachon bir o'zgarmaydigan hosil qiladi. Ushbu o'zgaruvchi noyob emas. tsikldan keyin, lekin mavjud bo'lishda davom etmoqda. Agar uchun Loop is- funktsiya ichida to'ldirilgan bo'lsa, o'zgaruvchilar chiqish paytida yo'q qilinadi funktsiyasi. Hisoblash funktsiyasi ushbu bobda ham keltirilgan . Funktsiya uchun juftliklar ketma-ketligini qaytaradi (juftliklar "indeks, qiymat") uzatiladigan ketma-ketlik. Agar qachon olish kerak bo'lsa indeks va qiymat bo'yicha iteratsiya uchun, enumerate- dan foydalaning . Va nihoyat, halqa bajarilishini qanday qilib to'xtatishni o'rgandingiz, keyingisiga o'ting. elementni tanlang yoki boshqa buyruqni ishlating . Bu dizaynlarning barchasi tsikllar mantig'ini muayyan vazifalar uchun moslashtirishga imkon beradi. Download 363.98 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling