Isoqjanov Ilyos | Python
512 subscribers
34 photos
13 videos
2 files
60 links
🐍 Python bo'yicha o'zbek tilidagi sifatli materiallarni ko'paytirishda o'zing madadkor bo'lgin Allohim.

Shaxsiy blogim:
https://t.me/coldboot_blog

Admin:
@JurabekAbdusattarov,
@pythonwithcoldboot
Download Telegram
Hurmatli kanalimiz a'zolari biz jamoamiz bilan python dasturlash tilidagi o'zbekcha kontentlarni sekin asta ko'paytirishga o'z hissamizni qo'shmoqchimiz va o'rganuvchilarga oson va foydali bo'lishi uchun 3 ta kanal yaratganmiz. Va ular quyidagilar:

1) Umumiy kanal va bu kanalda faqat postlar va ular aralash holatda bo'ladi (boshlovchilar va tajribaga ega dasturchilar uchun):
https://t.me/simplypythonuz

2) Faqat boshlovchilar uchun yopiq kanal, bu kanalda boshlovchilar uchun postlar va batafsil tushuntirish uchun video darslar berib boriladi:
https://t.me/+4-HzPYPUWWw3NDEy

3)Tajribaga ega dasturchilar uchun yopiq kanal, va unda biroz murakkabroq mavzular, yangi imkoniyatlar, funksiyalar bo'yicha postlar va video darslar berib boriladi:
https://t.me/+G8Ao2nlAzBQ0ZGIy

Yana shuni aytish kerakki, ushbu umumiy kanalda qolgan ikkita kanaldagi postlar berib boriladi lekin video darslar berilmaydi!!!
Yaqinlarga ulashish esingizdan chiqmasin, biz boshladik😄
🔢 math.perm() metodi — Tartibli tanlovlar soni

Python'dagi math.perm() metodi — bu n elementdan tartib bilan va takrorlarsiz k element tanlashning nechta usuli mavjudligini hisoblab beradi.

📌 Sintaksis:


math.perm(n, k)


🟢 Bu yerda:
- n — tanlov qilinadigan umumiy elementlar soni
- k — tanlab olinadigan elementlar soni
- Natijada nPk ya’ni permutatsiya soni qaytariladi

🧪 Misollar:


from math import perm

print(perm(5, 3)) # Natija: 60
print(perm(10, 5)) # Natija: 30240


📍 1-misolda: 5 ta elementdan 3 tasini tartibli tanlash — 60 xil usulda.
📍 2-misolda: 10 ta elementdan 5 tasini tartibli tanlash — 30240 xil usulda.

⚠️ Eslatma: math.perm() funksiyasi Python 3.8 va undan yuqori versiyalarda mavjud.

🧠 Permutatsiyalar — kombinatorika, ehtimollar nazariyasi va algoritmlarda keng qo‘llaniladi.
📌 Eng katta umumiy bo‘luvchi (GCD)

Python'ning standart matematik kutubxonasida oddiy matematik hisob-kitoblarni ancha yengillashtiradigan foydali metodlar mavjud. Ulardan biri — gcd() metodi bo‘lib, u berilgan ikki sonning eng katta umumiy bo‘luvchisini (EKUB) hisoblab beradi.

🧮 Misol:


from math import gcd

print(gcd(36, 60)) # Natija: 12



Bu kod 36 va 60 sonlarining eng katta umumiy bo‘luvchisi — 12 ni chiqaradi.

📚 gcd() metodi Python'da math modulida joylashgan va Python 3.5 va undan keyingi versiyalarda mavjud.

🔢 EKUB hisoblash matematikada, algoritmlarda va kod optimallashtirishda keng qo‘llaniladi.
Assalomu alaykum, kunni ozgina bilim yoki takrorlash bilan boshlashga nima deysiz?

Bugun sizlar bilan python funksiyalarda keng qo'llaniladigan *args hamda **kwargs argumentlar haqida gaplashamiz.
Aytaylik siz, soni cheklanmagan miqdordagi raqamlar qabul qiladigan va ularning ko'paytmasini qaytaradigan funksiya yaratmoqchisiz. Bu masalaning bitta yechimi list dan foydalanish, lekin sizda undan ko'ra chiroyliroq yechim qilishga imkon bor. Bu *args dir.

def multiply(*numbers):
total = 1
for number in numbers:
total *= number
return total

result = multiply(1, 5, 2, 13, 15)

Ko'rib turganingizdek, ancha qulay.

