August 20

Modul - Args / Kwargs

Modullar + Lambda, map() va filter()


1-dars: Modullar

1. Modul nima?

Modul — bu loyihangiz ichidagi alohida .py fayl. U ichiga funksiyalar va o‘zgaruvchilarni joylab, asosiy dasturdan “yashirish” imkonini beradi.

Afzalliklari:

  • Asosiy dastur qisqa va tushunarli bo‘ladi
  • Kodni boshqa loyihalarda qayta ishlatish mumkin
  • Boshqa dasturchilar bilan ulashish oson
  • Katta dasturlar odatda ko‘plab modullardan iborat bo‘ladi

2. Modul yaratish

Asosiy dastur faylini odatda main.py deb nomlash tavsiya etiladi. Funksiyalarni alohida faylga ko‘chiramiz.

Misol: talaba_mod.py nomli modul yaratamiz:

Python

def talaba_info(ism, familiya, yosh, kurs, guruh, stipendya=None):
    """Talaba ma'lumotlarini lug'at ko'rinishida qaytaruvchi funksiya"""
    talaba = {
        'ism': ism,
        'familiya': familiya,
        'yosh': yosh,
        'kurs': kurs,
        'guruh': guruh,
        'stipendya': stipendya
    }
    return talaba

def talaba_kirit():
    """Foydalanuvchidan bir nechta talaba ma'lumotlarini qabul qiluvchi funksiya"""
    talabalar = []
    while True:
        print("\nQuyidagi ma'lumotlarni kiriting:")
        ism = input("Ismi: ")
        familiya = input("Familiyasi: ")
        yosh = input("Yoshi: ")
        kurs = input("Kursi: ")
        guruh = input("Guruhi: ")
        stipendya = input("Stipendyasi (bo'sh qoldirish mumkin): ")
        
        talabalar.append(talaba_info(ism, familiya, yosh, kurs, guruh, stipendya))
        
        javob = input("Yana talaba qo'shasizmi? (ha/yo'q): ")
        if javob.lower() == "yo'q":
            break
    return talabalar

def info_print(talaba):
    """Talaba ma'lumotlarini chiroyli chiqaruvchi funksiya"""
    print(f"{talaba['ism'].title()} {talaba['familiya'].title()}, "
          f"{talaba['yosh']} yosh, {talaba['kurs']}-kurs, "
          f"{talaba['guruh']}-guruh, stipendya: {talaba['stipendya']}")

3. Modulni chaqirish usullari

1. Oddiy import

Python

import talaba_mod

talaba1 = talaba_mod.talaba_info("Ali", "Valiyev", 20, 2, "AI-21", 800000)
talaba_mod.info_print(talaba1)

2. Qisqa nom berish (as)

Python

import talaba_mod as tm

talaba1 = tm.talaba_info("Ali", "Valiyev", 20, 2, "AI-21", 800000)
tm.info_print(talaba1)

3. Kerakli funksiyalarni olish

Python

from talaba_mod import talaba_info, info_print

talaba1 = talaba_info("Ali", "Valiyev", 20, 2, "AI-21", 800000)
info_print(talaba1)

4. Funksiyalarga ham qisqa nom berish

Python

from talaba_mod import talaba_info as tinfo, info_print as iprint

talaba1 = tinfo("Ali", "Valiyev", 20, 2, "AI-21", 800000)
iprint(talaba1)

5. Barcha funksiyalarni olish (tavsiya etilmaydi)

Python

from talaba_mod import *
DIQQAT! Katta modullarda nomlar to‘qnashuvi bo‘lishi mumkin. Bu usuldan kamroq foydalaning.

4. Pythonning o‘zida bor modullar

math moduli

Python

import math

print(math.sqrt(400))       # 20.0
print(math.pow(5, 3))       # 125.0
print(math.pi)              # 3.141592653589793
print(math.log2(8))         # 3.0
print(math.log10(100))      # 2.0

Foydali funksiyalar: ceil(), floor(), fabs(), sin(), cos(), tan(), degrees(), radians()

random moduli

Python

import random as r

print(r.randint(1, 100))                # 1–100 oralig‘ida tasodifiy son

ismlar = ['Ali', 'Vali', 'Hasan', 'Husan']
print(r.choice(ismlar))                 # ro‘yxatdan tasodifiy element

sonlar = list(range(11))
r.shuffle(sonlar)                       # ro‘yxatni aralashtirish
print(sonlar)

2-mavzu: Lambda, map() va filter()

1. Lambda (nomsiz) funksiya

