16-ámeliy jumıs: Python programmalastırıw tilinde funkciyalar

1. Funkciya haqqında ulıwma túsinik:
Funkciya - belgili bir wazıypanı orınlaw ushın arnalǵan kod blokı. Ol kodtı qayta-qayta jazıwdan qutqaradı hám kodtı strukturalaydı.
2. Funkciyani járiyalaw sintaksisi:
def funkciya_atı(parametr1, parametr2, ...):
    # funkciya denesi
    # orınlanatuǵın kodlar
    return nátiyje  # qaytarılatuǵın mánisi (optional) 

3. Funkciya túrleri:
a) Parametrsiz funkciya:
def sálem_ber():
    print("Sálem, dúnya!")

sálem_ber()  # funkciyani shaqırıw

b) Parametrli funkciya:
def qosıw(a, b):
    nátiyje = a + b
    return nátiyje

summa = qosıw(5, 3)  # nátiyje: 8

c) Default parametrli funkciya:
def sálemle(at="Qonaq"):
    print(f"Sálem, {at}!")

sálemle()  # "Sálem, Qonaq!"
sálemle("Ali")  # "Sálem, Ali!" 

4. Return operatorı:
def kvadrat(san):
    return san ** 2

nátiyje = kvadrat(4)  # nátiyje: 16

5. Kóp mánisli return:
def esaplaw(san):
    kvadrat = san ** 2
    kub = san ** 3
    return kvadrat, kub

kvad, kb = esaplaw(3)  # kvad = 9, kb = 27

6. args hám kwargs:
a) *args - bir neshe poziciyalıq argumentler:
def jámi(*sanlar):
    return sum(sanlar)

nátiyje = jámi(1, 2, 3, 4)  # nátiyje: 10

b) **kwargs - bir neshe gilt sózli argumentler:
def student_maǵlıwmat(**maǵlıwmat):
    for gilt, mánis in maǵlıwmat.items():
        print(f"{gilt}: {mánis}")

student_maǵlıwmat(at="Ali", jas=20, kurs=2) 

7. Lambda funkciyası:
# Ápiwayı funkciya
kvadrat = lambda x: x ** 2
nátiyje = kvadrat(5)  # nátiyje: 25

8. Ámeliy mısallar:
1-mısal: Faktorial esaplaw funkciyası:
def faktorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * faktorial(n-1)

print(faktorial(5))  # nátiyje: 120

2-mısal: Dizimdi filtrlaw funkciyası:
def jup_sanlar_filtr(dizim):
    jup = []
    for san in dizim:
        if san % 2 == 0:
            jup.append(san)
    return jup

sanlar = [1, 2, 3, 4, 5, 6]
print(jup_sanlar_filtr(sanlar))  # nátiyje: [2, 4, 6] 

3-mısal: Tekst processingi:
def sóz_analiz(tekst):
    sózler = len(tekst.split())
    háripler = len([x for x in tekst if x.isalpha()])
    return {
        "sózler_sanı": sózler,
        "háripler_sanı": háripler
    }

tekst = "Python - júdá jaqsı programmalastırıw tili"
print(sóz_analiz(tekst)) 

4-mısal: Dekorator funkciya:
def dekorator(func):
    def wrapper():
        print("Funkciya baslanbaqta...")
        func()
        print("Funkciya juwmaqlandı...")
    return wrapper

@dekorator
def sálem():
    print("Sálem, dúnya!")

sálem()

9. Funkciya scope (kólem):
global_ózgeriwshi = 10

def funkciya():
    local_ózgeriwshi = 5
    print(local_ózgeriwshi)
    print(global_ózgeriwshi)

funkciya()
# print(local_ózgeriwshi)  # qátelik beredi

10. Dokumentaciya (docstring):
def qosıw(a, b):
    """
    Eki sandı qosıw funkciyası.
    
    Parametrler:
    a (int): birinshi san
    b (int): ekinshi san
    
    Returns:
    int: eki sannıń qosındısı
    """
    return a + b

print(qosıw.__doc__)  # funkciya dokumentaciyasın kórsetiw

11. Ámeliy qollanıw usınısları:
1. Funkciya atların túsinikli etip qoyıń
2. Hár bir funkciya tek bir wazıypanı orınlasın
3. Funkciyalar dokumentaciyasın jazıń
4. Funkciya nátiyjesin tekserip kóriń
5. Global ózgeriwshilerdi minimallastırıń
Funkciyalar - programmanı strukturalaw hám kodtı qayta qollanıw ushın áhmiyetli qural. Bul teoriyalıq hám ámeliy mısallar funkciyalar menen islewdiń tiykarǵı aspektlerin qamtıp aladı.