Endi, **kwargs ga o'tsak, sizga argumentlarning faqat o'zgaruvchi qiymati emas, balki ularning nomi ham kerak bo'lsa **kwargs ni ishlatish ayni muddao.

def save_user(**user):
for key, value in user.items():
print(f"{key}: {value}")

save_user(name="John", age=31)

Sezganingizdek, **user argumenti bizga dict hosil qilib berdi, funksiya ichkarisida undan xohlaganimizdek foydalansak bo'ladi.

Foydali bo'ldi degan umiddaman. Kuningiz xayrli o'tsin!

@simplypythonuz
🧠 Python masala: Unikal so‘zlar sonini hisoblash

Masala:
Foydalanuvchidan satr (matn) qabul qiladigan funksiya yozing va shu satrdagi unikal (takrorlanmas) so‘zlar sonini qaytaring.
Satrda so‘zlar bo‘sh joy bilan ajratilgan, tinish belgilari olib tashlanishi kerak.

📌 Tushuntirish:
Ushbu kodda string.punctuation yordamida barcha tinish belgilari aniqlanadi va str.translate() orqali ularni satrdan tozalaymiz.
Keyin butun matnni kichik harflarga o'tkazib, bo‘sh joy bo‘yicha bo‘lib chiqamiz va set yordamida unikal so‘zlarni sanaymiz.


import string

def count_unique_words(text):
text = text.translate(str.maketrans('', '', string.punctuation))
words = text.lower().split()
return len(set(words))

count_unique_words("Hello, hello world!") # ➝ 2


⚙️ Optimallashtirishlar (Performance):

Regulyar ifodalar (regex) yordamida tinish belgilari va so‘zlarni aniqlash aniqroq bo‘ladi:


import re

def count_unique_words(text):
words = re.findall(r'\b\w+\b', text.lower())
return len(set(words))


print(count_unique_words("Hello, world! Hello again.")) # ➝ 3
print(count_unique_words("Python, Java. Python?")) # ➝ 2


Siz bu funksiyani yana qanday optimallashtirar edingiz?
💬 Fikringizni kommentda yozing!

https://t.me/simplypythonuz
📦 #Python | gzip moduli — fayllarni siqish va arxivdan chiqarish

gzip moduli — bu .gz formatdagi fayllar bilan ishlashni soddalashtiruvchi kuchli vosita. U orqali matnli fayllarni siqish (compress) yoki arxivdan chiqarish (decompress) mumkin.

🔹 Asosiy imkoniyatlari:

- Fayllarni .gz formatda siqish
- .gz fayllarni o‘qish va arxivdan chiqarish
- Oddiy baytlar massivini siqish/decompress qilish

📘 Misollar:
1. Faylni siqish (compress)

import gzip

with open('data.txt', 'rb') as f_in:
with gzip.open('data.txt.gz', 'wb') as f_out:
f_out.writelines(f_in)


2. Siqilgan .gz faylni ochish (decompress)

import gzip

with gzip.open('data.txt.gz', 'rb') as f:
content = f.read()
print(content.decode('utf-8'))


3. Matnni bevosita siqish va ochish

import gzip

original = b"Salom, dunyo!"
compressed = gzip.compress(original)
decompressed = gzip.decompress(compressed)

print(decompressed.decode()) # ➝ Salom, dunyo!


⚠️ Eslatma: Bu modul faqat .gz formatni qo‘llab-quvvatlaydi. compress, pack kabi bash buyruqlari yaratgan fayllar mos kelmaydi.

https://t.me/simplypythonuz
🖼 #Python | Pillow — Python’da rasm bilan ishlash kutubxonasi

Pillow — bu mashhur Python Imaging Library (PIL) kutubxonasining davomidir. U rasm fayllari bilan ishlashni soddalashtiradi va quyidagi ishlar uchun juda qulay:

🔹 Rasmni boshqa formatga o‘tkazish
🔹 Filtrlar qo‘llash
🔹 Rasmni aylantirish
🔹 Thumbnail (miniatura) yaratish
🔹 Bir nechta rasmni paketli tarzda qayta ishlash

Pillow kutubxonasini o‘rnatish:

pip install Pillow


📚 Batafsil hujjat: pypi.org/project/Pillow

🧪 Misol: Rasmdan foydalanish va uni ko‘rsatish

from PIL import Image

# Rasmni ochish
img = Image.open("rasm.jpg")

# O‘lchamini ko‘rsatish
print(img.size)

# Rasmni ko‘rsatish
img.show()


