16. Param — funksiyalarda murakkab turlar
Barcha masalalarda ro'yxat (list), satr, klass (dataclass) obyekti yoki funksiya funksiya parametri sifatida uzatiladi. Python'da ro'yxat o'z uzunligini biladi (len), shuning uchun uning o'lchami alohida parametr sifatida uzatilmaydi. Natija return orqali qaytariladi; bir nechta natija kortej (tuple) sifatida qaytariladi. Ro'yxat kabi o'zgaruvchan (mutable) obyektlar funksiya ichida joyida o'zgartirilishi mumkinligini yodda tuting. Parametrlarga tur izohlarini (type hints) yozish tavsiya etiladi.
Ro'yxat parametrlari
1. Butun sonlar ro'yxatini qabul qilib, uning barcha elementlarini joyida 2 baravar oshiruvchi funksiya yozing. Xuddi shu ishni kortej (tuple) parametri bilan qilib ko'ring va farqini tushuntiring.
Misol: [1 2 3] → [2 4 6]; kortej o'zgarmas (immutable), shuning uchun uni joyida o'zgartirib bo'lmaydi — funksiya yangi kortej qaytarishi kerak: (1, 2, 3) → (2, 4, 6)
2. Bir xil uzunlikdagi ikkita ro'yxatni qabul qilib, mos elementlar yig'indisidan iborat yangi ro'yxat qaytaruvchi funksiya yozing.
Misol: [1 2 3] va [10 20 30] → [11 22 33]
3. Ro'yxat va K sonini qabul qilib, uni joyida K pozitsiyaga dumaloq siljituvchi funksiya yozing.
Misol: [1 2 3 4 5], K = 2 → [4 5 1 2 3]
4. Ro'yxatni qabul qilib, uni musbat va manfiy elementlardan iborat ikkita yangi ro'yxatga ajratuvchi va ikkalasini qaytaruvchi funksiya yozing.
Misol: [3 -1 4 -5] → musbat [3 4], manfiy [-1 -5]
5. Ro'yxat va saralash tartibi (o'suvchi/kamayuvchi, kod sifatida) ni qabul qiluvchi universal saralash funksiyasini yozing.
Misol: [4 1 3], o'suvchi → [1 3 4]; kamayuvchi → [4 3 1]
6. Ro'yxat va K sonini qabul qilib, K-o'rindagi elementi o'chirilgan ro'yxatni qaytaruvchi funksiya yozing (s = f(s, k) ko'rinishida chaqirilsin).
Misol: [10 20 30 40], indeks 2 → [10 20 40]
7. Ro'yxat, K va X sonlarini qabul qilib, K-o'ringa X qo'shilgan ro'yxatni qaytaruvchi funksiya yozing.
Misol: [10 20 30], indeks 1, X = 15 → [10 15 20 30]
8. Ro'yxat va boshlang'ich indeks K ni qabul qilib, K-elementdan oxirigacha bo'lgan qismdagi eng katta elementning indeksini qaytaruvchi funksiya yozing. Undan foydalanib, ro'yxatni kamayish tartibida saralovchi funksiya yozing.
Misol: [3 9 2 7], K = 0 → 1; kamayish tartibida saralash → [9 7 3 2]
9. Ikkita ro'yxatni qabul qilib, ular teng ekanligini (uzunliklari va barcha mos elementlari teng) qaytaruvchi funksiya yozing.
Misol: [1 2 3] va [1 2 3] → True; [1 2] va [1 2 3] → False
10. Ro'yxatning L-elementidan R-elementigacha bo'lgan qismini teskari tartibga o'tkazuvchi funksiya yozing. Undan uch marta foydalanib, ro'yxatni K pozitsiyaga dumaloq siljituvchi funksiya yozing.
Misol: [1 2 3 4 5 6], L = 1, R = 3 (indeks) → [1 4 3 2 5 6]; [1 2 3 4 5], K = 2 → [4 5 1 2 3]
11. Ro'yxatni qabul qilib, takrorlanuvchi elementlari olib tashlangan ro'yxatni qaytaruvchi funksiya yozing (har bir qiymatning birinchi uchrashi qolsin).
Misol: [3 1 3 2 1] → [3 1 2]
12. Ro'yxatni qabul qilib, uning musbat elementlaridan iborat yangi ro'yxat qaytaruvchi funksiya yozing.
Misol: [3 -1 4 0 -5] → [3 4]
13. O'sish tartibida saralangan ro'yxat va X sonini qabul qilib, X saralanganlik saqlanadigan o'ringa qo'shilgan ro'yxatni qaytaruvchi funksiya yozing.
Misol: [1 3 5 7], X = 4 → [1 3 4 5 7]
Matritsa parametrlari
14. Matritsani (list[list[float]]) qabul qilib, uning transponirlangan nusxasini yangi matritsa sifatida qaytaruvchi funksiya yozing.
Misol: [[1 2 3] [4 5 6]] → [[1 4] [2 5] [3 6]]
15. Matritsani qabul qilib, qatorlar yig'indilaridan iborat ro'yxat qaytaruvchi funksiya yozing.
Misol: [[1 2 3] [4 5 6]] → [6 15]
16. Matritsa va K ni qabul qilib, K-qatori o'chirilgan matritsani qaytaruvchi funksiya yozing.
Misol: [[1 2] [3 4] [5 6]], indeks 1 → [[1 2] [5 6]]
17. Matritsa va K ni qabul qilib, K-ustuni o'chirilgan matritsani qaytaruvchi funksiya yozing.
Misol: [[1 2 3] [4 5 6]], indeks 1 → [[1 3] [4 6]]
18. Matritsa va ikki qator indeksi I, J ni qabul qilib, shu qatorlarni joyida o'rin almashtiruvchi funksiya yozing.
Misol: [[1 2] [3 4]], I = 0, J = 1 → [[3 4] [1 2]]
19. N×M va M×P o'lchamli ikki matritsani qabul qilib, ularning ko'paytmasini yangi matritsa sifatida qaytaruvchi funksiya yozing.
Misol: [[1 2] [3 4]] va [[5 6] [7 8]] → [[19 22] [43 50]]
20. N×M matritsani qator bo'yicha bir o'lchamli ro'yxatga aylantiruvchi hamda bir o'lchamli ro'yxatdan N×M matritsa tiklovchi ikkita funksiya yozing.
Misol: [[1 2 3] [4 5 6]] → [1 2 3 4 5 6]; [1 2 3 4 5 6], N = 2, M = 3 → [[1 2 3] [4 5 6]]
21. Kvadrat matritsani qabul qilib, matritsa simmetrik ekanligini qaytaruvchi funksiya yozing.
Misol: [[1 2] [2 1]] → True; [[1 2] [3 4]] → False
22. Matritsani qabul qilib, eng katta element qiymatini hamda uning qator va ustun indekslarini (uchta natija) qaytaruvchi funksiya yozing.
Misol: [[1 9 3] [4 5 6]] → 9, qator 0, ustun 1
23. N×N matritsa va K (K ≤ N) ni qabul qilib, uning chap yuqori burchagidagi K×K o'lchamli qism matritsasini yangi matritsa sifatida qaytaruvchi funksiya yozing.
Misol: [[1 2 3] [4 5 6] [7 8 9]], K = 2 → [[1 2] [4 5]]
24. Kvadrat matritsani qabul qilib, determinantini Gauss usuli (uchburchak ko'rinishga keltirish) bilan hisoblovchi funksiya yozing.
Misol: [[1 2] [3 4]] → -2; [[2 1] [1 3]] → 5
Satr parametrlari
25. Satrni qabul qilib, undagi so'zlar sonini qaytaruvchi funksiya yozing.
Misol: "Go tili darslari" → 3
26. Satr va uni bo'luvchi belgi (masalan vergul) ni qabul qilib, satr qismlaridan iborat ro'yxat qaytaruvchi funksiya yozing.
Misol: "olma,anor,uzum", "," → [olma anor uzum]
27. Satrni qabul qilib, undagi eng uzun so'zni qaytaruvchi funksiya yozing.
Misol: "men Go tilini o'rganyapman" → o'rganyapman
28. Satrlar ro'yxatini qabul qilib, uni joyida satrlar uzunligi bo'yicha saralovchi funksiya yozing.
Misol: [gilos nok anor] → [nok anor gilos]
29. Satrni qabul qilib, uning "sarlavha uslubi"ga (har so'z bosh harfi katta) o'tkazilgan versiyasini qaytaruvchi funksiya yozing.
Misol: "go tili darslari" → "Go Tili Darslari"
30. Satrlar ro'yxatini qabul qilib, ular orasidagi palindromlardan iborat yangi ro'yxat qaytaruvchi funksiya yozing.
Misol: [radar salom non level] → [radar non level]
31. Satrni qabul qilib, uning boshidagi va oxiridagi bo'shliqlarni olib tashlovchi Trim funksiyasini yozing.
Misol: " salom dunyo " → "salom dunyo"
32. Satr va C belgisini qabul qilib, satrdagi barcha C belgilarini o'chirib tashlangan yangi satrni qaytaruvchi funksiya yozing.
Misol: "banana", 'a' → "bnn"
33. Satr va K sonini qabul qilib, satrdagi K-so'zni qaytaruvchi funksiya yozing (bunday so'z bo'lmasa, bo'sh satr qaytarilsin).
Misol: "bir ikki uch", K = 2 → "ikki"; K = 5 → ""
34. Satrlar ro'yxati va ajratgich satrini qabul qilib, ro'yxat elementlarini ajratgich bilan birlashtirgan bitta satrni qaytaruvchi Join funksiyasini yozing.
Misol: [a b c], "-" → "a-b-c"
35. Satrni teskari tartibga o'tkazuvchi funksiya yozing. Undan foydalanib, satrlar ro'yxatidagi palindrom satrlar sonini qaytaruvchi funksiya yozing.
Misol: "salom" → "molas"; [abba abc xyx] → 2
36. Satr, uzunlik N, to'ldiruvchi belgi C va tomon kodi (1 — chap, 2 — o'ng) ni qabul qilib, satrni ko'rsatilgan tomondan C belgilari bilan N uzunlikkacha to'ldiruvchi funksiya yozing.
Misol: "42", 5, '0', 1 → "00042"; "42", 5, '0', 2 → "42000"
37. Ikki satrni qabul qilib, ularni leksikografik solishtiruvchi funksiya yozing: birinchisi kichik bo'lsa −1, teng bo'lsa 0, katta bo'lsa 1 qaytarilsin (tayyor solishtirish funksiyasisiz).
Misol: "olma", "anor" → 1; "anor", "olma" → -1; "go", "go" → 0
38. Bo'shliqlar bilan ajratilgan butun sonlardan iborat satrni qabul qilib, sonlarni butun sonlar ro'yxati sifatida qaytaruvchi funksiya yozing.
Misol: "10 -5 7" → [10 -5 7]
Klasslar bilan ishlash
39. "Talaba" klassini (@dataclass) (ism, uch fan bahosi) e'lon qiling va uning o'rtacha bahosini hisoblovchi funksiya yozing.
Misol: Talaba{"Ali", 5, 4, 3} → 4
40. "Nuqta" klassini (@dataclass) (x, y) e'lon qiling va ikkita nuqta orasidagi masofani hisoblovchi funksiya yozing.
Misol: (0, 0) va (3, 4) → 5
41. "Mahsulot" klassini (@dataclass) (nomi, narxi, soni) e'lon qiling va uning umumiy qiymatini (narx × son) hisoblovchi funksiya yozing.
Misol: Mahsulot{"Non", 4000, 5} → 20000
42. "Sana" klassini (@dataclass) (kun, oy, yil) e'lon qiling va ikki sanani solishtiruvchi (qaysi biri oldinroq ekanligini aniqlovchi) funksiya yozing.
Misol: 15.03.2024 va 20.02.2025 → birinchi sana oldinroq
43. "Vaqt" klassini (@dataclass) (soat, minut, sekund) e'lon qiling va ikki vaqt orasidagi farqni sekundlarda hisoblovchi funksiya yozing.
Misol: 10:00:00 va 12:30:15 → 9015 soniya
44. "To'g'ri to'rtburchak" klassini (@dataclass) (kengligi, balandligi) e'lon qiling va to'g'ri to'rtburchaklar ro'yxatini qabul qilib, eng katta yuzali to'g'ri to'rtburchakni qaytaruvchi funksiya yozing.
Misol: [{2 3} {4 5} {3 6}] → eng katta yuza 20 ({4 5})
45. «Kasr» klassini (@dataclass) (surat, maxraj) e'lon qiling. Ikki kasrni qo'shish, ko'paytirish va kasrni qisqartirish funksiyalarini yozing.
Misol: 1/2 + 1/3 → 5/6; 1/2 · 2/3 → 1/3; 6/8 qisqartirilsa → 3/4
46. «Kompleks son» klassini (@dataclass) (haqiqiy qism, mavhum qism) e'lon qiling. Kompleks sonlarni qo'shish, ko'paytirish va modulini hisoblash funksiyalarini yozing.
Misol: (1+2i) + (3+4i) → 4+6i; (1+2i) · (3+4i) → -5+10i; |3+4i| → 5
47. «Vektor» klassini (@dataclass) (x, y, z) e'lon qiling. Ikki vektorning skalyar va vektor ko'paytmasini hisoblovchi funksiyalarni yozing.
Misol: (1, 2, 3) va (4, 5, 6) → skalyar 32, vektor (-3, 6, -3)
48. «Nuqta» klassidan foydalanib «Kesma» klassini (@dataclass) (ikki uchi) e'lon qiling. Kesma uzunligini va ikki kesma kesishishini tekshiruvchi funksiyalarni yozing.
Misol: (0, 0)–(3, 4) uzunligi 5; (0, 0)–(4, 4) va (0, 4)–(4, 0) → kesishadi; (0, 0)–(1, 1) va (2, 2)–(3, 3) → kesishmaydi
49. «Aylana» klassini (@dataclass) (markaz — «Nuqta», radius) e'lon qiling. Ikki aylananing o'zaro joylashuvini (kesishadi, urinadi, biri ikkinchisining ichida, kesishmaydi) aniqlovchi funksiya yozing.
Misol: (0, 0, 5) va (8, 0, 5) → kesishadi; (0, 0, 3) va (6, 0, 3) → urinadi; (0, 0, 10) va (1, 0, 2) → biri ichida; (0, 0, 2) va (10, 0, 3) → kesishmaydi
50. «To'g'ri to'rtburchak» klassini (@dataclass) (chap yuqori va o'ng pastki uchlar) e'lon qiling. Nuqta to'rtburchak ichida ekanligini tekshiruvchi va ikki to'rtburchak kesishmasini qaytaruvchi funksiyalarni yozing.
Misol: (0, 4)–(5, 0) va nuqta (2, 2) → True, nuqta (6, 2) → False; (0, 4)–(5, 0) va (3, 6)–(8, 2) → kesishma (3, 4)–(5, 2)
51. «Sana» klassidan foydalanib, sana va K sonini qabul qilib, sanaga K kun qo'shilgandan keyingi sanani qaytaruvchi funksiya yozing.
Misol: 28.02.2024, K = 3 → 02.03.2024
Obyektlar ro'yxati bilan ishlash
52. "Talaba" obyektlaridan iborat ro'yxatni qabul qilib, eng yuqori o'rtacha bahoga ega talabani qaytaruvchi funksiya yozing.
Misol: [{Ali 5 4 3} {Vali 5 5 4}] → Vali (o'rtachasi 4.67)
53. "Mahsulot" obyektlaridan iborat ro'yxatni qabul qilib, umumiy qiymatni hisoblovchi funksiya yozing.
Misol: [{Non 4000 5} {Sut 9000 2}] → 38000
54. "Nuqta" obyektlaridan iborat ro'yxatni qabul qilib, koordinata boshiga eng yaqin nuqtani qaytaruvchi funksiya yozing.
Misol: [(3, 4) (1, 1) (5, 0)] → (1, 1)
55. "Talaba" obyektlaridan iborat ro'yxatni qabul qilib, uni joyida o'rtacha baho bo'yicha saralovchi funksiya yozing.
Misol: [{Ali 5 4 3} {Vali 5 5 4} {Sevara 3 4 4}] → o'sish tartibida [Sevara Ali Vali]
56. "Mahsulot" obyektlaridan iborat ro'yxatni qabul qilib, narxi berilgan chegaradan qimmat bo'lganlaridan iborat yangi ro'yxat qaytaruvchi funksiya yozing.
Misol: [{Non 4000} {Sut 9000} {Go'sht 90000}], chegara 5000 → [Sut Go'sht]
57. "Xodim" obyektlaridan (ism, lavozim, maosh) iborat ro'yxatni qabul qilib, berilgan lavozimdagi xodimlarning o'rtacha maoshini qaytaruvchi funksiya yozing.
Misol: [{Ali dasturchi 10000000} {Vali dasturchi 14000000} {Sevara dizayner 8000000}], "dasturchi" → 12000000
58. "Talaba" obyektlaridan iborat ro'yxat va fan nomi (satr) ni qabul qilib, o'sha fandan eng yuqori bahoni olgan talabaning ismini qaytaruvchi funksiya yozing (Talaba klassida fan nomlari va baholar ro'yxati bo'lsin).
Misol: Ali — matematika 5, fizika 3; Vali — matematika 4, fizika 5: "fizika" → Vali; "matematika" → Ali
Fayl parametrlari
59. Ikkilik fayl nomini qabul qilib, undagi butun sonlar sonini qaytaruvchi funksiya yozing.
Misol: 4 ta int32 yozilgan fayl (16 bayt) → 4
60. Butun sonlar ro'yxatini ikkilik faylga yozuvchi va ikkilik fayldan ro'yxatga o'quvchi ikkita funksiya yozing (fayl nomi va ro'yxat parametrlar, xato bo'lsa, istisno (OSError) ko'tarilsin).
Misol: [10 20 30] yozilib, qayta o'qilsa → [10 20 30] (xato bo'lmasa, istisno ko'tarilmaydi)
61. Ikki fayl nomini qabul qilib, birinchi fayl mazmunini ikkinchisiga nusxalovchi funksiya yozing (xato bo'lsa, istisno (OSError) ko'tarilsin).
Misol: a.txt mazmuni salom → b.txt mazmuni ham salom
62. Ikkilik fayl nomi va X sonini qabul qilib, X ni fayl oxiriga qo'shuvchi funksiya yozing.
Misol: fayldagi [1 2 3], X = 4 → fayl [1 2 3 4]
63. Matnli fayl nomini qabul qilib, uning qatorlarini satrlar ro'yxati sifatida qaytaruvchi funksiya yozing (qatorlar soni — ro'yxat uzunligi).
Misol: fayl: bir, ikki, uch (har biri alohida qatorda) → [bir ikki uch], uzunligi 3
64. «Talaba» yozuvlari saqlangan ikkilik fayl nomi va talaba ismini qabul qilib, shu talaba yozuvining fayldagi tartib raqamini qaytaruvchi funksiya yozing (topilmasa, 0).
Misol: fayldagi yozuvlar Ali, Vali, Sevara: "Vali" → 2; "Gulnora" → 0
Funksiyani parametr sifatida uzatish
65. f(x) funksiyasini, a, b chegaralarini va bo'laklar soni n ni parametr sifatida qabul qilib, [a, b] kesmada to'rtburchaklar usuli bilan aniq integralni taqribiy hisoblovchi funksiya yozing. Uni bir nechta turli funksiyalar uchun sinab ko'ring.
Misol: f(x) = x², [0, 1], n = 1000 → taxminan 0.333; f(x) = sin x, [0, π], n = 1000 → taxminan 2
66. f(x) funksiyasini, [a, b] kesmani va aniqlik eps ni qabul qilib, f(x) = 0 tenglamaning ildizini kesmani teng ikkiga bo'lish usuli bilan topuvchi funksiya yozing (f(a) va f(b) turli ishorali deb hisoblang).
Misol: f(x) = x² − 2, [0, 2], eps = 0.0001 → 1.4142
67. Ro'yxat va ikki elementni solishtiruvchi funksiyani parametr sifatida qabul qiluvchi universal saralash funksiyasini yozing. Uni o'sish, kamayish va modul bo'yicha saralash uchun ishlating.
Misol: [-5 3 -1 4]: o'sish → [-5 -1 3 4]; kamayish → [4 3 -1 -5]; modul bo'yicha → [-1 3 4 -5]
68. Ro'yxat va shart funksiyasini (Callable[[int], bool]) qabul qilib, shartni qanoatlantiruvchi elementlar sonini qaytaruvchi funksiya yozing.
Misol: [1 2 3 4 5 6], juftlik sharti → 3
69. Ro'yxat va f funksiyasini qabul qilib, ro'yxatning har bir elementiga f ni joyida qo'llovchi funksiya yozing (Map).
Misol: [1 2 3], f(x) = x·x → [1 4 9]
70. f(x) funksiyasini, [a, b] kesmani va n ni qabul qilib, kesmani n ta teng bo'lakka bo'luvchi nuqtalarda funksiya qiymatlari jadvalini chiqaruvchi hamda shu nuqtalardagi eng katta qiymatni qaytaruvchi funksiya yozing.
Misol: f(x) = x², [0, 2], n = 4 → jadval 0→0, 0.5→0.25, 1→1, 1.5→2.25, 2→4; eng katta qiymat 4