O’zgaruvchilar
O’zgaruvchi nima?
Agar xotiraga biror qiymatni joylashtirmoqchi bo’lsak, u holda bizga kerakli bo’lgan qismga murojaat qiluvchi nom kerak bo’ladi va bu nomni biz o’zgaruvchi deb ataymiz. Bu o’zgaruvchi mashinaning operativ xotirasi (RAM: Random Access Memory)dan joy egallaydi va biz shu o’zgaruvchiga yangi qiymat yuklashimiz bilan eski qiymatni o’chiradi va yangisini ikkilik (ikkilika o’tkazish jarayoni haqida biz umuman bosh qotirmaymiz) ko’rinishga o’tkazib yozadi va bizda boshqa eski qiymatni olishga imkon
bo’lmaydi. Pythonda tilida o’zgaruvchi e’loni qilish uning nomini yozish va unga =
belgisidan keyin qiymat berish orqali amalga oshirialdi.
[1]:
a = 4
Python tilida o’zlashtirish amali sifatida tenglik amalidan foydalanamiz, yuqoridagi kod a
nomli o’zgaruvchi e’lon qildi va unga 4 qiymatni o’zlashtirdi, ya’ni a
ning qiymati 4 ga teng. Biz o’zgaruvchilarda qanday qiymat saqlanganligini doimiy bilishimiz zarur bo’ladi. Buning uchun eng sodda holatda print()
funksiyasidan foydalanamiz hamda bu jarayoni chop qilish deb ataymiz. Hamda, biz ba’zi kodning qatorlarni o’zmiz uchun eslatma sifatida yozish uchun va bu eslatmani mashina
buyruq sifatida qaramasligi uchun #
belgisidan foydalanamiz, keyinchalik buni izoh deb ataymiz.
[2]:
# Bu izoh qatori: bu qatorni mashini buyruq sifatida qabul qilmaydi.
# Ushbu kod ishlashi natijasida hech narsa ro'y bermaydi
# o'zgaruvchi e'loni va unga 4 qiymat yozildi
a = 4
# a o'zgaruvchining qiymatni ko'rish uchun print funksiyasidan foydalanish
print(a)
4
[3]:
money_of_ali = 100
money_of_friend = 200
all_money = money_of_ali + money_of_friend
print(all_money)
300
[12]:
a = 214748364832793233387329439847
print(a)
214748364832793233387329439847
Python tilida bir qator tayyor funksiyalar mavjud va ulardan foydalanish uchun ularning yo’riqnomasini o’qib chiqish zarur bo’ladi. Lekin umumiy bir holat biz funksiya nomidan keyin qavs ichiga unga zarur bo’lgan qiymatlarni berishimiz kerak. Bu qiymatlar o’zgarmaslar ko’rinishida ham bo’lishi mumkin. Misollar:
[14]:
# o'zgaruvchi e'loni va unga 4 qiymat yozildi
a = 4
# ushbu funksiya bittadan oshiq qiymatlarni qabul qiladi. Natija: 4 14 20
# quyida 14 va 20 sonlari o'zgarmas sonlardir
print(a, 14, 20)
4 14 20
Yuqorida butun turdagi o’zgaruvchilar bilan ishladik, bundan tashqari bir qator turlar mavjud:
int
- butunfloat
- haqiqiystr
- matn
Matni saqlovchi o’zgaruvchilarni e’lon qilishda, o’zgaruvchiga zarur matn '
yoki "
ichida beriladi. Misollar:
[15]:
# Yoshi 14
age = 14
# Familiyasi. Matni ikkita " (qo'shtirnoq) ichiga yozdik
fam = "Abdusamatov"
print(type(fam))
# Ismi. Matni ikkita ' (tirnoq) ichiga yozdik
# Diqqat ikkisining ham umuman bir-birdan farqi yo'q.
ism = 'Doniyor'
print(type(ism))
# Og'irligi kgda
# sonning butun va haqiqiy qismini ajratish uchun . (nuqta)dan foydalanamiz
vazn = 78.5
# chop etish
print(fam, ism, age, vazn)
<class 'str'>
<class 'str'>
Abdusamatov Doniyor 14 78.5
Yuqoridagi kodga e’tibor bersak, biz umuman o’zgaruvchi turini aytmadik, lekin Python o’zi bu narsani berilgan qiymatga qarab aniqlab oladi. Shuning uchun ham ushbu dinamik turga ega dasturlash tilidir. Bundan tashqari, bitta o’zgaruvchiga dastur ishlash davomida bir nechta har xil qiymat bersa ham oxirgisni olib, qolganlarini unutgan holda ishlayveradi. O’zgaruvchi turini bilmoqchi bo’lsak, biz type
funksiyasidan foydalanamiz. Misollar.
[16]:
# a o'zgaruvchisi e'loni va unga 4 qiymat berildi
a = 4
# a o'zgaruvchisining turi
type(a) # natija int
[16]:
int
Endi shu o’zgaruvchiga boshqa turli xil qiymatlar berib ko’raylik
[17]:
# Birinchi a turi int
a = 4
# Endi uning turi float
a = 3.14
type(a)
[17]:
float
[18]:
# Birinchi a turi float
a = 3.14
# Endi uning turi str
a = 'salom'
type(a)
[18]:
str
Bu yerda o’rganish kerak bo’lgan eng zarur narsa, biz o’zgaruvchiga har safar yangi qiymat berganimizda u qaytadan aniqlanadi, ya’ni e’lon qilinadi. Buni ko’rish uchun quyidagi dastur kodida biz id()
funksiyasidan foydalanib bitta nomli o’zgaruvchiga har safar xar qil qiymat berganda uning xotiradagi yagona aniqlangan IDsini chop etamiz.
[19]:
# Birinchi a turi float
a = 3.14
print(id(a))
# Endi uning turi str
a = 'salom'
print(id(a))
130350407015920
130350378921984
Yuqorida 3 ta o’zgaruvchi turini e’lon qilishni va ular bilan ishlashni o’rgandik. Lekin ko’pchilik boshlovchilar adashadigan bir holat bor. Masalan quyidagi kodga va uning natijasiga e’tibor beraylik.
[22]:
# age o'zgaruvchisiga 25 raqami yozildi
age = 25
# age matni chop qilinyapti, bu age o'zgaruvchisi emas!!!
# Natija: age
print('age')
age
Yuqoridagi kodda biz age nomli o’zgaruvchi e’lon qildik va unga 25 qiymatni o’zlashtirdik. Lekin 5-qataorda biz age
degan matn turidagi qiymatni chop qildik, age
o’zgaruvchisi emas. Quyida esga ikki holni ham qayta ko’ramiz.
[24]:
# age ga 25 raqami yozildi
age = 25
# age o'zgaruvchising qiymati chop qilinyapti
print(age)
# age matni chop qilinyapti
print('age')
25
age
[39]:
del boy
[40]:
print(boy)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[40], line 1
----> 1 print(boy)
NameError: name 'boy' is not defined
O’zgaruvchi nomlarni aniqlashga cheklovlar va tavsiyalar
Biz xotiraning bir qismini band qilish va shu qismga o’zimizga kerak bo’ladigan qiymatni yozib qo’yishimiz uchun o’zgaruvchi tushunchasi bilan tanishdik. Lekin biz ma’lum bir qattiy qoidalarga ega bo’lgan dasturlash tili bilan ishlar ekanmiz, bizda o’zgaruvchilarni e’lon qilishda albatta cheklovlarga egamiz. Quyida ushbu qoidalarning ba’zilari:
o’zgaruvchi har doim katta-kichik (masalan, katta harf deb
A
, kichik deb esaa
) harflar va tag chiziq_
bilan boshlanadi;o’zgaruvchining qolgan belgilari katta-kichik harflar, raqamlar (0, 1, 2, …, 9) va tag chiziq
_
belgisi bo’lishi mumkin.har doim katta va kichik harflardan ikki xil o’zgaruvchi paydo bo’ladi. Masalan,
age
,Age
,AGE
lar hammasi alohida o’zgaruvchilar, hattoki ma’nosi bir bo’lsa ham.
Quyida birinchi mumkin bo’lgan o’zgaruvchilarga misollarni ko’ramiz, keyin esa uning teskarisiga.
[42]:
# Mumkin bo'lgan o'zgaruvchilar
# bolaning yoshi
boy_age = 25
# o'rtacha yosh
mean_age = 22
# Uning familiyasi
his_familiy = 'Abdurahmonov'
print(boy_age, mean_age, his_familiy)
25 22 Abdurahmonov
[43]:
# Katta-kichik harflaridan farq
# qiluvchi o'zgaruvchilar
# age o'zgaruvchisi
age = 15
# Bu o'zgaruvchi bilan age o'zgaruvchisi
# ikkita alohida o'zgaruvchi
Age = 25
AGe = 34
AGE = 45
aGE = 54
AGe = 24
print(id(age), id(Age), id(AGe))
9803048 9803368 9803336
[44]:
AgE
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[44], line 1
----> 1 AgE
NameError: name 'AgE' is not defined
[45]:
# Taqiqlangan o'zgaruvchilar
1boy_age = 25
mean age = 22
his familiy = 'Abdurahmonov'
Cell In[45], line 2
1boy_age = 25
^
SyntaxError: invalid decimal literal
Agar oxirgi kod qismini ishga tushursak biz yuqoridagi kabi xatolikni ko’rishimiz aniq. Har doim dastur bajarilishidan oldin, birinchi kiritilgan kod manti sintaktik tahlildan o’zkaziladi. Agar matnda hech qanday sintaktik xato mavjud bo’lmasa, keyingi bajarilish qismlariga o’tkaziladi.
Tavsiyalar. Dastur oson o’qilishi va tushunarli bo’lishi uchun biz har doim o’zgaruvchilarga ularning saqlashi mumkin bo’lgan qiymatiga qarab nom berishimiz zarur. Masalan yuqorida,
age
o’zgaruvchisiga doimiy inson (yoki boshqa narsaning) yoshini saqlashimiz maqsadga muvofiq bo’ladi. Agar buning uchun bir nechta so’z zarur bo’lsa, unda tag_
chiziq bilan yoki har bir so’zning bosh harifini katta harflar orqali ifodalash bilan erishishimiz mumkin. Masalan,mean_age
- o’rtacha yosh. Yana bir boshqa tavsiya esa, albatta ingliz tilidagi so’zlardan foydalanishdir. Oxirgisi esa agar o’zgaruvchi nomi haddan tashqari uzun bo’lib, qayta yozishga halaqit qilsa unda uni qisqartirib yozish mumkin. Misol uchun,familiy_name
o’rnigafam_name
yokinumber_of_objects
o’rniga esan_objs
Dasturlash tillarida ikki xil o’zgaruvchi turlari bo’ladi: 1. tilning o’zida mavjud bo’lgan va eng ko’p qo’llaniladigan; 2. foydalanuvchi tomonidan aniqlangan turlar.
Biz hozir 3 ta o’zgaruvchi turini qisman o’gandik. Shulardan ikkitasini hozir ba’zi qismlarni batafsil o’rganamiz.
int
turi bilan ishlashda biz har xil sanoq sistemalaridan foydalanishimiz mumkin bo’ladi. Ikkilik sanoq sistemasida butun son kiritish qilish uchun0b
(nol va b harfi)ni son oldiga qo’shib yozamiz. Hamda boshqa sanoq sistemalari uchunb
harfining o’rniga, 8 lik uchuno
, 16 lik uchun esax
. Quyida misollar.
[5]:
# 23 soni ikkilikda
age = 0b10111
print(age)
# 23 soni sakizlikda
age = 0o27
print(age)
# 23 soni 16 likda
age = 0x17
print(age)
23
23
23
float
turida hamint
kabi bir qator yo’llar bilan haqiqiy sonlarni tasvirlash mumkin, lekin unda biz sanoq sistemalaridan foydalanish o’rnida soni exponenta ko’rnishida tasvirlaymiz. Masalan, \(453.33=4.5333 \cdot 10^2=0.45333 \cdot 10^3=4533.3 \cdot 10^{-1}=45333 \cdot 10^{-2}\). Ya’ni bitta soni 10 darajalariga ko’raytirish orqali bir ko’plab ko’rinishlarda yozishimiz mumkin. Buni dasturlash tilida soddaroq ko’rnishda ifodalash uchun bize
exponenta belgisdan foydalanamiz va 10 soni yozmaymiz. Yuqoridagi misol quyidagicha bo’ladi.
[6]:
a = 453.33
print(a)
a = 4.5333e2
print(a)
a = 0.45333e3
print(a)
a = 4533.3e-1
print(a)
a = 45333e-2
print(a)
453.33
453.33
453.33
453.33
453.33
Demak yuqoridagi hamma qiymat bir xil ekan. Faqat 10 ning musbat darajasini yozishda e
harfidan keyin hech qanday narsa yozmaymiz (yozsa ham to’g’iri), manifiy uchun esa -
belgisini qo’yish yetarli.