Dövrlər haqqında mövzumuzun əvvəlində qeyd etmişdik ki, dövrlərin sayı əvvəlcədən məlum olduqda sayğaclı dövr (for), məlum olmadıqda isə şərtli dövr (while) operatorundan istifadə edilir.
Python dilində while şərtli dövrünün ümumi yazılış qaydası aşağıdakı kimidir:
while şərt:
dövrün gövdəsi
Burada şərt kimi istənilən məntiqi ifadədən istifadə oluna bilər, dövrün gövdəsi isə icrası təkrarlanan ifadələr qrupudur. Şərtli dövrdə əvvəlcə verilmiş şərt yoxlanılır, əgər bu şərt ödənilirsə, dövrün gövdəsində yer alan ifadələr icra olunur; ödənilmirsə, o zaman dövr icra olunmur və idarəetmə dövrdən sonrakı növbəti instruksiyaya ötürülür. Şərtli dövrün icrası şərt ödənildikcə təkrarlanır.
İndi isə konkret misallara keçək. Əvvəlcə natural ədədlərin cəmini 100-dən böyük olmamaq şərtilə hesablayan proqram tərtib edək, ekrana ən son toplanan natural ədədi və yekun cəmi çıxaraq:
s = 0
i = 1
while s + i <= 100:
s = s + i
i = i + 1
print(i - 1, s)
Proqramımıza aydınlıq gətirək. Əvvəlcə biz cəm üçün nəzərdə tutduğumuz s dəyişəninə başlanğıc qiymət kimi sıfırı (0) mənimsədirik. Natural ədədlər üçün isə i dəyişənini götürüb, onun da ilkin qiymətini bir (1) veririk. Bundan sonra isə while dövrünü qurub dövr şərtini təyin edirik. Dövrün gövdəsində natural ədədləri cəmləyir və i dəyişəninin qiymətini hər dəfə bir vahid artırırıq. Bu hesablama prosesi şərt ödənildikcə davam edir. Dövr öz işini yekunlaşdırdıqdan sonra sonuncu toplanan natural ədədi və yekun cəmi ekrana çapa veririk.
Daha bir misala baxaq. Verilmiş ədədin rəqəmləri cəmini hesablayan proqram tərtib edək:
a = int(input("Ədədi daxil edin: "))
s = 0
while a > 0:
b = a % 10
s = s + b
a = a // 10
print(s)
Nə baş verdi? Əvvəlcə biz istifadəçinin input() funksiyası ilə daxil etdiyi qiyməti int() funksiyası vasitəsilə tam ədəd tipinə çevirib a dəyişənində yadda saxladıq. Cəm üçün nəzərdə tutduğumuz s dəyişəninə isə başlanğıc qiymət kimi sıfırı (0) mənimsətdik. Daxil edilən ədədin rəqəmlərini tapmaq üçün onu hər dəfə 10-a qalıqlı və tam olaraq böldük və əldə edilən rəqəmi s dəyişəninin üzərinə gəldik. Bütün bunları dövrün gövdəsində həyata keçirdik, dövrün şərtini isə a>0 olaraq təyin etdik. Ən sonda isə ədədin rəqəmləri cəmini ekrana çapa verdik. Proqramı skriptdə yazıb icra edin və müxtəlif ədədlər daxil edərək nəticələri yoxlayın.
Sayğaclı dövrlərdə olduğu kimi, şərtli dövrlərdə də break, continue və else operatorlarından istifadə oluna bilər. Burada qeyd etmək lazımdır ki, while dövründə break və continue operatorlarının istifadəsi for dövründə olduğu kimidir. Lakin else operatorunun istifadəsi şərtli dövrdə bir qədər fərqlənir. Şərtli while dövründə else operatorundan sonra gələn ifadələr dövrün şərti ödənilmədiyi halda icra olunur. Bunu bir misal üzərində tətbiq edək.
Aşağıdakı proqram kvadratları 200-dən böyük olmayan natural ədədləri və onların kvadratlarını ekrana çıxarır. Ən sonda bu şərti pozan ilk ədəd və onun kvadratı da çapa verilir:
i = 1
while i ** 2 <= 200:
print(i, i ** 2)
i = i + 1
else:
print("Şərt buradan ödənmir:", i, i ** 2)
Gördüyünüz kimi, dövrün şərti ödənmədiyi halda else instruksiyasından sonra gələn ifadə icra olunur.
Sayğaclı dövrlərdə olduğu kimi, şərtli dövrlərdə də iç-içə dövrlərdən istifadə oluna bilər.
Sonda sayğaclı dövrlərlə bağlı daha bir məsələni nəzərinizə çatdırmaq istərdim. Şərtli while dövrünün ümumi yazılış qaydasından da gördüyünüz kimi, burada şərt dövrün başlanğıcında yoxlanılır. Digər proqramlaşdırma dillərində isə (məsələn : Pascal və C) iki fərqli şərtli dövr operatorlarından istifadə olunur: ön şərtli və son şərtli. Bu ikisi arasındakı fərq ondan ibarətdir ki, ön şərtli dövr operatorunda şərt ödənilmədən dövr bir dəfə də olsa, icra olunmur. Amma son şərtli dövr operatorunda dövr bir dəfə icra olunur və sonda şərt yoxlanılır.
Python proqramlaşdırma dilində son şərtli dövr operatoru olmasa da, zərurət halında while instruksiyasından istifadə edərək son şərtli dövr alqoritmini emulyasiya etmək mümkündür. Bunu bir misal üzərində tətbiq edək.
Aşağıda kiçik bir oyun proqramının kodu verilmişdir. Oyunun qaydası çox sadədir. Əvvəlcə müəyyən bir aralıqda gizli bir ədəd təyin edilir və oyunçudan onu tapmaq tələb olunur. Oyunçu hər dəfə təxmin etdiyi ədədi klaviaturadan daxil edir. Bu zaman əgər oyunçunun ədədi gizli ədəddən kiçikdirsə “Yuxarı”, böyükdürsə “Aşağı” sözləri ekrana çıxır. Oyun istifadəçi gizli ədədi tapana qədər davam edir. Yekunda oyunçunu təbrik edir və gizli ədədi neçə cəhddə tapdığını ona bildiririk.
a = 45
print("1-100 arası gizli ədədi tapın")
k = 0
while True:
b = int(input())
k = k + 1
if b < a:
print("Yuxarı")
elif b > a:
print("Aşağı")
else:
break
print("Təbriklər! Siz", k, "cəhddən tapdınız.")
Proqramdan da gördüyünüz kimi, şərtli dövrün əvvəlində verilən şərt ödənildiyinə görə (başqa cür ola da bilməz) dövrün gövdəsi icra olunur. Biz burada dövrün şərtini elə təyin etdik ki, o hər zaman ödəniləcək. Dolayısıyla dövrün şərti artıq formal xarakter daşıyır. Deməli, dövrün icrasını dayandırmaq üçün başqa bir tədbir görülməlidir. Bu isə break operatorunun istifadəsi ola bilər. Biz də oyunçunun daxil etdiyi ədəd gizli ədədin özü olacağı halda dövrün icrasını break operatoru vasitəsilə dayandırırıq.
Yuxarıdakı proqramı Python dilində olmayan son şərtli alqoritmi emulyasiya etmək məqsədilə bu cür yazdıq. Halbuki eyni proqram adi qaydada (ön şərtli) aşağıdakı kimi də yazıla bilərdi:
a = 45
print("1-100 arası gizli ədədi tapın")
k = 0
m = True
while m:
b = int(input())
k = k + 1
if b < a:
print("Yuxarı")
elif b > a:
print("Aşağı")
else:
m = False
print("Təbriklər! Siz", k, "cəhddən tapdınız.")
Proqramın hər iki variantını skriptdə yazın və gizli ədədi təyin edərək dostunuzla oynayın.