Pillow — ko‘p sonli rasmlar bilan avtomatik ishlash kerak bo‘lganda (masalan, watermark qo‘yish, format o‘zgartirish) juda mos keladi. 👌

https://t.me/simplypythonuz
Quyida Pillow kutubxonasi yordamida rasmga watermark (suv belgisi) qo‘yish bo‘yicha oddiy misol:

💧 Rasmga watermark qo‘yish (Pillow bilan)

from PIL import Image, ImageDraw, ImageFont

# Rasmni RGBA formatda ochish
image = Image.open("rasm.jpg").convert("RGBA")

# Watermark uchun bo'sh qatlam
txt_layer = Image.new("RGBA", image.size, (255, 255, 255, 0))

# Chizuvchi obyekt
draw = ImageDraw.Draw(txt_layer)

# Shrift (yo‘lni o‘zingiznikiga moslang)
font = ImageFont.truetype("arial.ttf", 40)

# Watermark matni va joylashuvi
text = "© PythonWithTheBest"
position = (20, image.size[1] - 60)

# Watermark rangi (masalan: qizil va 100% shaffoflik)
# Rang formati: (R, G, B, A) — A: opacity (0–255)
color = (255, 0, 0, 255) # Qizil

# Matnni chizamiz
draw.text(position, text, font=font, fill=color)

# Asosiy rasm va watermarkni birlashtiramiz
watermarked = Image.alpha_composite(image, txt_layer)

# Saqlaymiz
watermarked.convert("RGB").save("rasm_watermarked.jpg", "JPEG")


📝 E'tibor bering:
- arial.ttf o‘rniga tizimingizdagi mavjud shriftni yozing (/usr/share/fonts, C:\Windows\Fonts, yoki .ttf fayl yo‘li).
- fill=(255, 255, 255, 128) bu oq rangli, 50% shaffof watermark.
- alpha_composite — qatlamlarni shaffoflik bilan birlashtiradi.

Bu usul yordamida logotip, matn, yoki mualliflik huquqi belgilarini rasm ustiga oson qo‘yishingiz mumkin.

https://t.me/simplypythonuz
👍1
watermark qo'yishdan oldin
Yuqoridagi kod orqali watermark qo'yilgan ko'rinishi (watermark chap pastki burchakda qizil rang bilan).
#Python | Internetdan rasmni yuklab olish
Agar sizda rasmning URL manzili bo‘lsa, uni kompyuteringizga yuklab olish uchun quyidagi oddiy Python dasturidan foydalanishingiz mumkin:


import requests

# Rasm URL manzili
url = "https://example.com/image.jpg"

# HTTP so'rov yuborish
response = requests.get(url)

# Agar so'rov muvaffaqiyatli bo'lsa, faylni yozamiz
if response.status_code == 200:
with open("rasm.jpg", "wb") as file:
file.write(response.content)
print(" Rasm muvaffaqiyatli saqlandi.")
else:
print(" Rasmni yuklab bo‘lmadi.")


🧠 Eslatma:
- requests moduli Python’da vebdan ma’lumot olish uchun ishlatiladi.
- Fayl .jpg, .png, .webp formatlarda bo‘lishi mumkin — .content orqali rasm binar ko‘rinishda olinadi.
- Fayl nomini istalgancha o‘zgartirishingiz mumkin: rasm.jpgavatar.png va hokazo.

https://t.me/simplypythonuz
#Python | if shartlarini soddalashtiring
Ko‘p qiymatlarni tekshirish kerak bo‘lganda, if operatorlarini quyidagi kabi soddalashtirish mumkin:

Noto‘g‘ri (keraksiz uzun):

if x == 1 or x == 2 or x == 3:
    print("Topildi")


To‘g‘ri (soddaroq va aniq):

if x in (1, 2, 3):
    print("Topildi")


🧠 Foydali maslahat:
x in (1, 2, 3) — bu x ning 1, 2 yoki 3 ga teng ekanini tekshiradi. Kodni o‘qish osonlashadi va yozish tezlashadi.

Bunday soddalashtirishlar kodni toza, ixcham va tushunarli qilishga yordam beradi 💡

https://t.me/simplypythonuz
2
🧼 #Python | Ichki ro‘yxatlardan (nested lists) dublikatlarni o‘chirish
Ba'zida sizda shunday ro‘yxat bo‘ladi:

lists = [[1, 2], [3, 4], [1, 2]]


Va siz dublikatlarni olib tashlamoqchisiz. Ammo set dan to‘g‘ridan-to‘g‘ri foydalana olmaysiz, chunki list o‘zgaruvchan (unhashable) tur.

