Modullar: tayyor koddan foydalanish

Har safar hamma narsani noldan yozish shart emas. Dunyo bo'ylab dasturchilar minglab foydali funksiyalarni yozib, ularni modullarga joylashtirgan. Bu darsda ulardan foydalanishni o'rganamiz.

Bu darsda

  • Modul nima va import qanday ishlaydi
  • math — matematik funksiyalar
  • random — tasodifiy sonlar
  • datetime — sana va vaqt
  • O'z modulingizni yaratish va pip bilan tanishuv

Modul nima?

Modul — funksiyalar va o'zgaruvchilar saqlangan Python fayli. Python bilan birga yuzlab tayyor modullar keladi — ular standart kutubxona deyiladi. Python haqida «batareyalari bilan sotiladi» degan gap bor: ko'p vazifalar uchun kerakli vositalar qutidan chiqishi bilan tayyor.

Modul — asboblar qutisiga o'xshaydi. Uyda har bir ish uchun asbobni o'zingiz yasamaysiz: kerak bo'lganda omborxonadan bolg'a yoki otvertka olib kelasiz. import — mana shu «olib kelish».

import

Modulni ishlatish uchun avval uni import qilish kerak. Odatda bu dasturning eng yuqorisida yoziladi. Keyin modul ichidagi narsaga nuqta orqali murojaat qilinadi: modul.funksiya().

import math

print(math.sqrt(144))
print(math.pi)
print(math.ceil(4.1))
print(math.floor(4.9))
12.0
3.141592653589793
5
4
FunksiyaNima qiladiMisol
math.sqrt(x)Kvadrat ildizmath.sqrt(25) → 5.0
math.ceil(x)Yuqoriga yaxlitlashmath.ceil(4.1) → 5
math.floor(x)Pastga yaxlitlashmath.floor(4.9) → 4
math.piπ soni3.14159...
math.gcd(a, b)Eng katta umumiy bo'luvchimath.gcd(12, 18) → 6

math.ceil() hayotda juda qo'l keladi. Masalan, 47 nafar o'quvchini 12 o'rinli avtobuslarga joylash uchun nechta avtobus kerak? 47 / 12 = 3.9..., lekin 3.9 ta avtobus bo'lmaydi — 4 ta kerak:

import math

oquvchilar = 47
orinlar = 12
print("Avtobuslar:", math.ceil(oquvchilar / orinlar))

from ... import ...

Moduldan faqat kerakli narsalarni olib kelish mumkin. Bunda modul nomini har safar yozish shart emas:

from math import sqrt, pi

r = 5
print("Doira yuzi:", round(pi * r ** 2, 2))
print("Ildiz:", sqrt(2))

Modulga qisqa nom ham berish mumkin: import math as m — keyin m.sqrt(16) deb yoziladi. Bu usul nomi uzun modullar bilan ko'p ishlatiladi.

random — tasodifiy sonlar

O'yinlar, test savollarini aralashtirish, tasodifiy g'olibni aniqlash — bularning hammasi uchun random moduli kerak:

import random

print(random.randint(1, 6))          # 1 dan 6 gacha tasodifiy butun son (zar)
print(random.choice(["tosh", "qaychi", "qog'oz"]))
print(random.random())               # 0 va 1 orasidagi kasr son

kartalar = ["A", "K", "Q", "J", "10"]
random.shuffle(kartalar)              # ro'yxatni aralashtiradi
print(kartalar)

Kodni bir necha marta ishga tushiring — har safar natija boshqacha bo'ladi.

FunksiyaNima qiladi
random.randint(a, b)a dan b gacha tasodifiy butun son (b ham kiradi!)
random.choice(royxat)Ro'yxatdan tasodifiy bitta element
random.shuffle(royxat)Ro'yxatni aralashtiradi
random.sample(royxat, k)Ro'yxatdan takrorlanmaydigan k ta element
random.random()0 dan 1 gacha tasodifiy kasr son

range(1, 6) dan farqli o'laroq, randint(1, 6) da oxirgi son kiradi. Bu Python'dagi kam sonli istisnolardan biri — yodda tuting.

import random

ishtirokchilar = ["Aziz", "Bekzod", "Dilnoza", "Kamola", "Sardor", "Zuhra"]
golib = random.choice(ishtirokchilar)
print("Sovrin egasi:", golib)
print("Jamoa A:", random.sample(ishtirokchilar, 3))

datetime — sana va vaqt

datetime moduli bugungi sanani bilish, sanalar orasidagi farqni hisoblash va vaqtni formatlash imkonini beradi:

from datetime import date, datetime

bugun = date.today()
print("Bugun:", bugun)
print("Yil:", bugun.year, "Oy:", bugun.month, "Kun:", bugun.day)

hozir = datetime.now()
print("Soat:", hozir.strftime("%H:%M"))
print("Sana:", hozir.strftime("%d.%m.%Y"))

strftime() sanani kerakli ko'rinishga keltiradi: %d — kun, %m — oy, %Y — yil, %H — soat, %M — daqiqa.

Sanalar orasidagi farq

Ikki sanani ayirsak, ular orasidagi muddat chiqadi. Navro'zgacha necha kun qolganini hisoblaymiz:

from datetime import date