Lambda — vaqtinchalik, nomsiz funksiya. Faqat bitta ifoda bo‘lishi mumkin.

Sintaksis:

Python

lambda argumentlar: ifoda

Oddiy misollar:

Python

# Ikki sonni ko‘paytirish
kopaytir = lambda x, y: x * y
print(kopaytir(6, 7))           # 42

# Sonning kvadrati
kvadrat = lambda x: x ** 2
print(kvadrat(9))               # 81

# Matnni katta harfga o‘tkazish
katta = lambda matn: matn.upper()
print(katta("python"))          # PYTHON

Lambda qaytaruvchi funksiya:

Python

def daraja(n):
    return lambda x: x ** n

kvadrat = daraja(2)
kub = daraja(3)

print(f"4 ning kvadrati: {kvadrat(4)}")   # 16
print(f"4 ning kubi: {kub(4)}")           # 64

2. map() funksiyasi

map() — ro‘yxat (yoki boshqa iterable) elementlariga berilgan funksiyani qo‘llaydi.

Python

sonlar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Har bir sonni 3 ga ko‘paytirish
uch_baravar = list(map(lambda x: x * 3, sonlar))
print(uch_baravar)
# [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

# Har bir sonning kvadrati
kvadratlar = list(map(lambda x: x ** 2, sonlar))
print(kvadratlar)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Matnlar bilan:

Python

ismlar = ['ali', 'vali', 'hasan', 'husan', 'olim']
print(list(map(lambda ism: ism.title(), ismlar)))
# ['Ali', 'Vali', 'Hasan', 'Husan', 'Olim']

Ikki ro‘yxatni qo‘shish:

Python

a = [10, 20, 30]
b = [5, 15, 25]
yigindi = list(map(lambda x, y: x + y, a, b))
print(yigindi)   # [15, 35, 55]

3. filter() funksiyasi

filter() — ro‘yxatdan shartga mos elementlarni ajratib oladi. Funksiya True yoki False qaytarishi kerak.

Python

sonlar = [12, 7, 25, 18, 9, 30, 4, 21, 16, 11]

# Faqat juft sonlar
juftlar = list(filter(lambda x: x % 2 == 0, sonlar))
print(juftlar)   # [12, 18, 30, 4, 16]

# 15 dan katta sonlar
katta_sonlar = list(filter(lambda x: x > 15, sonlar))
print(katta_sonlar)  # [25, 18, 30, 21, 16]

Matnlar bilan:

Python

mevalar = ['olma', 'anor', 'anjir', 'shaftoli', "o'rik", 'tarvuz', 'qovun', 'banan']

# 'a' harfi bilan boshlanadiganlar
a_bilan = list(filter(lambda meva: meva.startswith('a'), mevalar))
print(a_bilan)

# Uzunligi 5 yoki undan kam bo‘lganlar
qisqa = list(filter(lambda meva: len(meva) <= 5, mevalar))
print(qisqa)

Kitoblar misoli:

Python

kitoblar = [
    "Python asoslari",
    "JavaScript to'liq kurs",
    "Ma'lumotlar bazasi",
    "Sun'iy intellekt",
    "Veb dasturlash",
    "Algoritmlar"
]

# "Python" so‘zi bor kitoblar
python_kitoblar = list(filter(lambda k: "Python" in k, kitoblar))
print(python_kitoblar)

# 15 harfdan uzun nomli kitoblar
uzun_nomlar = list(filter(lambda k: len(k) > 15, kitoblar))
print(uzun_nomlar)

Qisqa xulosa

Amaliy topshiriqlar

  1. talaba_mod.py modulidan foydalanib, 3 ta talaba ma’lumotini kiriting va chiqaring.
  2. Ro‘yxatdagi sonlardan faqat 3 ga bo‘linadiganlarini filter + lambda yordamida ajrating.
  3. Ismlar ro‘yxatidan faqat 4 harfli ismlarni ajrating.
  4. Kitoblar ro‘yxatidan nomi “dasturlash” so‘zini o‘z ichiga olganlarini toping.
  5. math va random modullaridan foydalanib, 5 ta tasodifiy son oling va ularning kvadrat ildizlarini hisoblang.

uy vazifasi:

Uy vazifasi

# Random moduli yordamida o‘yinlar ro‘yxati

Quyida random modulidan foydalanib qilish mumkin bo‘lgan oddiy va qiziqarli o‘yinlar ro‘yxati keltirilgan. Har biriga qisqa kod misoli qo‘shilgan.


1. Son topish o‘yini (Guess the Number)

Kompyuter 1 dan 100 gacha son o‘ylaydi, siz topasiz.

