Rekursiv funksiyalar, modullar, random va datetime
Modullar bilan ishlash
Rekursiv funksiyalar

Bunday funksiyalar o'z o'ziga qayta murojaat qila oladigan funksiyalardir.

Bularga misol sifatida faktoryal va Fibonachi sonlarini ko'rsak bo'ladi.

# Factorial
def fac(n):
if n == 0:
return 1
else:
return n * fac(n - 1)
print(fac(5))
Fibonachi Sonlari

# Fibonacci
def fib(n):
if n <= 0:
return 0
elif n == 1 or n == 2:
return 1
else:
return fib(n - 2) + fib(n - 1)
num = int(input())
print(f'Fibonaci({num}) => {fib(num)}')
Modullar bilan ishlash
# modullar.py
def info(ism, familiya, t_yil):
data = {
'ism': ism,
'familiya': familiya,
't_yil': t_yil
}
return data
def info_input():
"""Insonlar haqidagi ma'malumotlarni kiriting"""
data = []
while True:
print("\nQuyidagi ma'lumotlarni kiriting", end='')
ism = input('\nIsmingizni kiriting: ')
familiya = input('Familiyangizni kiriting: ')
t_yil = int(input("Tug'ilgan yilingiz: "))
data.append(info(ism, familiya, t_yil))
label = input('Yana qo\'shasizmi(yes/no): ')
if label == 'no':
break
else:
continue
return data
def info_print(info):
"""Foydalanuvchilar haqidagi ma'lumotlarni ekranga chiqarish"""
print(f"Ism: {info['ism'].title()} \nFamiliya: {info['familiya'].title()} \nYosh: {2021 - info['t_yil']}")
Modullarni chaqirib olamiz (main.py)
from modullar import info, info_print as iprint
info1 = info('Alisher', 'Botirov', 1998)
iprint(info1)
random moduli
Random moduli tasodifiy sonlar bilan ishlash uchun qulay funksiyalarga boy. Keing ulardan ayrimlari bilan tanishamiz.
randint(a,b)
randint(a,b)
Bu funksiya a va b oraligi'da tasodifiy butun son qaytaradi
import random as r # random modulini r deb chaqirayapmiz
son = r.randint(0,1000) # 0 va 1000 oralig'ida tasodifiy son
print(son)
choice(x)
choice(x)
x
ning ichidan tasodifiy qiymatni qaytaruvchi funksiya. Bunda x
bir necha elementdan iborat o'zgaruvchi (matn, ro'yxat) bo'lishi kerak.
ismlar = ['diyor','jamshid','ravshan','otabek', 'bobojon', 'amir', 'azizbek']
ism = r.choice(ismlar) # ismlar dan tasodifiy ism tanlaymiz
print(ism)
print(r.choice(ism)) # ismdan tasodifiy harf tanlaymiz
Sonlar ro'yhatidan tasodifiy son tanlashda shundan foydalanamiz
x = list(range(0,151,3))
print(x)
print(r.choice(x))
shuffle(x)
x
ichidagi elementlarni tasodifiy tartibda qaytaruvchi funksiya. Bunda x
bir necha elementdan iborat o'zgaruvchi (matn, ro'yxat) bo'lishi kerak.
x = list(range(11))
print(x)
r.shuffle(x)
print(x)
datetime moduli
Ushbu modul yordamida Pythonda sanalar bilan ishlashimiz mumkin. Moduldan foydalanishdan avval uni import qilamiz. Har gal moduldan foydalanishda datetime
deb qayta yozmaslik uchun, import qilishda modulga dt
nomini beramiz.
import datetime as dt
Hozirgi vaqt va sanani koʻrish uchun datetime.now()
moduliga murojat qilamiz:
hozir = dt.datetime.now()
print(hozir)
Kurib turganingizdek, natija yil, oy, kun soat, minut, sekund va millisekund koʻrinishida chiqdi. Biz bu qiymatlardan istaganimzni maxsus metodlar yordamida ajratib olishimiz mumkin:
# sanani ajratib olish
print(hozir.date())
# vaqtni ajratib olish
print(hozir.time())
# soatni ajratib olish
print(hozir.hour)
# minutni ajratib olish
print(hozir.minute)
# sekundni ajratib olish
print(hozir.second)
Agar bugungi kunning sanasi talab qilinsa datetime
moduli ichidagi date.today()
moduliga murojat qilamiz.
bugun = dt.date.today()
print(f"Bugungi sana: {bugun}")
Agar biror sanani qoʻlda kiritish talab qilinsa .date() metodiga kerakli sanani (yil, oy, kun) koʻrinishida kiritamiz.
ertaga = dt.date(2021, 5, 11)
print(f"Ertangi sana: {ertaga}")
Faqatgina vaqt bilan ishlash uchun .datetime.now().time()
metodiga murojat qilishimiz mumkin:
hozir = dt.datetime.now()
vaqtHozir = hozir.time()
print(f"Hozir soat: {vaqtHozir}")
Istalgan vaqtni qoʻlda kiritish uchun esa .time() metodiga kerakli vaqtni (soat, minut, sekund) koʻrinishida beramiz:
vaqtKeyin = dt.time(23,45,00)
Ayirish operatori yordamida sanalalar va vaqtlar orasidagi farqni hisoblashimiz mumkin:
bugun = dt.date.today()
ramazon = dt.date(2021, 5, 12)
farq = ramazon-bugun
print(farq)
print(f"Ramazon tugashiga {farq.days} kun qoldi")
Huddi shu kabi ikki vaqt oraligʻini sekundlarda yoki soatlarda ham koʻrishimiz mumkin:
hozir = dt.datetime.now()
futbol = dt.datetime(2021, 5, 15, 23, 45, 00)
farq = futbol - hozir
sekundlar = farq.seconds
minutlar = int(sekundlar / 60)
soatlar = int(minutlar / 60)
print(f"Futbol boshlanishiga {sekundlar} sekund qoldi")
print(f"Futbol boshlanishiga {minutlar} minut qoldi")
print(f"Futbol boshlanishiga {soatlar} soat qoldi")
Yuqorida sanalar AQSh standartiga koʻra, yil-oy-kun koʻrinishida chiqayapti. Sanani oʻzimizga moslab chiqarish uchun .strftime()
metodini chaqiramiz, va sanani oʻzimizga qulay formatda chiqaramiz.
# vaqtni millisekundsiz chiqaramiz
vaqt = hozir.strftime("%H:%M:%S")
print(f"Hozir soat: {vaqt}")
# sanani kun-oy-yil koʻrinishida chiqaramiz
sana = hozir.strftime("%d-%m-%Y")
print(f"Bugun sana: {sana}")
# sanani kun/oy/yil koʻrinishida chiqaramiz
sana_vaqt = hozir.strftime("%d/%m/%Y, %H:%M")
print(sana_vaqt)
Natija:
Hozir soat: 12:28:21
Bugun sana: 09-03-2021
09/03/2021, 12:28
Ushbu sinflar doirasida sana va vaqt obyektlarini formatlash uchun strftime(format) metodi mavjud. Bu metod formatlashni ko'rsatuvchi bitta parametr qabul qiladi. Formatlashni amalga oshirishimiz uchun quyida aniqlangan formatlash kodlaridan birini ishlatish mumkin:
%a – hafta kuni uchun abbreviatoriya. Masalan, Wed – Wednesday so‟zidan (kelishuv bo‟yicha ingiliz tilidagi so‟zlar ishlatiladi);
%A – hafta kun to‟liq, masalan, Wednesday;
%b – oy kuni uchun abbreviatoriya. Masalan, Oct (October so‟zining qisqartmasi);
%B – oy nomi to‟liq, masalan, October;
%d – oy kuni, nol qo‟shilgan, masalan, 01;
%m – oy raqami, nol qo‟shilgan, masalan, 05;
%y – yil ikkita raqamdan iborat;
%Y – yil to'rta raqamdan iborat;
%H – soat 24 soatlik formatda, masalan, 13
%I – soat 12 soatlik formatda, masalan, 01
%M – Minut;
%S – sekund.
%f – mikrosekund;
%p - AM/PM ko‟rsatgich;
%c – sana va vaqt, joriy mahalliy bo‟yicha formatlangan;
%x – sana, joriy mahalliy bo‟yicha formatlangan;
%X - vaqt, joriy mahalliy bo‟yicha formatlangan.
AMALIYOT
Rekursiv funskiyadan foydalanib ikkita butun sonlarning Eng Katta Umumiy Bo'luvchisi (EKUB) ni topish.
locale va decimal modullari haqida to'liq ma'lumot olish.
datetime moduliga tegishli timedelta haqida o'rganish
Last updated
Was this helpful?