ÁMELIY MÍSALLAR
1. Kalkulyator funkciyası:
def kalkulyator(san1, san2, operaciya):
    """Ápiwayı kalkulyator funkciyası"""
    if operaciya == '+':
        return san1 + san2
    elif operaciya == '-':
        return san1 - san2
    elif operaciya == '*':
        return san1 * san2
    elif operaciya == '/':
        if san2 != 0:
            return san1 / san2
        return "Nolge bóliw múmkin emes"

# Qollanıw
print(kalkulyator(10, 5, '+'))  # 15
print(kalkulyator(10, 5, '-'))  # 5
print(kalkulyator(10, 5, '*'))  # 50
print(kalkulyator(10, 5, '/'))  # 2.0

2. Parol generatorı:
import random
import string

def parol_jasaw(uzınlıq=8):
    """Qáwipsiz parol jaratıw funkciyası"""
    háripler = string.ascii_letters  # a-z, A-Z
    sanlar = string.digits  # 0-9
    belgi = string.punctuation  # !@#$%^&*()
    
    barlıq_simvollar = háripler + sanlar + belgi
    parol = ''.join(random.choice(barlıq_simvollar) for _ in range(uzınlıq))
    return parol

# Qollanıw
print(parol_jasaw())  # 8 simvollı parol
print(parol_jasaw(12))  # 12 simvollı parol

3. Tekst analizi:
def tekst_analiz(tekst):
    """Tekstti analiz qılıw funkciyası"""
    nátiyje = {
        'uzınlıq': len(tekst),
        'sózler_sanı': len(tekst.split()),
        'úlken_hárip': sum(1 for x in tekst if x.isupper()),
        'kishi_hárip': sum(1 for x in tekst if x.islower()),
        'sanlar': sum(1 for x in tekst if x.isdigit())
    }
    return nátiyje

# Qollanıw
tekst = "Python 3 - júdá jaqsı programmalaw tili!"
print(tekst_analiz(tekst)) 

4. Studentler bazası:
def student_qosıw(bazaǵa, atı, jasі, bahalar):
    """Studentti bazaǵa qosıw"""
    student = {
        'atı': atı,
        'jasі': jasі,
        'bahalar': bahalar,
        'ortasha': sum(bahalar) / len(bahalar)
    }
    bazaǵa.append(student)
    return bazaǵa

def studentlerdi_kórsetiw(baza):
    """Barlıq studentlerdi kórsetiw"""
    for student in baza:
        print(f"Atı: {student['atı']}")
        print(f"Jasі: {student['jasі']}")
        print(f"Ortasha bahası: {student['ortasha']}")
        print("-" * 20)

# Qollanıw
studentler = []
studentler = student_qosıw(studentler, "Ali", 20, [85, 90, 92])
studentler = student_qosıw(studentler, "Ayjan", 19, [95, 88, 91])
studentlerdi_kórsetiw(studentler) 

5. Waqıt konvertaciyası:
def sekund_konvertaciya(sekund):
    """Sekundlardı saatqa, minutqa hám sekundqa aylandırıw"""
    saat = sekund // 3600
    minut = (sekund % 3600) // 60
    qalǵan_sekund = sekund % 60
    
    return f"{saat}s {minut}m {qalǵan_sekund}s"

# Qollanıw
print(sekund_konvertaciya(3665))  # 1s 1m 5s

6. Dizimdi sortlaw hám filtrlew:
def dizim_qayta_islew(dizim):
    """Dizimdi sortlaw hám jup sanların filtrlew"""
    jup_sanlar = list(filter(lambda x: x % 2 == 0, dizim))
    sortlanǵan = sorted(jup_sanlar, reverse=True)
    return sortlanǵan

# Qollanıw
sanlar = [1, 4, 2, 7, 8, 3, 6, 5]
print(dizim_qayta_islew(sanlar))  # [8, 6, 4, 2] 

7. Fayllar menen islew:
def fayl_jazıw(fayl_atı, maǵlıwmat):
    """Faylǵa maǵlıwmat jazıw"""
    with open(fayl_atı, 'w', encoding='utf-8') as f:
        f.write(maǵlıwmat)

def fayl_oqıw(fayl_atı):
    """Fayldan maǵlıwmat oqıw"""
    try:
        with open(fayl_atı, 'r', encoding='utf-8') as f:
            return f.read()
    except FileNotFoundError:
        return "Fayl tabılmadı"