Python

import random

sirli_son = random.randint(1, 100)
urinish = 0

print("1 dan 100 gacha son o‘yladim. Toping!")

while True:
    taxmin = int(input("Sonni kiriting: "))
    urinish += 1
    
    if taxmin < sirli_son:
        print("Kattaroq son kiriting!")
    elif taxmin > sirli_son:
        print("Kichikroq son kiriting!")
    else:
        print(f"Tabriklayman! {urinish} ta urinishda topdingiz.")
        break

2. Tosh-qog‘oz-qaychi (Rock-Paper-Scissors)

Python

import random

variantlar = ["tosh", "qog'oz", "qaychi"]

while True:
    foydalanuvchi = input("tosh / qog'oz / qaychi (chiqish uchun 'exit'): ").lower()
    
    if foydalanuvchi == "exit":
        print("O‘yin tugadi!")
        break
    
    if foydalanuvchi not in variantlar:
        print("Noto‘g‘ri tanlov!")
        continue
    
    kompyuter = random.choice(variantlar)
    print(f"Kompyuter tanladi: {kompyuter}")
    
    if foydalanuvchi == kompyuter:
        print("Durrang!")
    elif (foydalanuvchi == "tosh" and kompyuter == "qaychi") or \
         (foydalanuvchi == "qog'oz" and kompyuter == "tosh") or \
         (foydalanuvchi == "qaychi" and kompyuter == "qog'oz"):
        print("Siz yutdingiz!")
    else:
        print("Kompyuter yutdi!")

3. Zar o‘yini (Dice Roll)

Python

import random

while True:
    input("Zar tashlash uchun Enter bosing...")
    zar = random.randint(1, 6)
    print(f"Tushgan son: {zar}")
    
    yana = input("Yana o‘ynaysizmi? (ha/yo'q): ").lower()
    if yana != "ha":
        break

4. Random ism tanlash (Ismlar o‘yini)

Python

import random

ismlar = ["Ali", "Vali", "Hasan", "Husan", "Guli", "Madina", "Jasur", "Dilnoza"]

print("Bugun navbatchi:")
print(random.choice(ismlar))

5. Kartalar o‘yini (Oddiy)

Python

import random

suitlar = ["♥", "♦", "♣", "♠"]
qiymatlar = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]

karta = f"{random.choice(qiymatlar)}{random.choice(suitlar)}"
print("Sizga tushgan karta:", karta)

6. So‘z topish o‘yini (Hangman ga o‘xshash oddiy variant)

Python

import random

sozlar = ["python", "dastur", "kompyuter", "algoritm", "funksiya", "modul"]
sirli_soz = random.choice(sozlar)
topilgan = ["_"] * len(sirli_soz)
urinishlar = 7

print("So‘zni toping!")
print(" ".join(topilgan))

while urinishlar > 0 and "_" in topilgan:
    harf = input("Harf kiriting: ").lower()
    
    if harf in sirli_soz:
        for i in range(len(sirli_soz)):
            if sirli_soz[i] == harf:
                topilgan[i] = harf
        print("To‘g‘ri!")
    else:
        urinishlar -= 1
        print(f"Noto‘g‘ri! Qolgan urinish: {urinishlar}")
    
    print(" ".join(topilgan))

if "_" not in topilgan:
    print("Tabriklayman! So‘zni topdingiz:", sirli_soz)
else:
    print("Yutqazdingiz. So‘z:", sirli_soz)

7. Random raqamlar bilan lotereya

Python

import random

print("6 ta omadli raqam:")
raqamlar = random.sample(range(1, 50), 6)
raqamlar.sort()
print(raqamlar)

8. Tosh-qog‘oz-qaychi (Kompyuter o‘zi o‘ynaydi)

Python

import random
import time

variantlar = ["tosh", "qog'oz", "qaychi"]

print("Kompyuter o‘zi o‘ynamoqda...")
time.sleep(1)

birinchi = random.choice(variantlar)
ikkinchi = random.choice(variantlar)

print(f"1-o‘yinchi: {birinchi}")
print(f"2-o‘yinchi: {ikkinchi}")

if birinchi == ikkinchi:
    print("Durrang!")
elif (birinchi == "tosh" and ikkinchi == "qaychi") or \
     (birinchi == "qog'oz" and ikkinchi == "tosh") or \
     (birinchi == "qaychi" and ikkinchi == "qog'oz"):
    print("1-o‘yinchi yutdi!")
else:
    print("2-o‘yinchi yutdi!")

Qisqa xulosa