while takrorlash operatori

Bundan oldingi Pythonga oid boblarda biz tarmoqlanuvchi dasturlashni o’rgandik. Lekin o’tgan chiziqli algebraga oid bobda biz vektorlar ustida amallar bilan ishladik. Lekin ularni Pythonda faqat 3, 4, 5, 6 elementdan ibroat bo’lgan holatini ko’rib chiqdik. Shuning uchun bu bobda biz Python \(n\) ta elementdan iborat bo’gan vektorlar bilan ishlashni o’rganamiz, ya’ni elementlari soni ixtiyoriy. Buning uchun bizga Takrorlanuvchi dasturlashni o’rganishimiz kerak bo’ladi ya’ni kodning ma’lum bir qismi bir nechta marta qayta ishga tushiriladi. Hamda bu orqali biz murakkab dasturlarni yozish imkoniyatiga ega bo’lamiz.

Pythonda bunday takrorlanishlarni amalga oshirish uchun 2 ta operator mavjud, bular while va for. Keling birinchi while operatori bilan ishlab ko’raylik, chunki for operatorining ma’lum bir maqsadlar uchun qulayroq. Quyidagi kodda biz ‘Salom’ so’zini 5 marta chop qilishni amalga oshirganmiz.

[1]:
# n ta takrorlashlar soni
n = 5
# i sanagich
i = 1
# 1. while kalit so'ziprint(type(names))
# 2. shart
# 3. ikki nutqa (:)
# 4. if dagi kabi
while i <= n:
  # 2 ta chekinish bilan takrorlanuvchi kod
  print('Salom')
  # sanagich qiymani 1 taga oshirish
  # chunki 1 marta chop qildik
  i = i + 1
Salom
Salom
Salom
Salom
Salom

Yuqoridagi kod 4 ta qismdan tashkil topgan: 1. n = 5 qancha marta chop qilishimiz kerakligini bildiruvchi o’zgaruvchi 2. i = 1 qancha marta chop qilib bo’linganini hisoblab turuvchi o’zgaruvchi, “sanagich” den ataymiz 3. while operatori. Bu operatorda if operatori kabi ishlaydi faqat farqi - agar shart (i <= n) bajarilsa, o’zning kodini qayta ishga tushiraveradi. 4. Takrorlanuvchi kod qismi. Bu qismda birinchi ‘Salom’ so’zini bir marta chop qildik va keyin sanagichni bittaga oshirib qo’ydik. Bu qismni i = i + 1 matematik tenglama deb tushunmaslik kerak, chunki unda bu yerda soni bittaga oshirish ro’y bermoqda. Masalan, i = 2 bo’lsa, i = i + 1 \(\rightarrow\) i = 2 + 1, ya’ni i o’zgaruvchisining qiymati 3 bo’ladi, oldingi qiymat xotiradan o’chiriladi.

E’tibor bering yuqoridagi shart har doim o’zgarib turadi, chunki i ning qiymati har takrorlashda oshadi va uning qiymati 6 ga teng bo’lganda, i <=n \(\rightarrow\) 6 <=5 shart False qiymat qaytaradi hamda shu bilan takrorlanish tugaydi. Agar shu shart har doim o’rinli (ya’ni rost True) bo’lsa, u holda bu takrorlanish hech qachon tugamaydi. Dasturni faqat operatsion tizim orqali to’xtatish mumkin. Masalan, quyidagicha.

[ ]:
# n ta takrorlashlar soni
n = 5
# i sanagich
i = 1
while i <= n:
  print('Salom')
  # tassuvur qilaylik quyidagi kod qolib ketdi
  # izohga olib quydik
  # i = i + 1

Biz yuqoridagi kodni ishga tushurib natijasini keltirmaymiz, chunki natijalar ushbu sahifaga sig’maydi. Yuqoridagi kodda ko’rganimiz kabi, oddiy o’zgarish bilan dastur cheksiz takrorlashga tushib qoldi. Boshqa hollari ham mavjud, masalan: i = i + 1 kodini adashib i = i - 1 yoki i = i kabi yozib qo’yish.

Pythonda vektorlarni ustida amallar