# Qollanıw
fayl_jazıw("test.txt", "Python programmalastırıw tili")
print(fayl_oqıw("test.txt"))

8. Sanı jazıwda kórsetiw:
def san_sóz(san):
    """Sandı sóz túrinde jazıw"""
    birlikler = ["", "bir", "eki", "úsh", "tórt", "bes", "altı", "jeti", "segiz", "toǵız"]
    onlıqlar = ["", "on", "jigirma", "otız", "qırıq", "eliw", "alpıs", "jetpis", "seksen", "toqsan"]
    
    if san < 10:
        return birlikler[san]
    elif san < 100:
        on = san // 10
        bir = san % 10
        return f"{onlıqlar[on]} {birlikler[bir]}".strip()

# Qollanıw
print(san_sóz(45))  # qırıq bes
print(san_sóz(92))  # toqsan eki

9. Kalendardı esaplaw:
from datetime import datetime, timedelta

def kún_qosıw(kún, qosılatuǵın_kún):
    """Berilgen kúnge kún qosıw"""
    kún_datetime = datetime.strptime(kún, "%Y-%m-%d")
    jańa_kún = kún_datetime + timedelta(days=qosılatuǵın_kún)
    return jańa_kún.strftime("%Y-%m-%d")

# Qollanıw
print(kún_qosıw("2024-01-01", 45))  # 2024-02-15

Bul mısallardı másele sheshiwde qollanıw múmkin. Hár bir funkciya óziniń arnawlı wazıypasın orınlaydı hám qayta qollanıw múmkin. Funkciyalardı túrlendirip, parametrlerin ózgertip, jańa funkcionalıqtı qosıp kóriń.
Test
1. Pythonda funkciya qalay járiyalanadı?
A) function name():
B) def name():
C) new function():
D) create name():
Durıs juwap: B
2. Tómendegi funkciyada qanday qátelik bar?
def qosıw(a, b)
    return a + b

A) def sózi nadurıs jazılǵan
B) return ornına print bolıwı kerek
C) Izbe-izlikten keyin : (qos noqat) qoyılmaǵan
D) Parametrler nadurıs berilgen
Durıs juwap: C
3. Tómendegi kodtıń nátiyjesin tabıń:
def sálem(at="Qonaq"):
    return f"Sálem, {at}!"

print(sálem())

A) Sálem
B) Sálem, at!
C) Sálem, Qonaq!
D) Qátelik beredi
Durıs juwap: C
*4. args ne ushın qollanıladı?
A) Gilt sózli argumentlerdi qabıl etiw ushın
B) Bir neshe poziciyalıq argumentlerdi qabıl etiw ushın
C) Tek bir argument qabıl etiw ushın
D) Argumentlerdi filtrlew ushın
Durıs juwap: B
5. Tómendegi kodtıń nátiyjesin tabıń:
def test():
    x = 10
    return x

x = 5
test()
print(x) 

A) 10
B) 5
C) 15
D) Qátelik beredi
Durıs juwap: B
6. Lambda funkciyası haqqında qaysısı durıs?
A) Tek bir ret qollanılatuǵın funkciya
B) Kóp qatarlı funkciya
C) Bir qatarlı anonim funkciya
D) Klasstı járiyalaw usılı
Durıs juwap: C
7. Funkciyada return operatorı ne isleydi?
A) Funkciyadan shıǵıp ketedi
B) Funkciyadan mánisti qaytaradı
C) Funkciyanı qaytadan baslaydı
D) A hám B juwapları durıs
Durıs juwap: D
8. Tómendegi kodtıń nátiyjesin tabıń:
def sanlar(*n):
    return sum(n)

print(sanlar(1,2,3)) 

A) 123
B) 6
C) [1,2,3]
D) Qátelik beredi
Durıs juwap: B
9. Funkciya dokumentaciyası (docstring) qaysı simvollar menen jazıladı?
A) // kommentariya
B) # kommentariya
C) /* */ kommentariya
D) """ """ úsh qos tırnaq
Durıs juwap: D
10. Global ózgeriwshini funkciya ishinde qollanıw ushın ne islew kerek?
A) import global jazıw kerek
B) global gilt sózin qollanıw kerek
C) return arqalı qaytarıw kerek
D) Hesh nárse islew shárt emes
Durıs juwap: B
Juwaplar gilti:
1. B
2. C
3. C
4. B
5. B
6. C
7. D
8. B
9. D
10. B