Oddiy va samarali yechim:

lists = [[1, 2], [3, 4], [1, 2]]

# Dublikatlarni olib tashlaymiz
unique_lists = [list(t) for t in set(tuple(lst) for lst in lists)]

print(unique_lists)
# ➝ [[1, 2], [3, 4]]


🎯 Xulosa:
- Har bir ichki ro‘yxatni tuple ga aylantiring — ular set ichida ishlaydi
- set bilan dublikatlarni yo‘q qiling
- Natijani qayta list ga aylantiring

📌 Natija: tejamkor, tez va sikllarsiz kod

https://t.me/simplypythonuz
🔍 #Python | unhashable nima degani?
Pythonda set, dict kabi xotirada tartiblanadigan ma’lumotlar tuzilmalari (hash table) faqat hashable obyektlar bilan ishlay oladi.

Hashable — bu o‘zgarmas (immutable) obyektlar, masalan:
int, float, str, tuple (agar ichida hamma narsa hashable bo‘lsa)


x = (1, 2)
set([x])  # Ishlaydi


Unhashable — bu o‘zgaruvchan (mutable) obyektlar, masalan:
list, dict, set — bu obyektlar set yoki dict kaliti sifatida ishlatilmaydi.


x = [1, 2]
set([x])  # TypeError: unhashable type: 'list'


💡 Nega bu muhim?
Agar siz list larni set ichiga solmoqchi bo‘lsangiz, avval ularni tuple ga o‘giring:

lists = [[1, 2], [3, 4], [1, 2]]

# list → tuple → set → list
unique = [list(t) for t in set(tuple(x) for x in lists)]
print(unique)


🧠 Xulosa:

- hashable → o‘zgarmas, set va dict uchun ishlaydi.
- unhashable → o‘zgaruvchan, to‘g‘ridan-to‘g‘ri set ga qo‘shib bo‘lmaydi.

https://t.me/simplypythonuz
🔁 Counter.elements() metodi — Python'da foydali imkoniyat!

Counter.elements() — bu metod har bir elementni uning soniga qarab takrorlab, iterator ko‘rinishida qaytaradi.

Har bir element o‘z qiymati (soni) nechta bo‘lsa, shuncha marta chiqariladi.
Tartib saqlanadi — ya'ni elementlar Counter yaratilganidagi ketma-ketlikda bo‘ladi.
🚫 Agar element qiymati 1 dan kam bo‘lsa, u umuman chiqarilmaydi.

📌 Misol:


from collections import Counter

cnt = Counter({'a': 3, 'b': 1, 'c': 0})
print(list(cnt.elements()))
# Natija: ['a', 'a', 'a', 'b']


Python'da ma'lumotlar bilan ishlashni osonlashtiruvchi usullardan biri 💡
Xayrli tong! So'ngi paytlarda python olamidagi eng katta o'zgarishlardan biri bu uv bo'lsa kerak.
Menimcha ko'pchilik duch kelayotgan yoki ishlatishni boshlagan ushbu vosita haqida ozgina ma'lumot bersak foydadan holi bo'lmaydi. Demak boshladik:

uv bu Rust dasturlash tilida yozilgan, pip, venv, piptools va boshqa shunga o'xshash kutubxonlarning o'rnini bosa oladigan python kutubxonasidir.

Uning eng asosiy afzalligi tezlik bo'lib, pip dan 100 karragacha tezroq ishlashi mumkin.

Ha, tushunganingizdek butun dunyo pip install dan voz kechib uv add ga kamida uv pip install ga o'tmoqda.

Tezlikdan tashqari, uv ancha qulayhamdir.
Masalan, biz o'rgangan pip, venv dan foydalanib biron loyiha yaratishda avval venv yordamida virual muhit yaratiladi, pip install yordamida kerakli kutubxonalar qo'shiladi, requirements.txt to'ldirilib boriladi va hokazo.

uv
yordamida esa:

uv init .
uv add <package_name>


va hammasi tayyor! pyproject.toml fayli orqali barcha kutubxonalar ro'yxati yuritiladi. Kutubxonalarni ushbu faylga yozib/o'chirib uv sync buyrug'i yozilsa, kutubxonalar avtomatik o'rnatiladi/o'chiriladi.

Bundan tashqari, uv da loyiha uchun alohida, bitta script uchun alohida yondashuv qilingan.
Qisqa qilib aytganda juda qulay.