Ushbu bobda endi vektorlar ustidagi 3 ta amalni umumiy hol ya’ni n ta elementdan iborat bo’lgan vektor uchun ishlatib ko’ramiz. Bundan oldin bizga \(a \in Z^n\) vektor berilgan deb uning o’lchamini (elementlar sonini) topaylik. Quyida biz 5 ta elementdan iborat vektorni kodda ko’rib turibmiz, lekin bu narsani berilmagan deylik. Buning uchun biz len() funksiyasidan foydalanamiz. Bu funksiya juda ko’p turlar bilan ishlay oladi va biz uni doimiy ishlatamiz.

[3]:
# 5 ta elementdan iborat vektor
a = (3, 6, 8, 3, 0)
# a vektorning uzunligini aniqlash
n_a = len(a)
print('a vektorda', n_a, 'ta element bor')
a vektorda 5 ta element bor

Vektorda nechta element mavjud ekanligini bilganimizdan so’ng, biz bemolol uning elementlarni ketma-ket chop qilishimiz mumkin.

[4]:
# 5 ta elementdan iborat vektor
a = (3, 6, 8, 3, 0)
# a vektorning uzunligini aniqlash
n_a = len(a)
print('a vektorda', n_a, 'ta element bor:')
# sanagich
i = 0
# takrorlash operatori
# sharti bilan
while i < n_a:
  # chop qilish qismi
  print(a[i])
  # sanagichni oshirish
  i = i + 1
a vektorda 5 ta element bor:
3
6
8
3
0

Ushbu va keyingi dasturlarning eng muhim jihati, bu, ularda natijani, masalan chop etishni, birma-bir qilishdir. Chunki dasturlashda va hayotda ham shu kabi ishlarni biz amalga oshiramiz. Masalan, bizga ma’lum bir yuklarning og’irliklaridan iborat bo’lgan ro’yxat berilgan va ularning jami vazni topishimiz zarur bo’lsa, albatda biz boshidan boshlab yig’ib boramiz. Keling keyingi misolga o’taylik. Endi shu vektorning elementlarining yig’indisini topaylik. Buning uchun biz bitta o’zgaruvchi olamiz va unda yig’indilarni saqlaymiz. Matematikadan ma’lumki ixtiyoriy songa nolni qo’shsak natija o’zgarmaydi. Shuning uchun ushbu o’zgaruvchiga boshida 0 qiymat qo’yamiz.

[5]:
# 5 ta elementdan iborat vektor
a = (3, 6, 8, 3, 0)
# a vektorning uzunligini aniqlash
n_a = len(a)
print('a vektorda', n_a, 'ta element bor:')
# sanagich
i = 0
# qiymatlar yig'indisini saqlovchi
# o'zgaruvchi
# 0 boshlang'ich qiymat
# natijaga ta'sir qilmaydi
s = 0
# takrorlash operatori
# sharti bilan
while i < n_a:
  # chop qilish qismi
  print(a[i])
  # joriy element qiymatni
  # qo'shib qo'yish
  s = s + a[i]
  # sanagichni oshirish
  i = i + 1
print("a vektor elementlari yi'gindisi: ", s)
a vektorda 5 ta element bor:
3
6
8
3
0
a vektor elementlari yi'gindisi:  20

Yuqoridagi kodda biz oldin ta’kidlaganimizdek har bir keyingi qiymatni oldingi hosil bo’lgan yig’indiga, \(s\) o’zgaruvchisiga yig’ib boryabmiz va boshida bu o’zgaruvchining qiymatini 0 deb oldik. Bu albatta umumiylik va qulaylik uchun. Lekin uning birlamchi qiymatiga nolni yozishdan ko’ra hozirgi misolimizda unga vektorning birinchi elementini berish afzal, quyidagicha.

[6]:
# 5 ta elementdan iborat vektor
a = (3, 6, 8, 3, 0)
# a vektorning uzunligini aniqlash
n_a = len(a)
print('a vektorda', n_a, 'ta element bor:')
# boshlang'ich qiymat
# vektorning 1-elementi
s = a[0]
# sanagich
# endi noldan emas
# 1 boshlanadi
# chunki 0-element
# allaqachon s da turibdi
i = 1
# takrorlash operatori
# sharti bilan
while i < n_a:
  # chop qilish qismi
  print(a[i])
  # joriy element qiymatni
  # qo'shib qo'yish
  s = s + a[i]
  # sanagichni oshirish
  i = i + 1
print("a vektor elementlari yi'gindisi: ", s)
a vektorda 5 ta element bor:
6
8
3
0
a vektor elementlari yi'gindisi:  20