🎯 Vazifa:
raqamlar = [5, 10, 15, 20, 25] degan list yarating va pop() yordamida oxirgi elementini o'chirib, ekranga chiqaring.
Javobingizni yoki fikringizni izohda qoldiring! 👇
@Python_with_MIT
🔥 Python bo‘yicha random mavzu: Tasodifiy tanlov bilan qiziqarli mini- loyiha (random.choice)
Bugungi mavzu: Pythonning random moduli yordamida tasodifiy tanlov qilish. Tasodifiylik faqat kichik skriptlar uchun emas, balki o‘yinlar, sun’iy intellekt stsenariylari yoki foydalanuvchi tajribasini yaxshilash uchun ham foydali. random moduli ichida choice, shuffle, randint kabi foydali funksiyalar mavjud. Bu mavzu yordamida siz biror ro‘yxat ichidan tasodifiy elementni tanlash, ro‘yxatni aralashtirish yoki takrorlanmas random sonlar olishni o‘rganasiz. Kaliy, xavfsiz ishlash uchun seed ham o‘rganamiz — reproducible natijalar olish mumkindir.
Qisqa nazariy tushuntirish:
- random modulining asosiy vazifasi tasodifiy sonlar va qarorlar ishlab chiqarish.
- random.choice ro‘yxatdan biror elementni tasodifiy tanlaydi; seed orqali tasodifiy sonlar oqimini “yopishtirish” mumkin.
- shuffle ro‘yxatni joylashtirib aralashtiradi, agar tartibni yo‘qotmasdan ixtiyoriy tanlov qilinsa foydali.
- random.randint a va b oraliqdagi butun sonni tasodifiy beradi, qamrovi a, b ichida bo‘ladi.
Amaliy kod misoli:
import random
# Reproducibility uchun seed qo'yamiz
random.seed(42)
oyeqlar = ["Mavzu 1", "Mavzu 2", "Mavzu 3", "Mavzu 4", "Mavzu 5"]
# Tasodifiy mavzu tanlash
tanlangan = random.choice(oyeqlar)
# Ro'yxatni aralashtirish
random.shuffle(oyeqlar)
# Tasodifiy sonlar oraliq berish
tasodiy_r = random.randint(10, 99)
print("Tanlangan mavzu:", tanlangan)
print("Aralashtirilgan ro'yxat:", oyеqlar)
print("Tasodiy son (10..99):", tasodiy_r)
Kod natijasi (Output):
Tanlangan mavzu: Mavzu 4
Aralashtirilgan ro'yxat: 'Mavzu 2', 'Mavzu 1', 'Mavzu 5', 'Mavzu 3', 'Mavzu 4'
Tasodiy son (10..99): 74
Izoh: seed o‘zgarmasa, har bir ishga tushurishda xuddi shunday natija berishi mumkin. Qanday loyihalarda random modulidan qaysi yo‘lni afzal ko‘rasiz?
Obuna bo‘lganlar, fikrlar: Sizning eng qiziqarli random konseptingiz qaysi mavzu? Yoki hozirgi mavzu bo‘yicha qanday qo‘shimcha misollar ko‘rishni
🔥 1‑Boshlang‘ich Python: ro‘yxatni tez tartiblash (sort) 🧠💡
Bugungi mavzu: Python yordamida ro‘yxatni tartiblashning eng oddiy yo‘li. Ro‘yxatlar bilan ishlashda sort() yoki sorted() funksiyalari juda qulay bo‘ladi. Bu yerda sonlardan iborat ro‘yxatni oson tartiblab ko‘rsataman; natijada kichikdan kattaga yo‘nalishda yangi ro‘yxat hosillanadi. Tartiblashda o‘zgaruvchan parametrlar ham bor: oraliq so‘zlar, katta-kichik harflar bo‘yicha maxsus tartib, va tartib bo‘yicha o‘zgarishlar. Oddiy misolda faqat sonlar bo‘yicha oddiy tartibni ko‘rsataman — bu ko‘pchilik uchun yaxshi boshlanish nuqtasi. Yana, kod orqali yaxshiroq tushunish uchun chiqishini ham ko‘rsataman. 🔎🧰
Kod misoli (real, ishlaydi):
# Oddiy ro'yxatni tartiblash
raqamlar = [5, 2, 9, 1, 7]
tartiblangan = sorted(raqamlar) # kichikdan kattaga
print("Tartiblangan ro'yxat:", tartiblangan)
# Agar o'sish tartibini o'rniga kamayish tartibini istasak:
tartiblangan_kamayish = sorted(raqamlar, reverse=True)
print("Kattalardan kichikka tartib:", tartiblangan_kamayish)
# Ro'yxatni o'zgaruvchiga to'g'ridan-to'g'ri tartiblashtirish:
raqamlar.sort()
print("sort() bilan o'zgartirilgan ro'yxat:", raqamlar)
Natija (Output):
Tartiblangan ro'yxat: [1, 2, 5, 7, 9]
Kattalardan kichikka tartib: [9, 7, 5, 2, 1]
sort() bilan o'zgartirilgan ro'yxat: [1, 2, 5, 7, 9]
Bu yerda oddiy sorted() funksiyasi qanday ishlashini ko‘rdik: u asl ro‘yxatni o‘zgartirmasdan yangi tartiblangan ro‘yxat yaratadi. Agar manbani o‘zi o‘zgartirilishini istasangiz, .sort() metodidan foydalanasiz. Shuningdek, reverse parametri yordamida teskari tartibni tez olish mumkin. 💡🧩
Siz o‘z ro‘yxatlaringizni qanday tartiblaysiz? Masalan, lorali matnlar yoki sanalar bo‘yicha? Qo‘shimcha tavsiyalaringiz bormi? Fikr-mulohazalaringizni yozing, men siz uchun yanada amaliy misollar tayyorlab beraman! 💬👇
2) Listlar bilan ishlash — tezkor amaliyot va tozalash 💡🧰
Listlar Pythonning eng foydali ma’lumot tuzilmasi biri. Ular orqali bir nechta qiymatlarni bir joyda saqlab, indeks bo‘yicha murojaat qilamiz. Ro‘yxatni yaratish, element qo‘shish yoki o‘chirish kabi amallar kundalik dasturlarda juda qulay. Shuningdek, for sikllar yoki list comprehension yordamida ro‘yxatlarni filtrlash va o‘zgartirish oson kechadi. Bugun oddiy misolda ro‘yxatdan juft sonlarni ajratishni ko‘rib chiqamiz. ⚡
Amaliy kod misoli (real ishlatiladigan):
# Oddiy ro'yxatdan juft sonlarni olish
nums = [1, 2, 3, 4, 5, 6]
evens = [n for n in nums if n % 2 == 0]
print(evens)
Kod natijasi (Output):
2, 4, 6
Siz ro‘yxatlar bilan murakkabroq filtrlash yoki o‘zgartirishlarni qanday amalga oshirasiz? Masalan, ro‘yxat ichidagi matnlar uzunligini hisoblash yoki ikkita ro‘yxatni birlashtirish kabi vazifalarni qaysi usullar bilan o‘rganasiz? Sizning foydali usullaringiz yoki eng foydali list comprehension misolingizni quyida kommentariyada yozing! 📝💬
Sarlavha: Listlar bilan ishlash — Python’da tezkor tanishuv 📚🐍
Mavzu nomi: Listlar
Qiziqarli qisqa tushuntirish: Python’da ro‘yxat (list) — o‘zgaruvchan kolleksiya bo‘lib, bir nechta qiymatlarni bir o‘zida saqlashga imkon beradi. Listlar indekslash orqali har bir elementga murojaat qiladi (0-dan boshlanadi) va append, pop, remove kabi ko‘plab foydali usullarga ega. Listlar bilan ishlash keng qo‘llanadi: ma’lumotlar to‘plamini saqlash, filtr, tartibga solish yoki mavhum algoritmlarni bajartirish uchun ideal. Quyidagi oddiy misolda ro‘yxat yaratish, indeks bo‘yicha kirish, ro‘yxat bo‘yicha tushuncha va ro‘yxatni kengaytirishni ko‘rsataman. 👇
Amaliy kod misoli:
# Oddiy ro'yxat yaratish, indekslash va ro'yxat tushunchasini ko'rsatish
fruits = ["olma", "banan", "olcha", "nok"]
# indeks bo'yicha chiqarish
print("Birinci meva:", fruits[0])
# ro'yxat tushunchasi: ro'yxat ichida ro'yxat
evens = [x for x in range(1, 11) if x % 2 == 0]
print("Juft sonlar:", evens)
# ro'yxatni qo'shish
fruits.append("shaftoli")
print("Yangilangan ro'yxat:", fruits)
# qisqa filtratsiya misoli: uzun ro'yxatdan faqat qaysi meva
# bo'lishini ko'rish
selected = [f for f in fruits if "a" in f]
print("A harfi bor mevalar:", selected)
Kod natijasi (Output):
Birinci meva: olma
Juft sonlar: [2, 4, 6, 8, 10]
Yangilangan ro'yxat: ['olma', 'banan', 'olcha', 'nok', 'shaftoli']
A harfi bor mevalar: ['olma', 'banan', 'olcha', 'shaftoli']
Obunachilardan fikr: Siz ro‘yxatlar bilan ishlashning qaysi usullarini eng ko‘p foydalanasiz va qaysi vaziyatlarda ro‘yxat tushunchasi eng foydali bo‘ladi deb o‘ylaysiz? Keysingi mavzu uchun qaysi misollar yoqadi? 💬🧭
4) Listlar va list comprehension: Qisqa yo‘l bilan kvadratlar ro‘yxati 🎯
Listlar Pythonning eng qulay ma’lumot tuzilmasi bo‘lib, turli ma’lumotlarni tartibda saqlashga yordam beradi. List comprehension esa yozishni soddalashtirib, o‘qish oson kod yaratadi. Oddiy for sikl bilan ham xuddi shunday natijaga erishsak bo‘lsa-da, qisqa va samarali yozish uchun ayniqsa foydali. Masalan, kichik bir misol orqali kvadratlar ro‘yxatini yaratish uchun oddiy bo‘laklar:
- Bu usulni ishlatishning asosiy afzalligi — bir qator amalda ro‘yxatga olinish: necha xonali bo‘lishini oldindan aytmasdan, istalgan intervalga moslash.
- Ehtiyot bo‘ling: list comprehension katta ma’lumotlar uchun xotira talabini oshirishi mumkin, shuning uchun yodingizda tutsangiz yaxshi.
- Shaxsiy foydalanuvchi uchun — kodni soddalashtirib, o‘qilishi uchun izohlar qo‘yish ham muhim.
# Misol: 1 dan 10 gacha bo'lgan sonlarning kvadratlarini ro'yxatga olish
squares = [x*x for x in range(1, 11)]
print(squares)
Output
1, 4, 9, 16, 25, 36, 49, 64, 81, 100
Siz list comprehensionni qachon va qanday holatda ishlatganingizni yozing: murakkab shartlar bilan ro‘yxat olish, yoki oddiy o‘zgartirishlar uchun qaysi holatlar qulay? 😊👏
🎯 1-bo‘lim: Funksiya yozish – def bilan amaliy misol
Funksiya — dasturlashning tiyilish nuqtasi. Bugun oddiy, ammo foydali: yildirim tezligida hisoblash uchun sum_of_squares deb ataladigan funksiya yozamiz. Bu funksiya n ni oladi va 1 dan n gacha bo‘lgan sonlarning kvadratlari yig‘indisini chiqaradi. Funksiya yordamida xuddi shunday murakkabroq amallarni ham qisqa, o‘qilishi oson kod bilan bajara olasiz. Pratikada nazariya tez-tez kodga ko‘chadi, shuning uchun quyidagi misolni diqqat bilan ko‘ring. ✨
Nazariy tushuntirish:
- Funktsiya oddiy tashuvchini oladi (n) va ichida sikl orqali 1 dan n gacha ko‘rib chiqadi.
- Har bir i ning kvadrati qo‘shiladi, natija esa return bilan beriladi.
- Funktsiyadan foydalanish uchun uning nomini chaqirib, parametrini uzatamiz.
Kod misoli:
def sum_of_squares(n: int) -> int:
"""
1 dan n gacha bo'lgan sonlarning kvadratlari yig'indisini hisoblaydi.
"""
total = 0
for i in range(1, n + 1):
total += i * i
return total
# Misol uchun:
n = 5
result = sum_of_squares(n)
print("Sum of squares 1..", n, "=", result)
Kod natijasi (Output):
Sum of squares 1.. 5 = 55
Bugungi darsimizdan nima o‘rgandingiz?
Siz o‘zingizga qaysi oddiy funktsiyani yozib ko‘rardingiz? Fikrlaringizni comment qoldiring orqa aloqani yoqtiring!
2️⃣ Listlar va list comprehension — tezkor yozuvlar bilan oson tahlil 💡
List comprehension — bu ro‘yxatlarni qisqa va o‘qilishi oson yozishning kuchli usuli. Oddiy mantikani bir chiziqda yozib, mosligiga qarab filtrlash, transformatsiya qilish imkonini beradi. Misol uchun, 1–10 oralig‘idagi juft sonlarning kvadratlarini olish uchun qilingan yozuvlar ancha lo‘nda bo‘ladi va kodni o‘qish osonligini oshiradi. Katta ma’lumotlar bilan ishlayotganda tezlashtiradi, lekin murakkab sharoitlarda bitta satrga haddan ziyod ko‘p sharoit yozmaslik kerak — o‘qilishi yo‘qligi muammo yuzaga kelishi mumkin. Iqtisodiy va toza kod uchun oddiy holatda foydalanish eng yaxshi.
Quyida amaliy misol: oddiy 1 dan 10 gacha bo‘lgan sonlarning juftlarini kvadratlashtirib olish.
# misol: 1..10 orasidagi juft sonlarning kvadratlari
evens_sq = [x*x for x in range(1, 11) if x % 2 == 0]
print(evens_sq)
Output
[4, 16, 36, 64, 100]
Sizning tajribangizda list comprehensiondan qachon va qaysi vaziyatda foydalanasiz? Yoqimsiz yoki murakkab holatlarda o‘zgartirish (yo 3-4 ta misol) kiritgan bo‘lsangiz, ulashsangiz-chi?
🧩 3-qism: List comprehensionlar — ro‘yxatlarni qisqa yo‘l bilan yaratish
Listlar Pythonning qudratli tuzilmasi. List comprehensionlar yordamida oddiy for sikli bilan yozilgan kodni qisqa, o‘qilishi oson shaklga kiritamiz. Ular tez-tez ro‘yhatlardan filtrlar qo‘llash, ma’lumotlar ustida transformatsiya qilish uchun ishlatiladi. Shunchaki mos yozuvlar va ifoda bilan bir nechta satrda mavjud natijaga erishamiz. Bu usul kodni 2x tezroq yozish imkonini berdi, ayni paytda tushunarli bo‘lib qoladi. 😊
Misol: biz 1 dan 20 gacha bo‘lgan sonlardan faqat juft sonlarni topamiz. Oddiy for sikli o‘rniga list comprehensiondan foydalanamiz. Natija toza ro‘yxat bo‘lib, har bir element o‘z o‘rnida saqlanadi.
# juft sonlar ro'yxatini qisqa shaklda olish
numbers = range(1, 21)
evens = [n for n in numbers if n % 2 == 0]
print(evens)
Output:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Bu yerda n — har bir element, for n in numbers — ro‘yxat bo‘ylab aylanadi, if n % 2 == 0 esa shart. Agar talab bo‘lsa, hamma noldan tashqari qiymatlar ham qo‘shilishi mumkin. Masalan, har bir raqamning kvadratini olish uchun [n**2 for n in numbers] yozamiz. Qisqa, samarali, xuddi shunga o‘xshash transformatsiyalar uchun list comprehensionlar juda mos keladi. ✅
Savol: Sizda list comprehension bilan qaysi holat eng foydali bo‘ldi? Yoki oddiy for sikli bilan ishlashni afzal ko‘rasizmi? Fikrlaringizni yozib qoldiring. 👇
Sarlavha: Python bilan Fayllar bilan Ishlash — oddiy misol: matn faylini o‘qib yozish va o‘zgartirish 📂🐍
Mavzu qisqacha tushuntirish: Fayllar bilan ishlash — Pythonning asosiy ko‘nikmalaridan. Bu misolda biz matn faylini o‘qib, har bir qatorni o‘zgartirib yangi faylga yozamiz. Amaliyot faylga yozish/oqish asoslarini amalda ko‘rsatadi, ya'ni real dunyodagi loglar, natijalar yoki matn fayllarini avtomatik tayyorlash uchun qulay. Quyidagi kod yordamida biz avvalo namunaviy fayl yaratamiz, undan o‘qib, satrlarni o‘zlashtirib yozamiz, so‘ng natijani ko‘rsatamiz. Muammo yoqsa o‘zgartirib, o‘z ish jarayonlaringizga moslashtirishingiz mumkin. ⚙️🔍
Kod misoli (real va ishlaydigan):
# 1) Namuna matn faylini yaratamiz
sample_lines = [
"Assalomu alaykum!",
"Bu misolda fayl bilan ishlash bo‘yicha oddiy amaliyot ko'rsataman.",
"Har bir qatorni o'zgartirish uchun Python kodini yozamiz."
]
with open('sample.txt', 'w', encoding='utf-8') as f:
f.write("\n".join(sample_lines))
# 2) Faylni o‘qish, har bir qatorni yuqori balandlikka o‘zgartirish
with open('sample.txt', 'r', encoding='utf-8') as f:
lines = f.read().splitlines()
# 3) Qatorlarni o'zgartirish va yangi faylga yozish
processed = [f"{i+1}. {line.upper()}" for i, line in enumerate(lines)]
with open('out.txt', 'w', encoding='utf-8') as f:
f.write("\n".join(processed))
# 4) Natijani chiqarishga tayyorgarlik
print("Natija:")
print("\n".join(processed))
Kod natijasi (Output):
1. ASSALOMU ALAYKUM!
2. BU MISOLDA FAYL BILAN ISHLASH BO‘YICHA ODDIY AMALIYOT KO'RS ATAMAN.
3. HAR BIR QATORNI O'ZGARTIRISH UCHUN PYTHON KODINI YOZAMIZ.
Sizningcha, fayl bilan ishlash jarayonlarini automatlashtirish uchun yana qaysi amallarni (masalan, filtrlash, qatorlarni indekslash, kodlashtirish o‘zgartirish) qo‘shishni istardingiz? Commentsda o‘zingizga mos misollarni yozing yoki loyihaingizdagi eng qiyin fayl-salonini tasvirlab bering! 💬🤖
Sarlavha: List comprehension bilan Python ro‘yxatlarini tez hosil qilamiz 📋 (List comprehension)
Nazariy tushuntirish:
- List comprehension — Python’da ro‘yxatlarni soddaroq va tez yaratish vositasi.
- Oddiy for loop o‘rniga bitta qator ifodada yozish mumkin.
- Üstiga shartlar qo‘yish, har bir elementga amallarni qo‘llash mumkin.
- Kod o‘qilishi oson, samaradorlik esa yuqori bo‘ladi.
Amaliy kod misoli:
# 0 dan 9 gacha bo‘lgan sonlarning juftlarini kvadratlari ro'yxatini yarataylik
juft_kvadratlar = [x*x for x in range(10) if x % 2 == 0]
print(juft_kvadratlar)
Kod natijasi (Output):
Output: [0, 4, 16, 36, 64]
Savol (obunachilardan fikr): List comprehensionni yanada qiyinroq holatda qanday qo‘llash mumkin? Masalan, matnlar ro‘yxatidan faqat uzun bo‘lmaganlarini va har birini bosh harf bilan yashirishsiz chiqarish usullari bormi? Siz qaysi misollarni ko‘proq yoqtirasiz? 💬
6) CSV fayllar bilan ishlashning oddiy yo‘li 📁✨
CSV — yengil formatdagi ma’lumotlar jadvali. Python bilan uni o‘qish, yozish tez va sodda. csv moduli yordamida har xil qatorlarni oson parchalab, yangilarini qo‘shish mumkin. Agar katta ma’lumotlar bo‘lsa, pandas yordami bilan ham samarali ishlash mumkin, lekin oddiy vaziyatlar uchun csv – juda qulay.
Quyida oddiy misol: ro‘yxatdan olingan foydalanuvchilarni CSV ga yozamiz, so‘ngra o‘qib chiqamiz. Bu amaliyot sizga “ma’lumotlar orkestratsiyasi” haqida tushuncha beradi va real loyihalarda tez yordam beradi.
import csv
# 1) Yozish
data = [
{"name": "Ali", "age": 30, "city": "Toshkent"},
{"name": "Dilfuza", "age": 25, "city": "Samarqand"},
{"name": "Kamola", "age": 28, "city": "Buxoro"},
]
with open("users.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["name", "age", "city"])
writer.writeheader()
for row in data:
writer.writerow(row)
# 2) O'qish
with open("users.csv", "r", newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
Chiqqan natija (Output):
{'name': 'Ali', 'age': '30', 'city': 'Toshkent'}
{'name': 'Dilfuza', 'age': '25', 'city': 'Samarqand'}
{'name': 'Kamola', 'age': '28', 'city': 'Buxoro'}
Yakuniy fikr: CSV bilan ishlash yuzaki ma’lumotdan to‘g‘ri formatga o‘tishda keng qo‘llanadi. Sizincha, real loyihalarda CSV ning qirg‘og‘idan qaysi holatlarda Pandas ga o‘tish maqbulroq? Aytib berishingiz mumkinmi?
7️⃣ Listlar bilan ishlash: map, filter va lambda — qulay yo‘l
Bugungi mavzu tez yozish va aniq filtrlar uchun kuchli vosita: map, filter va lambda. Python’da ro‘yxat (list) ustida elementlar bo‘yicha amallarni soddalashtirolishingiz mumkin. map yordamida har bir elementga funksiyani qo‘llaysiz, filter esa shartga mos kelgan elementlarni tanlab oladi, lambda esa kichik anonim funksiyani tez yozishga yordam beradi. Shuning uchun murakkab sikllarsiz ham o‘zgaruvchilarni oson ishlatishingiz mumkin. Biroq o‘qilishi yomon bo‘lmasin deya, ko‘proq o‘qinganlar uchun list comprehensions ham qulay alternativadir. Bugun map, filter va lambda’lardan bir nechta amalda misol ko‘raylik.
# 1) ro'yxatdagi sonlarning kvadratlarini olamiz
nums = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x * x, nums))
# 2) faqat juft sonlarni tanlab olish
evens = list(filter(lambda x: x % 2 == 0, nums))
# 3) qisqa ma’lumotlar: nomlar ro'yxatidagi uzunliklarini topish
names = ["Ali", "Zarina", "Diyor"]
lengths = list(map(len, names))
squared, evens, lengths
Output:
([1, 4, 9, 16, 25], [2, 4], [3, 6, 5])
Qanday hollarda lambda + map/filter foydali? YUQORI darajadagi funksiyani yozmasdan tez yozish kerak bo‘lsa yoki diskret transformatsiya (shu bilan birga o‘qilishi) kutilmasa. Shuningdek, o‘qinganlar uchun tushunarliligi yo‘lida list comprehension’larni ham ko‘rib chiqing — ba’zi hollarda o‘qilishi yaxshiroq bo‘ladi.
Sizningcha, siz ko‘proq qaysi usulga moyil bo‘lasiz: map/filter/lambda yoki ro‘yxat bo‘yicha tushunarli list comprehension? Qaysi misollarni kundalik vazifadagi ishlar uchun yoqtirasiz?
🔎 8️⃣ Mavzu: Python da Satrlarni Qisqartirish (slice) bilan Ro‘yhatlarni Kesish
Satrlar yoki ro‘yhatlar bilan ishlashda slicing (qirqib olish) eng qulay usul bo‘lib, indekslar orqali qismlarni oladi. Bu kichik vosita katta ma’lumotlar bilan tezda ishlashga yordam beradi. Masalan, biror matnning boshlanishini yoki oxirgi qismini ajratish uchun ishlatamiz. Slicing, manba: indekslashni o‘rganish – Pythonning kuchli qismi.
Quyida qisqa teoriya:
- Ro‘yhat yoki satrni qirqish uchun siqilgan notatsiya: object[start:stop:step].
- start - boshlanish indeksini, stop - yakun indeksini (shu indekstdan oldingi element) belgilaydi.
- Agar start yoki stop ko‘rsatilmasa, mos ravishda boshlanish yoki yakun “tizimga mos” bo‘ladi.
- Step bo‘lsa, har bir qadamda nechanchi element olinadi. Agar step manfiy bo‘lsa, teskari yondashuv ishlaydi.
Kod misoli (amaliy):
# misol: ro'yhatdan qismini olish
students = ["Ali", "Zarina", "Daler", "Nilufar", "Sohib", "Gul", "Anvar"]
# 1) Birinchi uch talabani olish
first_three = students[:3]
# 2) Ikkinchi uch talabani olish
middle_three = students[1:4]
# 3) Oxirgi ikkisini olish
last_two = students[-2:]
# 4) Har 2-qadamda olish (step)
every_second = students[::2]
# 5) Qaytadan teskari ro'yxat
reversed_list = students[::-1]
Kodni ishga tushirganda chiqishi (Output):
['Ali', 'Zarina', 'Daler']
['Zarina', 'Daler', 'Nilufar']
['Gul', 'Anvar']
['Ali', 'Daler', 'Sohib', 'Anvar']
['Anvar', 'Gul', 'Sohib', 'Nilufar', 'Daler', 'Zarina', 'Ali']
Og‘iz ochilishi: slicing bilan ro‘yhatlarni tezda ajratish, matnlar bilan ishlashda ham foydali bo‘ladi. Siz o‘zingiz boshlab-oylash uchun qaysi ro‘yhat ustida sinab ko‘rdingiz?
Savol: Satrlar ustida qirqishda qaysi yo‘lni eng ko‘p ishlatasiz va qaysi holatda stepni kamaytiradigan yoki oshiradigan holatlar bo‘ladi?
9️⃣ Listlar bilan ishlash: indeks bo‘yicha o‘zgartirish
🔎 Ko‘p hollarda ro‘yxat ichidagi biror elementni o‘zgartirishni istaysiz. Buning eng oddiy yo‘li – elementga uning index (indeks) orqali murojaat qilish. E’tibor bering: Python’da indeks 0 dan boshlanadi va indeks chegaradan chiqsa ValueError emas, xato ishlamay qoladi — shunga qarab tekshirish qilsak yaxshi. Quyidagi misolda 3-chiziqdagi qiymatni o‘zgartiramiz va natijani ko‘rsatamiz.
# Dastlabki ro'yxat
nums = [5, 12, 9, 33, 27]
print("Dastlabki ro'yxat:", nums)
# O'zgartirish uchun indeks
idx = 2 # 0,1,2 — 3-chi element
if 0 <= idx < len(nums):
nums[idx] = 99
else:
print("Xato: indeks ro‘yxatdan tashqarida")
print("Yangilangan ro'yxat:", nums)
Output
Dastlabki ro'yxat: [5, 12, 9, 33, 27]
Yangilangan ro'yxat: [5, 12, 99, 33, 27]
💡 Qisqa maslahatlar:
- Ro‘yxat o‘lchamini oldindan tekshirib qo‘yish xavfsiz variant.
- Bir nechta indeks bo‘yicha o‘zgarish uchun ro‘yhat bo‘ylab aylanma ishlatish ham mumkin (for yordami bilan).
Siz indeks bo‘yicha ro‘yxatni o‘zgartirishda qaysi yo‘lni afzal ko‘rasiz? Fikrlaringizni izohlarda yozing! 👇
1-mavzu: Funktsiyalar bilan Pythonni modularlashtirish
Python dasturlashda kodni kichik, mustaqil bloklarga bo‘lish funktsiyalar yordamida oson tushunishga va kengaytirishga yordam beradi. Funktsiyalar - bu berilgan ishni bajaradigan mustaqil qism bo‘lib, ular dasturdagi xatti-harakatlarni takrorlanmas qilishi, oson testlanishi va kerak bo‘lganda chaqirilishi uchun mo‘ljallangan. Ularning asosiy afzalliklari: kodni soddalash, qayta ishlash qobiliyati, xatoliklarni kamaytirish. Dastlabki qadam sifatida kichik funksiyalarni yozishni o‘rganish, ularni kerakli qiymatlar bilan chaqirish va natijani qaytarish qoidalarini tushunish muhimdir. Yaxshi yozilgan funktsiya o‘zini o‘zi tushuntiradigan nomga ega bo‘lishi, kirish parameterlarini aniq belgilashi va ichidagi logikani minimal darajada qamrab olishi kerak.
Quyidagi misolda oddiy funktsiya yordamida ism asosida salomlashuvni yaratish ko‘rsatiladi. Funksiya oldindan qat’iy nom orqali chaqiriladi, foydalanuvchi kiritgan nomni qabul qiladi va natijani qaytaradi. Bunday mantiqni kengaytirib, dasturda ko‘plab boshqa jarayonlar uchun ham moslashtirish mumkin: summalash, ro‘yxatni filtrlash, foydalanuvchi xolis xabarini yaratish va boshqalar.
def salom_ber(ism):
if not ism:
return "Salom, guliya olam!"
return f"Salom, {ism}!"
# Misol uchun chaqirish
ism_foydalanuvchi = "Dilshod"
natijani_qaytar = salom_ber(ism_foydalanuvchi)
print(natijani_qaytar) # 2-qator: Salom, Dilshod!
Salom, Dilshod!
Bugungi dars bo‘yicha savol: funktsiyalar yordamida dasturga yanada ko‘proq qismi uchun kichik qismi yozish qiyinchiliksizmi? Qanday turdagi funktsiyalarni avvalroq yozishni tavsiya qilardingiz: yordamchi funksiyalarmi yoki bajaruvchi funksiyalarmi?
2-mavzu: Python bilan Telegram kanalda kod yozishni o’rganing
Тeztan o’rganish jarayonida Python dasturlarning yagona vazifasi - ma’lumotni to’g’ri shaklda qabul qilib, foydalanuvchiga foydali natijalarni chiqarishdir. Telegram kanalda foydalanuvchilar bilan samarali muloqotni tashkil etish uchun oddiy matn bilan birga ko’rsatuvli formatlash, xabarlarni tayyorlash va qisqa kod fragmentlari yordamida avtomatlashtirilgan javoblar yozish mumkin. Bu mavzuda biz funktsiyalar, tekshirish, f-strings kabi vositalarni qo’llab ko’rib, qanday qilib Python ekosistemasida samarali ish ko’rsatish mumkinligini ko’rib chiqamiz. Mavzu bo’yicha, kichik amaliy misol yordamida def yordamida funksiyani yaratish, print bilan natijani formatlash, shuningdek __name__ == "__main__" shabloni orqali soddalashgan yozuvni ko’rsatamiz. Bu yondashuv Telegram kanalida tez-tez uchraydigan auto-reply skriptlarning asosini tushunishga yordam beradi. Agar sizda oddiy bot-yordamchi yoki kanal xabari templati yozish g'oyasi bo’lsa, bu darsning oxirida berilgan misol sizga foydali bo’ladi. Bizning maqsad — uniform formatdagi kodlar bilan o’qishni osonlashtirish va Telegram Bot API bilan mos keladigan amaliyotga tayyorgarlik ko’rishdir.
def format_welcome(name: str) -> str:
"""
Foydalanuvchi ismi asosida ishga tushiriladigan xavfsiz va toza matn
hosil qiluvchi oddiy funksiya.
"""
greeting = f"Assalom, {name}! Python bilan Telegram kanalga xush kelibsiz."
tip = "Quyidagi qisqa kod misolida ko'rsatmalar yozuvini o'zgartirib, o'zingizga moslashtirishingiz mumkin."
return f"{greeting} {tip}"
def main():
user = "Ali" # odatda botdan yoki xabar ichidan olinadi
message = format_welcome(user)
print(message)
if __name__ == "__main__":
main()
Assalom, Ali! Python bilan Telegram kanalga xush kelibsiz. Quyidagi qisqa kod misolida ko'rsatmalar yozuvini o'zgartirib, o'z
Dekoratorlar bilan ishlash
Dekoratorlar Pythondagi funksiyalarni o‘zgartirmasdan ularga qo‘shimcha imkoniyatlar berish uchun ishlatiladi. Ular — noto‘g‘ri lokal holatni saqlab qolmasdan, kirish argumentlari, natijalar yoki hatoliklarni nazorat qilishning qulay yo‘li. Dekoratorlar yozuvlarni xotirada tozalab, kodni yanada modulyar qiladi. Buning uchun oddiy funktsiya yuqori darajadagi funksiyaga o‘raladi va o‘sha o‘ralgan funksiya sifatida uzatiladi.
def log_decorator(func):
def wrapper(*args, **kwargs):
print("Calling:", func.__name__)
result = func(*args, **kwargs)
print("Finished:", func.__name__)
return result
return wrapper
@log_decorator
def greet(name: str) -> str:
return f"Hello, {name}!"
print(greet("Alice"))
Hamma ishlar ishlashi uchun dekoratorlar funktsiyaga qo‘yilgan @ belgisidan foydalanadi. Bu yerda log_decorator funksiyasi wrapper nomli ichki funksiya orqali kirish argumentlari va natijani nazorat qiladi. Dekoratorni qo‘llash orqali biz har bir chaqiruvda qaysi nomli funksiyaning chaqirilganini, qachon yakunlangani kabi ma’lumotlarni huddi loglash kabi ko‘rsatamiz. Shuningdek, dekoratorlar argumentlar bilan moslashuvchan: parametrlari dinamik bo‘lgan funksiyalar uchun ham mos keladi.
Output:
Hello, Alice!
Calling: greet
Finished: greet
Hello, Alice!
Siz o‘zingiz uchun yangi dekorator yozmoqchi bo‘lsangiz, uning maqsadini aniqlab oling: xotirjam nazorat, caching, autentifikatsiya yoki vaqtchegarani qo‘shish bo‘lishi mumkin. Oddiyroq misolda dekorator yordamida funksiyani vaqt chegaralovchi qilib yozish mumkin—vaqt chegarasi o‘tdi deganda natijani qaytarmay ham qo‘yish mumkin. Qanday vazifa uchun dekorator yaratgan bo‘lardingiz va uning chegaralari qanday bo‘ladi?
4-mavzu: Dekoratorlar — Python’da funktsiyalarni kengaytirish
Dekoratorlar Python tilida funktsiyani o‘zgartirmasdan uning xatti-harakatini kengaytirishga imkon beradigan qudratli vosita. Oddiy qilib aytganda, decorator boshqa funktsiyani qamrab oladi va chaqirilganda uning ishini o‘zgartirib yuboradi. @decorator sintaksisi yordamida qayerda nima qo‘llanishini ko‘p hollarda osonlashtiradi: rejimni yozilishni kamaytiradi, loglash, kechikish, cached natijalar yoki instrumentatsiya uchun ajoyib usul. Shunchaki eslatib o‘tilsa, dekoratorlar yuqori darajada moslashuvchanlik beradi, lekin tushunishni qiyinlashtirmasligi uchun puxta o‘rganish kerak.
Quyidagi misolda oddiy bir dekorator yozamiz: funksiya chaqirilganda uning nomini chiqarib, keyin asl natijani qaytaradi. Bu orqali biz funktsiyalarning ishini kuzatish yoki yakuniy xatti-harakatni o‘zgartirmasdan faqat qo‘shimcha amallar qo‘shishimiz mumkin.
def log_calls(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__}")
return func(*args, **kwargs)
return wrapper
@log_calls
def greet(name):
return f"Salom, {name}!"
print(greet("Ali"))
Calling greet
Salom, Ali!
Sizningcha, dekoratorlar orqali qanday kengaytirilgan xatti-harakatlar (masalan, autentifikatsiya tekshiruvi, caching yoki o‘lchovlar) yozishni ko‘rib chiqqaningiz bormi?
1. Python bo‘yicha funksiyalar: argumentlar va qaytarish
Python funksiyalari kodi yozmasdan avval nima ish qilayotganini tushunishingiz kerak. Funksiya — bu oldindan nomlangan kodlar to‘plami, u bizga — ma’lum bir vazifani bajarish uchun chaqiriladi. Argumentlar yordamida funksiyaga ma’lumot uzatamiz, natija sifatida esa funksiyaning chiqishi (rekvizit) qaytariladi. Qaytarish operatori orqali siz qiymatlarni chaqiruvchi joyga yuborasiz; agar hech narsani qaytarmasangiz, natija None bo‘ladi. Yaxshi funksiyalar kichik vazifalarni bajaradi, ularni need bo‘lgan joylarda chaqirish oson bo‘ladi.
def multiply(a, b):
return a * b
print(multiply(3, 4))
12
Siz funksiyalar ichida boshqa funksiyalarni chaqira olasiz, shuningdek default argumentlar, ro‘yxat yoki lug‘at kabi murakkab ma’lumotlarni qabul qilishingiz mumkin. Default qiymatlar yordamida chaqirishni qulaylashtirasiz, ixtiyoriy argumentlar yoki o‘zgarmas holatlar bilan moslash imkoniyati paydo bo‘ladi. Kengroq nazariya uchun qisqa misollarga qaraylik: def area(radius, pi=3.14159): return pi * radius * radius. Bu yerda pi default qiymat sifatida berilgan, siz istasangiz almashtira olasiz.
def area(radius, pi=3.14159):
return pi * radius * radius
print(area(2))
print(area(2, 3.14))
12.56636
12.56
Savol: Siz funksiyalarni yozishda qanday vazifalarni oddiyroq qilib ko‘rib chiqasiz: argumentlar soni ko‘p bo‘lganmi yoki turli turlarda kiritiladigan ma’lumotlar?
2-mavzu: Funksiya va Classlar o'rtasidagi aloqalar
Python’da funksiyalar oddiy serialization (mustaqil blok) bo‘lsa-da, Classlar bilan ular birga kengaytirilgan ob’ektlar dunyosini yaratadi. Funksiya objectga kirish adresini beruvchi vosita bo‘lib, ob’ektlar ustida amal bajarishda yordam beradi. Class esa ma’lumotlarni saqlovchi va ularda bajariladigan amallarni “qizil” qilib belgilovchi tuzilma: xususiyatlar (attributes) va metodlar (methods). Shunda funksiyalar ko‘pincha Class metodlarining ichida yoki tashqi yordamchi sifatida ishlaydi. Quyida ular qanday birga ishlashini misol ko‘rsataman.
# Funksiya yordamida ob'ektlar ustida oddiy ish
def describe_area(width, height):
return width * height
# Classlar — obyektlar orasida aloqani tashkil etadi
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
rect = Rectangle(5, 7)
area_via_method = rect.area()
area_via_function = describe_area(rect.width, rect.height)
print(area_via_method) # 35
print(area_via_function) # 35
35
35
Yuqoridagi misolshuniqli: funksiya rectangle o‘lchamlarini qabul qilib, umumiy hisoblashni bajaradi; Class esa o‘zining area() metodi orqali hisoblashni kapsulyatsiya qiladi. Bu ikki yo‘l ham natijani beradi, lekin Classlar ob’ektlar bilan ko‘proq moslashadi va kelajakdagi kengayishga tayyor bo‘ladi. Sahnada siz o‘z modelingizga xos metodlarni qanday yozardingiz?
3) Asinxron kod yozish: asyncio bilan Python
Asinxron dasturlashda vazifalar parallel ravishda bajariladi va kontekstlar o‘rtasida fair scheduling amalga oshiriladi. asyncio kutubxonasi yordamida event loop quramiz, async funksiyalarni def o‘rniga async def bilan aniqlaymiz hamda await orqali uzluksiz kutishni boshqaramiz. Yaxshi amaliyot - IO yoki tarmoqli ishlar uchun asinxron namunalarni tanlash, bloklanadigan operatsiyalarni ko‘p kutish o‘rniga boshqa vazifalarni bajarishga yo‘l qo‘yish.
Mana oddiy misol: ikkita vazifa parallel ravishda bajarilishi uchun, ikki API so‘rovini simulyatsiya qilamiz va ularni asyncio.gather yordamida birga yig‘amiz. Bu nafaqat vaqtni tejaydi, balki resurslardan samarali foydalanishni ta’minlaydi. Dastur tuzilishi oddiy, lekin real dunyoda fayl o‘qish/yuklash, tarmoqli so‘rovlar kabi operasiyalarni yengillashtiradi.
import asyncio
import random
async def fetch_data(i):
dur = random.uniform(0.5, 1.5)
await asyncio.sleep(dur) # IO operatsiyasi o‘xshash kutish
return f"data_{i} (waited {dur:.2f}s)"
async def main():
tasks = [fetch_data(i) for i in range(1, 4)]
results = await asyncio.gather(*tasks)
print(results)
if __name__ == "__main__":
asyncio.run(main())
['data_1 (waited 0.72s)', 'data_2 (waited 1.03s)', 'data_3 (waited 0.89s)']
Asinxron dasturlashda eng ko‘p uchraydigan xatolar: bloklanadigan kodlarni to‘g‘ri ko‘rsatmaslik, await ni unutish, event loopni noto‘g‘ri boshqarish. Siz uchun eng qiyin bo‘lgan asinxron masala nima?
Ein offener öffentlicher Feed aus dem Suchindex
ChatCrawler — „Google für das öffentliche Telegram“; wird aktualisiert, während die Community gecrawlt wird.
Zeiten in UTC.