Quyida ushbu vositani foydalanish uchun asosiy buyruqlar keltirilgan:

Python versiyasini o'rnatish:

uv python install 3.8

Scriptni ishga tushirish:

uv run main.py

Scriptni ishga tushirishda python versiyani belgilash:

uv run —python 3.9.21 main.py

Scriptni ishga tushirishda biron kutubxonani (ushbu buyruqda rich va requests) o'rnatib ishga tushirish:

uv run —with rich —with requests —python 3.9 main.py

Scriptni ishga tushirishda kerak bo'ladigan python versiya hamda kutubxonlarni scriptning o'zida belgilab qo'yish:

uv init —script main.py —python 3.9.21
uv add —script
main.py "rich"
uv add —script
main.py "requests"

Faqat bitta script emas, Loyiha boshqaruvi uchun buyruqlar:

uv init . # Kerakli fayllarni yaratadi.

uv add rich
# rich kutubxonasini venv direktoriyasiga o'rnatadi hamda pyproject.toml ni yangilaydi

uv remove rich
# rich rich kutubxonasini venv direktoriyasidan o'chiradi hamda pyproject.toml ni yangilaydi

uv sync
# pyproject.toml, .python-version bilan venv o'rtasida sinxronizatsiyani amalga oshiradi.

Boshqa ma'lumotlarni quyidagi havola orqali ko'rib olishingiz mumkin.

Izohlarda fikringizni qoldiring, foydali deb hisoblasangiz boshqalarga ham ulashishni unutmang.

Kuningiz xayrli o'tsin!

@simplypythonuz
👍31
🔍 Python'dagi difflib — matnlar o‘rtasida o‘xshashlikni topish!

Python juda foydali bo‘lgan difflib kutubxonasini taqdim etadi. U orqali matnlardagi o‘xshashliklarni topish mumkin — ayniqsa, so‘zlar orasidan eng yaqinlarini tanlash kerak bo‘lsa, juda qulay.

📘 Misol:

import difflib

words = ["apple", "ape", "appeal", "par", "parade"]

print(difflib.get_close_matches("appel", words))
# ➝ ['appeal', 'apple', 'ape']


🔎 "appel" so‘ziga eng o‘xshashlari qaytarildi. Bu difflib.get_close_matches() funksiyasi orqali bo‘ldi.

Yana misollar:

print(difflib.get_close_matches("pa", words))
# ➝ ['par']

print(difflib.get_close_matches("par", words))
# ➝ ['par', 'parade']

"parade" boshlanishi "par" ga o‘xshaganligi sababli chiqarildi.

🚀 Juda oddiy, lekin kuchli vosita!

https://t.me/simplypythonuz
👍4
⏱️ Python'da mikrosekundgacha aniqlik — datetime.strptime() bilan!

Agar siz loglar, metrikalar yoki vaqt qatorlari bilan aniq vaqt bilan ishlayotgan bo‘lsangiz, datetime.strptime() metodida "%f" formatini unutmang!

📌 Misol:

from datetime import datetime

dt = datetime.strptime('2024-06-18 12:34:56.789123', '%Y-%m-%d %H:%M:%S.%f')
print(dt)  # ➝ 2024-06-18 12:34:56.789123


📅 Formatlar:

%Y — yil (4 raqam)
%m — oy
%d — kun
%H — soat (24 soatlik format)
%M — daqiqa
%S — soniya
%f — mikrosekund ⚡️

🧠 Bu — vaqtni yuqori aniqlikda tahlil qilishda ayni muddao!

https://t.me/simplypythonuz
👍1
🧊 Lug‘atdan xavfsiz qiymat olish — .get() yordamida!

Ba'zida lug‘atdan (dict) qiymat olish kerak bo‘ladi, lekin kalit mavjud emas bo‘lishi mumkin. Bunday hollarda if yozib tekshirish o‘rniga — .get() metodidan foydalaning

📌 Misol:

data = {"name": "Ali"}

# Xavfsiz tarzda qiymat olish
age = data.get("age", 0) # Agar "age" yo‘q bo‘lsa, 0 qaytadi


🚫 data["age"] — bu xatolik beradi, agar kalit yo‘q bo‘lsa.
data.get("age", 0) — xatolik bo‘lmaydi, default qiymat qaytadi.

🎯 Natija:
.get() metodi kodni toza, xavfsiz va o‘qilishi oson qiladi — ayniqsa ixtiyoriy yoki noma'lum ma'lumotlar bilan ishlaganda!

https://t.me/simplypythonuz