range(a, b, d)iləfordövrü qurmaq və iterasiyaların sayını dövrü açmadan tapmaq.- Sayğac, toplayıcı və hasil dəyişənləri ilə dövrün içində şərtləri yoxlamaq.
whiledövrünü və rekurrent ardıcıllıqları izləmə cədvəli ilə izləmək.break,continuevə iç-içə dövrlərin nəticəsini müəyyən etmək.
Tutaq ki, 1-dən 1000-ə qədər 7-yə bölünən ədədləri saymaq lazımdır. Min dəfə if yazmaq? Əsla! Dövr operatoru eyni əmrlər qrupunu lazım olan qədər təkrarlayır. DİM-in 2025–2026-cı illərdəki dörd variantında ən çox rast gəlinən mövzu məhz «Dövr operatoru. Ədədlər üzərində əməllər» olub: 120 informatika tapşırığından 14-ü. Bu dərsdə dövr qurmağı və, ən əsası, onu izləmə cədvəli ilə səhvsiz izləməyi öyrənəcəksən.
for dövrü və range(): dövr addımı
Dövr operatoru əmrlər qrupunu təkrar-təkrar icra edir. Təkrarlanan əmrlər dövrün gövdəsidir (onlar girinti ilə yazılır), gövdənin bir dəfə icrası isə iterasiya adlanır. for dövründə dövr dəyişəni hər iterasiyada ardıcıllığın növbəti qiymətini alır: for i in range(1, 6): dövründə i ardıcıl olaraq 1, 2, 3, 4, 5 olur.
range funksiyası tam ədədlər ardıcıllığı yaradır və üç formada yazılır: range(b) — 0, 1, …, b − 1; range(a, b) — a, a + 1, …, b − 1; range(a, b, d) — a, a + d, a + 2d, … Üçüncü ədəd d dövr dəyişəninin dəyişmə addımıdır. d > 0 olduqda ədədlər b-yə çatana qədər artır, d < 0 olduqda b-yə çatana qədər azalır. Son qiymət b heç vaxt daxil deyil — «b-yə qədər, b olmadan».
| Çağırış | Qiymətlər | İterasiya |
|---|---|---|
range(5) | 0, 1, 2, 3, 4 | 5 |
range(3, 8) | 3, 4, 5, 6, 7 | 5 |
range(1, 20, 4) | 1, 5, 9, 13, 17 | 5 |
range(10, 0, -3) | 10, 7, 4, 1 | 4 |
range(20, 121) | 20, 21, …, 120 | 101 |
range(8, 3) | boş ardıcıllıq | 0 |
- Niterasiyaların sayı; ifadə 0-dan kiçik və ya ona bərabərdirsə, dövr heç icra olunmur
- abaşlanğıc qiymət
- bson qiymət (daxil deyil)
- daddım (mənfi də ola bilər)
- ⌈x⌉x-i yuxarıya, ən yaxın tam ədədə yuvarlaqlaşdırmaq
range(a, b, d)-də iterasiyaların sayı. Dövr dəyişəninin son qiyməti a + (N − 1) · d-dir. Addım 1 olanda sadəcə N = b − a; [a; b] parçasındakı bütün tam ədədlər üçün range(a, b + 1) yazılır və N = b − a + 1.
Dövrün gövdəsi neçə dəfə icra olunur və dövr dəyişəninin son qiyməti nədir? 1) range(3, 20, 4); 2) range(15, 2, -4); 3) range(20, 121); 4) range(1, 10, -1).
Həllini göstərHəllini gizlət
2) (2 − 15) / (−4) = 3,25 → N = 4; son qiymət 15 + 3 · (−4) = 3 (15, 11, 7, 3).
3) Addım 1: N = 121 − 20 = 101; son qiymət 120.
4) (10 − 1) / (−1) = −9 < 0 → N = 0: addım mənfidir, amma başlanğıc sondan kiçikdir, dövr heç bir dəfə icra olunmur.
for i in range(10, 0, -3):
print(i)
print(len(range(3, 20, 4)), len(range(20, 121)))▸ Gözlənilən nəticə
10 7 4 1 5 101
len(range(…)) iterasiyaların sayını yoxlamağa kömək edir.for yalnız range üzərində deyil, istənilən ardıcıllıq üzərində işləyir: for ch in 'Baku': sətrin simvollarını, for x in [4, 9, 2]: isə siyahının elementlərini bir-bir götürür. Bu imkan «Sətirlər və onlar üzərində əməllər» və «Siyahılar və onlar üzərində əməllər» dərslərində geniş işlədiləcək; bu dərsdə isə ədədlərlə — range ilə işləyirik.
Sayğac və toplayıcı: dövrün içində şərt
Dövr çox vaxt nəyi isə sayır və ya toplayır. Bunun üçün dövrdən əvvəl dəyişənə başlanğıc qiymət verilir, dövrün içində isə o, hər uyğun iterasiyada yenilənir. Şərt operatoru dövrün içində «filtr» rolunu oynayır: yalnız şərti ödəyən qiymətlər sayılır və ya toplanır.
- sayğac:
k = 0, dövrdək = k + 1— şərt neçə dəfə ödəndi; - toplayıcı (cəm):
s = 0, dövrdəs = s + x— qiymətlərin cəmi; - hasil:
p = 1(0 yox — əks halda nəticə həmişə 0 olar), dövrdəp = p * x.
s = 0
p = 1
k = 0
for i in range(1, 11):
if i % 2 == 1:
s = s + i
else:
p = p * i
if i % 3 == 0:
k = k + 1
print(s, p, k)▸ Gözlənilən nəticə
25 3840 3
Eyni qəliblə ən böyük (və ya ən kiçik) qiymət də tapılır: dövrdən əvvəl mx dəyişəninə ilk qiymət (və ya mümkün olandan kiçik ədəd) yazılır, dövrdə isə if x > mx: mx = x yoxlanır. Beləliklə, dövr bitəndə mx indiyə qədər görülən qiymətlərin ən böyüyünü saxlayır. Bütün bu qəliblərdə dövr hər qiymətə bir dəfə baxır və nəticəni addım-addım «yığır».
- K[a; b] parçasında m-ə bölünən natural ədədlərin sayı
- a, bparçanın ucları (natural ədədlər)
- mbölən
Dövrsüz sayma: [1; b]-də m-ə bölünənlər b // m qədərdir, [1; a − 1]-dəkiləri çıxırıq. Böyük aralıqlı dövrləri izləmək əvəzinə məhz belə sayırıq.
Tapın: 1) [20; 120] parçasında 7-yə bölünən ədədlərin sayını; 2) [25; 95] parçasında tək ədədlərin sayını; 3) [1; 100] parçasında 3-ə və ya 5-ə bölünən ədədlərin sayını.
Həllini göstərHəllini gizlət
2) Tək ədədlər 2 addımla gedir: (95 − 25) : 2 + 1 = 36.
3) 3-ə bölünənlər 33, 5-ə bölünənlər 20; həm 3-ə, həm 5-ə (yəni 15-ə) bölünən 6 ədəd iki dəfə sayılıb: 33 + 20 − 6 = 47.
k = 0
for n in range(30, 131):
if n % 2 == 0 and n < 100:
if n % 7 == 0 or n % 9 == 0:
k = k + 1
else:
k = k + 2
print(k)▸ Gözlənilən nəticə
141
Yuxarıdakı proqramın nəticəsini müəyyən edin.
A) 141 B) 75 C) 132 D) 150 E) 139
Həllini göstərHəllini gizlət
1) Xarici şərt doğrudur (n cüt və n < 100): 30, 32, …, 98 — (98 − 30) : 2 + 1 = 35 ədəd. Bunlardan yalnız 7-yə və ya 9-a bölünənlər k-nı 1 artırır. Cüt olub 7-yə bölünən = 14-ə bölünən: 42, 56, 70, 84, 98 (5 ədəd); cüt olub 9-a bölünən = 18-ə bölünən: 36, 54, 72, 90 (4 ədəd); ikisinə birdən bölünən yoxdur. Cəmi +9.
2) Xarici şərt yalandır: 101 − 35 = 66 ədəd, hər biri +2 verir: +132.
k = 9 + 132 = 141, cavab A. Tələ:
else-in xarici if-ə aid olduğunu görməyən onu daxili şərtə bağlayır və başqa cavab alır.while dövrü və izləmə cədvəli
while şərt: dövrü gövdəni şərt doğru olduqca təkrarlayır. Şərt hər iterasiyadan əvvəl yoxlanır, ona görə bu, ilkin şərtli dövrdür: şərt əvvəldən yalandırsa, gövdə bir dəfə də icra olunmur. Gövdədə şərtə daxil olan dəyişən mütləq dəyişməlidir, yoxsa dövr sonsuz olar. Dövr bitəndə şərt yalandır: dəyişən şərti pozan ilk qiyməti saxlayır. while təkrarların sayı əvvəlcədən bilinməyəndə seçilir: «cəm 1000-i keçənə qədər», «ədədin rəqəmləri bitənə qədər».
İstənilən for dövrünü while ilə yazmaq olar: for i in range(a, b, d): (d > 0) dövrü i = a, while i < b:, gövdə və gövdənin sonunda i = i + d ilə eynidir. Bu çevirmə blok-sxemlərdəki dövrləri başa düşməyə kömək edir: orada da dövr dəyişəninə başlanğıc qiymət verilir, şərt yoxlanır, gövdədən sonra dəyişən addım qədər dəyişir (bax: «Dövri alqoritmlər və izləmə cədvəli»).
n = 0
k = 1
while k <= 15:
n = n + k
if k % 4 == 0:
k = k + 1
else:
k = k + 3
print(n + k)▸ Gözlənilən nəticə
68
İzləmə cədvəli hər iterasiyada dəyişənlərin qiymətlərini sətir-sətir yazır: şərtin yoxlandığı andakı qiymət, şərtin nəticəsi və gövdədən sonrakı qiymətlər. Yuxarıdakı proqram üçün:
| k | k <= 15 | n | k % 4 == 0 | yeni k |
|---|---|---|---|---|
| 1 | ✓ | 1 | ✗ | 4 |
| 4 | ✓ | 5 | ✓ | 5 |
| 5 | ✓ | 10 | ✗ | 8 |
| 8 | ✓ | 18 | ✓ | 9 |
| 9 | ✓ | 27 | ✗ | 12 |
| 12 | ✓ | 39 | ✓ | 13 |
| 13 | ✓ | 52 | ✗ | 16 |
| 16 | ✗ | 52 | — | dövr bitir |
Nümunə 4-ün proqramı nə çap edir?
A) 52 B) 64 C) 68 D) 71 E) 55
Həllini göstərHəllini gizlət
Son iterasiyada k = 13 + 3 = 16 olur,
16 <= 15 ✗ — dövr bitir.print(n + k) → 52 + 16 = 68, cavab C. A variantı (52) dövrdən sonra k-nın da cəmə daxil olduğunu unudanlar üçündür.Dövrdə yeni qiymət əvvəlki qiymətlərdən hesablanırsa, bu, rekurrent ardıcıllıqdır. Ən məşhuru Fibonaççi ardıcıllığıdır: 1, 1, 2, 3, 5, 8, …, burada hər hədd əvvəlki ikisinin cəmidir. Proqramda iki dəyişən son iki həddi saxlayır və hər iterasiyada «bir addım irəli sürüşür»: c = a + b, a = b, b = c. Mənimsətmələrin sırası vacibdir: a = b-ni c-ni hesablamadan əvvəl yazsaq, köhnə a itər.
a = 1
b = 1
for i in range(3, 11):
c = a + b
a = b
b = c
print(b)▸ Gözlənilən nəticə
55
Nümunə 5-in proqramı nə çap edir və bu, Fibonaççi ardıcıllığının (1, 1, 2, 3, 5, …) neçənci həddidir?
Həllini göstərHəllini gizlət
i = 3: b = 2; i = 4: 3; i = 5: 5; i = 6: 8; i = 7: 13; i = 8: 21; i = 9: 34; i = 10: 55.
range(3, 11) 8 iterasiya verir, son i = 10. Çap olunur 55 — ardıcıllığın 10-cu həddi.break və continue
break dövrü dərhal və tamamilə dayandırır: qalan iterasiyalar ləğv olunur və proqram dövrdən sonrakı sətrə keçir. continue isə dövrü dayandırmır — yalnız cari iterasiyanın qalanını keçir və növbəti iterasiyaya keçir (for-da dövr dəyişəni növbəti qiyməti alır, while-da şərt yenidən yoxlanır). İç-içə dövrlərdə hər ikisi yalnız ən daxili dövrə təsir edir. break ilə dayanan for-da dövr dəyişəni dayandığı andakı qiyməti saxlayır.
s = 0
for i in range(1, 50, 3):
if i % 5 == 0:
continue
if s > 40:
break
s = s + i
print(i, s)▸ Gözlənilən nəticə
19 41
Nümunə 6-nın proqramı nə çap edir?
Həllini göstərHəllini gizlət
i = 1: s = 1; i = 4: s = 5; i = 7: s = 12.
i = 10:
10 % 5 == 0 ✓ → continue, s dəyişmir (12).i = 13: s = 25; i = 16: s = 41.
i = 19:
19 % 5 = 4, sonra 41 > 40 ✓ → break, 19 əlavə olunmur.Dövr dayandı, i = 19 qalır. Çap: 19 41.
n = 100
while True:
n = n + 1
if n % 7 == 0 and n % 13 == 0:
break
print(n)▸ Gözlənilən nəticə
182
while True: özü dayanmır — çıxışı break təmin edir. Proqram 100-dən böyük, həm 7-yə, həm 13-ə bölünən ilk ədədi tapır: 91 · 2 = 182.İç-içə dövrlər
Dövrün gövdəsində başqa dövr də ola bilər — bunlar iç-içə dövrlərdir. Xarici dövrün hər iterasiyasında daxili dövr əvvəldən sona qədər icra olunur və daxili dəyişən hər dəfə yenidən başlayır. Saat kimi düşün: dəqiqə əqrəbi (xarici dövr) bir bölgü irəliləyəndə saniyə əqrəbi (daxili dövr) tam dövrə vurur. Daxili dövrün sərhədi xarici dəyişəndən asılı ola bilər (range(i, 6)) — onda hər xarici iterasiyada daxili dövr fərqli sayda icra olunur.
- Ndaxili gövdənin ümumi icra sayı
- N₁xarici dövrün iterasiyaları
- N₂daxili dövrün bir keçiddəki iterasiyaları
Daxili dövr xarici dəyişəndən asılı deyilsə, hasil düsturu işləyir. Asılıdırsa, hər xarici iterasiya üçün daxili sayı ayrıca tapıb toplayırıq.
1) for i in range(4): və içində for j in range(1, 6):
2) for i in range(1, 5): və içində for j in range(i, 6):
3) for i in range(1, 6): və içində for j in range(i):
Həllini göstərHəllini gizlət
2) i = 1: j 1…5 (5 dəfə); i = 2: 4; i = 3: 3; i = 4: 2 → 5 + 4 + 3 + 2 = 14.
3) i = 1: 1 dəfə; i = 2: 2; … i = 5: 5 → 1 + 2 + 3 + 4 + 5 = 15.
for a in range(1, 25):
for b in range(a, 25):
if a * b == 24:
print(a, b)▸ Gözlənilən nəticə
1 24 2 12 3 8 4 6
k = 0
for i in range(1, 5):
for j in range(i, 6):
if j % 4 == 0:
break
k = k + i
print(k)▸ Gözlənilən nəticə
10
Nümunə 8-in proqramının nəticəsini müəyyən edin.
A) 10 B) 20 C) 3 D) 14 E) 30
Həllini göstərHəllini gizlət
break yalnız daxili dövrü dayandırır; j 4-ə çatanda daxili dövr bitir, xarici dövr isə davam edir.i = 1: j = 1, 2, 3 → k-ya 3 dəfə 1 əlavə olunur (k = 3); j = 4 →
break.i = 2: j = 2, 3 → 2 dəfə 2 (k = 7); j = 4 →
break.i = 3: j = 3 → k = 10; j = 4 →
break.i = 4: j = 4 → dərhal
break.Cavab: A) 10.
break-i nəzərə almayan 30-u (E), onun hər iki dövrü dayandırdığını düşünən isə 3-ü (C) seçir.[20; 120] parçasındakı ədədlərdən 3-ə bölünən, amma 5-ə bölünməyənlərin sayını for dövrü və sayğacla tap və çap et.
k = 0
# for n in range(...):
print(k)▸ Gözlənilən nəticə
27
Fibonaççi ardıcıllığının (1, 1, 2, 3, 5, …) 1000-dən böyük olan ilk həddini while dövrü ilə tap və çap et.
a = 1
b = 1
# while ...:
print(b)▸ Gözlənilən nəticə
1597
Əsas fikirlər
range(a, b, d)a-dan başlayır, d addımla gedir, b daxil deyil; iterasiyaların sayı ⌈(b − a) / d⌉, müsbət deyilsə — 0.- Sayğac (
k = 0), toplayıcı (s = 0) və hasil (p = 1) dövrdən əvvəl başlanğıc qiymət alır, dövrün içində şərtə görə yenilənir. whileilkin şərtli dövrdür: şərt hər iterasiyadan əvvəl yoxlanır, dövrdən sonra dəyişən şərti pozan ilk qiyməti saxlayır.breakdövrü tamamilə dayandırır,continueyalnız cari iterasiyanı keçir; iç-içə dövrlərdə hər ikisi ən daxili dövrə aiddir.- İç-içə dövrlərdə daxili gövdə N₁ · N₂ dəfə (asılı sərhəddə daxili sayların cəmi qədər) icra olunur; böyük dövrləri izləmə cədvəli və qruplarla say.
Özünü yoxla
12 sual. Hər düzgün cavab XP qazandırır.
range(2, 11, 3) hansı qiymətləri verir?