bugun = date.today()
navroz = date(bugun.year, 3, 21)
if navroz < bugun:                     # bu yilgi Navro'z o'tib ketgan bo'lsa
    navroz = date(bugun.year + 1, 3, 21)

qoldi = (navroz - bugun).days
print(f"Navro'zgacha {qoldi} kun qoldi!")

O'z modulingiz

Har qanday .py fayl — modul. Kompyuteringizda bir papkada ikkita fayl yarating:

yordamchi.py fayli:

def salomlash(ism):
    return f"Assalomu alaykum, {ism}!"

def juftmi(n):
    return n % 2 == 0

asosiy.py fayli (xuddi shu papkada):

import yordamchi

print(yordamchi.salomlash("Aziz"))
print(yordamchi.juftmi(10))

asosiy.py ni ishga tushirsangiz, Python yordamchi.py faylini topib, undagi funksiyalardan foydalanadi. Katta loyihalar aynan shunday — o'nlab va yuzlab fayllarga bo'lingan holda yoziladi.

O'z faylingizga standart modul nomini bermang: random.py, math.py. Aks holda import random standart modul o'rniga sizning faylingizni ochadi va g'alati xatolar chiqadi.

pip: dunyo bo'ylab yozilgan kutubxonalar

Standart kutubxonadan tashqari, internetda yuz minglab bepul Python paketlari bor. Ular PyPI (Python Package Index) degan omborda saqlanadi va pip dasturi bilan o'rnatiladi. Kompyuterdagi buyruqlar satrida:

pip install requests

Bir nechta mashhur paketlar:

Bu saytdagi muharrir faqat standart kutubxona bilan ishlaydi. Qo'shimcha paketlar bilan ishlash uchun Python kompyuteringizda o'rnatilgan bo'lishi kerak (1-dars).

Mashqlar

1-mashq Gipotenuza

To'g'ri burchakli uchburchakning katetlari 3 va 4 ga teng. Pifagor teoremasi bo'yicha gipotenuzani toping: c = √(a² + b²).

import math

a = 3
b = 4
Yechimni ko'rish
import math

a = 3
b = 4
print(math.sqrt(a ** 2 + b ** 2))

2-mashq Doira yuzi

Radiusi 5 ga teng doiraning yuzini (S = π r²) verguldan keyin 2 xona aniqlikda chiqaring.

r = 5
Yechimni ko'rish
from math import pi

r = 5
print(round(pi * r ** 2, 2))

3-mashq Ikki zar

Ikkita zar tashlang (har biri 1 dan 6 gacha) va natijalarini hamda yig'indisini chiqaring. Ikkala zar bir xil chiqsa, Dubl! deb yozing.

import random
Yechimni ko'rish
import random

zar1 = random.randint(1, 6)
zar2 = random.randint(1, 6)
print(f"Zarlar: {zar1} va {zar2}, yig'indi: {zar1 + zar2}")
if zar1 == zar2:
    print("Dubl!")

4-mashq Parol generatori

8 ta belgidan iborat tasodifiy parol yarating. Belgilar belgilar satridan tanlansin.

import random

belgilar = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
parol = ""
Ishora

for _ in range(8): sikli ichida parol += random.choice(belgilar).

Yechimni ko'rish
import random

belgilar = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
parol = ""
for _ in range(8):
    parol += random.choice(belgilar)
print("Yangi parol:", parol)

Belgilar orasida l, 1, O, 0 yo'qligini sezdingizmi? Ular bir-biriga o'xshaydi va parolni o'qishda adashtiradi.

O'zingizni sinang

import math dan keyin kvadrat ildiz qanday olinadi?

  1. sqrt(16)
  2. math(sqrt, 16)
  3. math.sqrt(16)
  4. 16.sqrt()

To'g'ri. import math bo'lsa, modul nomi va nuqta kerak. from math import sqrt bo'lganda esa shunchaki sqrt(16).

random.randint(1, 3) qaysi qiymatlarni qaytarishi mumkin?

  1. 1 yoki 2
  2. 1, 2 yoki 3
  3. 0, 1, 2 yoki 3
  4. 1 dan 3 gacha istalgan kasr son

To'g'ri. randint da ikkala chegara ham kiradi.

math.ceil(7.2) nimaga teng?

  1. 7
  2. 7.0
  3. 7.2
  4. 8

To'g'ri. ceil doim yuqoriga yaxlitlaydi («ceiling» — shift).

Internetdan qo'shimcha Python paketini o'rnatish uchun qaysi buyruq ishlatiladi?

  1. pip install paket_nomi
  2. import paket_nomi
  3. python download paket_nomi
  4. install(paket_nomi)

To'g'ri. pip paketni o'rnatadi, import esa o'rnatilgan paketni dasturga ulaydi.

Xulosa

  • Modul — tayyor funksiyalar saqlangan fayl. import modul uni dasturga ulaydi.
  • modul.funksiya() yoki from modul import funksiya ko'rinishida ishlatiladi.
  • math — ildiz, π, yaxlitlash; random — tasodifiy son va tanlov; datetime — sana va vaqt.
  • Har qanday .py fayl modul bo'la oladi — katta loyihalar ko'p faylga bo'linadi.
  • pip install internetdagi yuz minglab paketlardan birini o'rnatadi.