🌀 Python — ციკლის ოპერატორები [1]¶
ციკლებთან დაკავშირებული მანიპულაციები¶
Python-ში ციკლი არის პროგრამის ფრაგმენტი, რომელიც განმეორებით ასრულებს ერთსა და იმავე კოდს, სანამ გარკვეული პირობა შესრულებულია.
ციკლების გამოყენება საშუალებას გვაძლევს მოვახდინოთ მონაცემთა გადამუშავება, გამეორება და ავტომატიზაცია.
🔹 ციკლის ტიპები Python-ში¶
Python-ში ორი ძირითადი ციკლია:
- for loop — როცა ვიცით გამეორებების ზუსტი რაოდენობა.
- while loop — როცა გამეორებების რაოდენობა დამოკიდებულია პირობის შესრულებაზე.
🧭 range() ფუნქცია Python-ში¶
range() — ეს არის ჩაშენებული Python ფუნქცია, რომელიც ქმნის რიცხვების მიმდევრობას (sequence).
იგი გამოიყენება, როცა გვჭირდება ციკლის შესრულება განსაზღვრული რაოდენობაზე.
📘 შედეგი:
➡️ პირველი არგუმენტი – საწყისი,
➡️ მეორე – ბოლო მნიშვნელობა (არ შედის),
➡️ მესამე – ნაბიჯი.
მაგალითად:
➡️ შედეგი:
💡
range(5)ნიშნავს: დაიწყე 0-დან და გაჩერდი სანამ 5-მდე მიხვალ (5 არ შედის შედეგში).
⚙️ სინტაქსი¶
არგუმენტები:¶
| არგუმენტი | დანიშნულება | მაგალითი | შედეგი |
|---|---|---|---|
start |
საიდან დავიწყოთ | range(2, 6) |
2, 3, 4, 5 |
stop |
სად დასრულდეს (არ შედის შედეგში) | range(0, 3) |
0, 1, 2 |
step |
რა ნაბიჯით იზრდებოდეს | range(1, 10, 2) |
1, 3, 5, 7, 9 |
🔹 1 არგუმენტი¶
➡️ შედეგი:🔹 2 არგუმენტი¶
➡️ შედეგი:🔹 3 არგუმენტი¶
➡️ შედეგი:
step = 2ნიშნავს, რომ ყოველ იტერაციაზე მნიშვნელობა 2-ით იზრდება.
🔻 უარყოფითი ნაბიჯი¶
თუ გინდა უკუღმა დათვლა, გამოიყენე უარყოფითი ნაბიჯი (-1):
🔹 range() ობიექტი¶
range() არ ქმნის სიას, არამედ ქმნის range ობიექტს, რომელიც მეხსიერებაში მხოლოდ საზღვრებს ინახავს.
თუ გინდა ეს ობიექტი გადაიქცეს სიად:
➡️ შედეგი:🧩 გამოყენება for ციკლთან ერთად¶
➡️ შედეგი:
🎯 ვიზუალური ახსნა – როგორ მუშაობს range(start, stop, step)¶
flowchart TD
A([🎯 Start]):::startEnd
A --> B[[range<br/>start stop step]]:::process
B --> C[Current = start]:::process
C --> D{i < stop ?}:::decision
D -->|Yes| E[📄 Print i]:::io
E --> F[Current += step]:::process
F --> D
D -->|No| G((🏁 End)):::startEnd
classDef startEnd fill:#00A67E,stroke:#006B4E,stroke-width:3px,color:white
classDef process fill:#E1F5FE,stroke:#0288D1,stroke-width:2px
classDef decision fill:#FFF3E0,stroke:#FF9800,stroke-width:2px,color:#000
classDef io fill:#E8F5E9,stroke:#43A047,stroke-width:2px
💡 მაგალითები პრაქტიკიდან¶
| ამოცანა | კოდი | შედეგი |
|---|---|---|
| 0-დან 9-მდე ყველა რიცხვი | range(10) |
0–9 |
| 5-დან 15-მდე | range(5, 16) |
5–15 |
| 2-დან 20-მდე მხოლოდ ლუწები | range(2, 21, 2) |
2, 4, 6, 8, ... 20 |
| 10-დან 1-მდე უკუღმა | range(10, 0, -1) |
10, 9, ... 1 |
📘 შეჯამება¶
range() ქმნის რიცხვების მიმდევრობას |
|
stop მნიშვნელობა არ შედის შედეგში |
|
step განსაზღვრავს ნაბიჯს |
|
| ძალიან ეფექტურია მეხსიერების მხრივ | |
ხშირად გამოიყენება for ციკლებთან |
✳️ დასკვნა:
range() არის Python-ის ერთ-ერთი ყველაზე სასარგებლო ინსტრუმენტი,
რადგან იგი საშუალებას გვაძლევს ციკლში მარტივად განვსაზღვროთ რამდენჯერ უნდა შესრულდეს მოქმედება და რა ინტერვალით.
🔸 for ციკლი¶
📘 შედეგი:
🧩 range(5) ქმნის რიცხვების მიმდევრობას 0-დან 4-მდე.
🔹 ციკლის კონტროლის ოპერატორები¶
| ოპერატორი | აღწერა |
|---|---|
break |
წყვეტს ციკლს მთლიანად |
continue |
ტოვებს მიმდინარე იტერაციას და გადადის შემდეგზე |
pass |
არაფერს აკეთებს (დამტვირთველი სინტაქსისთვის გამოიყენება) |
🔸 break მაგალითი¶
📘 შედეგი:
🧩 ციკლი წყდება როცა i == 5.
🔸 continue მაგალითი¶
📘 შედეგი:
➡️ როცა i == 3, ბლოკი გამოტოვებულია.
flowchart TD
%% სტილი და ფორმატირება
classDef startEnd fill:#00A67E,stroke:#006B4E,stroke-width:2,color:white,fontWeight:bold;
classDef process fill:#E1F5FE,stroke:#0288D1,stroke-width:1,color:#000;
classDef decision fill:#FFF3E0,stroke:#FF9800,stroke-width:1,color:#000,fontWeight:bold;
classDef io fill:#E8F5E9,stroke:#43A047,stroke-width:1,color:#000;
classDef continue fill:#FFEBEE,stroke:#E53935,stroke-width:1.5,color:#000,fontWeight:bold;
A([START]):::startEnd --> B[["fruits ცვლადი შექმნა"]]:::process
B --> C["List → ['apple', 'banana', 'orange', 'mango', 'watermelon']"]:::io
C --> D[["FOR x in fruits"]]:::process
D --> E{"Is x == 'banana'?"}:::decision
E -->|YES| H[["continue → გადახტომა შემდეგ იტერაციაზე"]]:::continue
E -->|NO| F["print(x)"]:::io
F --> G{"Loop continues?"}:::decision
G -->|YES| D
G -->|NO| M([END]):::startEnd
H --> D
🔸 pass მაგალითი¶
📘 შედეგი:
🧩 გამოიყენება როცა ბლოკი აუცილებელია სინტაქსურად, მაგრამ ჯერ არაფერს ვწერთ.
flowchart TD
%% სტილი და ფორმატირება
classDef startEnd fill:#00A67E,stroke:#006B4E,stroke-width:2,color:white,fontWeight:bold;
classDef process fill:#E1F5FE,stroke:#0288D1,stroke-width:1,color:#000;
classDef decision fill:#FFF3E0,stroke:#FF9800,stroke-width:1,color:#000,fontWeight:bold;
classDef io fill:#E8F5E9,stroke:#43A047,stroke-width:1,color:#000;
classDef break fill:#FFCDD2,stroke:#D32F2F,stroke-width:1.5,color:#000,fontWeight:bold;
classDef pass fill:#F3E5F5,stroke:#7B1FA2,stroke-width:1.5,color:#000,fontWeight:bold;
A([START]):::startEnd --> B[["fruits ცვლადი შექმნა"]]:::process
B --> C["List → ['apple', 'banana', 'orange', 'mango', 'watermelon']"]:::io
C --> D[["FOR x in fruits"]]:::process
D --> E{"Is x == 'banana'?"}:::decision
E -->|YES| F[["break → ციკლის შეწყვეტა"]]:::break
E -->|NO| G{"Is x == 'orange'?"}:::decision
G -->|YES| H[["pass → არაფერი, გამოტოვება"]]:::pass
G -->|NO| I["print(x)"]:::io
I --> J{"Loop continues?"}:::decision
H --> J
J -->|YES| D
J -->|NO| K([END]):::startEnd
F --> K
# fruits ცვლადი შექმნა
fruits = ['apple', 'banana', 'orange', 'mango', 'watermelon']
# FOR ციკლი
for x in fruits:
# Is x == 'banana'?
if x == 'banana':
print("BREAK: ციკლის შეწყვეტა")
break # ← ციკლის სრული შეწყვეტა
# Is x == 'orange'?
elif x == 'orange':
print("PASS: არაფერი, გამოტოვება")
pass # ← არაფერი არ ხდება
else:
print(x) # ← print მხოლოდ სხვა ხილვისთვის
print("END: ციკლი დასრულდა")
🔸 while ციკლი¶
📘 შედეგი:
➡️ while ციკლი იმეორებს ბლოკს მანამ, სანამ პირობა True-ა.
🔹 enumerate()¶
enumerate() აბრუნებს ინდექსს და ელემენტს ერთდროულად.
📘 შედეგი:
🔹 ციკლი სიაზე (list iteration)¶
📘 შედეგი:
🔹 ციკლი სტრიქონზე (string iteration)¶
📘 შედეგი:
🔹 ციკლი ლექსიკონზე (dictionary iteration)¶
student = {"name": "Nino", "age": 21, "grade": "A"}
for key, value in student.items():
print(key, ":", value)
📘 შედეგი:
🔹 ჩაშენებული ციკლი (Nested Loop)¶
ციკლი ციკლში გამოიყენება ორმაგი გამეორებებისთვის.
📘 შედეგი:
🔹 მაგალითი — ციკლების კომბინაცია¶
numbers = [1, 2, 3, 4, 5]
even_sum = 0
for n in numbers:
if n % 2 == 0:
even_sum += n
print("ლუწი რიცხვების ჯამი:", even_sum)
📘 შედეგი:
🔹 while + break პრაქტიკული მაგალითი¶
while True:
word = input("შეიყვანე სიტყვა (exit გამოსასვლელად): ")
if word == "exit":
break
print("შეიყვანე:", word)
📘 ციკლი გაგრძელდება მანამ, სანამ მომხმარებელი არ შეიყვანს "exit".
🔹 შეჯამება¶
| ციკლის ტიპი | გამოყენება |
|---|---|
for |
წინასწარ ცნობილი გამეორებებისას |
while |
პირობის მიხედვით გამეორებებისას |
break |
წყვეტს ციკლს |
continue |
ტოვებს მიმდინარე გამეორებას |
pass |
არაფერს აკეთებს (placeholder) |
range() |
რიცხვების მიმდევრობა |
enumerate() |
ინდექსი + ელემენტი |
📘 დავალებები:
- რიცხვების ჯამი
- ლუწი რიცხვები
- ვარსკვლავური სამკუთხედი
- ცხრილი
- კენტი რიცხვები
- შუალედური ჯამი
- სიტყვის გამეორება
- შებრუნებული რიცხვები
- კვადრატები
- სამკუთხედი რიცხვებით
♾️ WHILE ციკლის დავალებები 11. შეყვანის შემოწმება
# რიცხვის შეყვანა სანამ 0 არ იქნება
number = 1
while number != 0:
number = int(input("შეიყვანე რიცხვი (0-სთვის გასვლა): "))
print("გასვლა!")
import random
number = random.randint(1, 20)
guess = 0
while guess != number:
guess = int(input("გამოცანე (1-20): "))
print("სწორია!")
# მაგ: 123 → 1+2+3 = 6
num = int(input("შეიყვანე რიცხვი: "))
sum_digits = 0
temp = num
while temp > 0:
sum_digits += temp % 10
temp //= 10
print(f"ციფრების ჯამი: {sum_digits}")
# n-ის ფაქტორიალი
n = int(input("n: "))
fact = 1
i = 1
while i <= n:
fact *= i
i += 1
print(f"{n}! = {fact}")
# ლუწი რიცხვის შეყვანა
number = int(input("შეიყვანე ლუწი რიცხვი: "))
while number % 2 != 0:
print("არაა ლუწი!")
number = int(input("კიდევ ერთხელ: "))
print("ლუწია!")
# 3 სახელის შეყვანა
count = 0
while count < 3:
name = input("სახელი: ")
print(f"გამარჯობა, {name}!")
count += 1
# დადებითი რიცხვის შეყვანა
number = 0
while number >= 0:
number = int(input("შეიყვანე უარყოფითი რიცხვი: "))
print("უარყოფითია!")
height = int(input("სიმაღლე: "))
for i in range(1, height + 1):
spaces = " " * (height - i)
stars = "*" * (2 * i - 1)
print(spaces + stars)
n = int(input("რაოდენობა: "))
a, b = 0, 1
i = 0
while i < n:
print(a, end=" ")
a, b = b, a + b
i += 1
choice = ""
while choice != "0":
print("\n1. ჯამი\n2. ცხრილი\n0. გასვლა")
choice = input("არჩევანი: ")
if choice == "1":
# ჯამის კოდი
pass
elif choice == "2":
# ცხრილის კოდი
pass
n = int(input("რაოდენობა: "))
summa = 0
for i in range(n):
num = int(input(f"{i+1}: "))
summa += num
print(f"საშუალო: {summa/n}")
დავალება 1: რიცხვების დაჯამება პირობით (while ციკლით)¶
მიზანი: პროგრამა რიცხვების შეკრებას აგრძელებს მანამ, სანამ ცვლადი current_number არ გახდება 10-ზე მეტი ან ნულზე ნაკლები. გამოიყენეთ while ციკლი.
total_sum = 0
current_number = 5 # საწყისი რიცხვი
limit = 10
print("ციკლი გრძელდება სანამ რიცხვი 0-დან 10-ის ჩათვლით დიაპაზონშია.")
while current_number >= 0 and current_number <= limit:
print("--------------------")
print("მიმდინარე რიცხვი: ")
print(current_number)
# რიცხვების საერთო ჯამი
total_sum = total_sum + current_number
# პირობის შემოწმება და ცვლადის შეცვლა
if current_number < 3:
current_number = current_number + 3
print(" > 3-ზე ნაკლები იყო, 3 დავამატეთ.")
else:
current_number = current_number + 5
print(" > 3-ზე მეტი იყო, 5 დავამატეთ.")
# შედეგის დაბეჭდვა
print("--------------------")
print("ციკლი დასრულდა, რადგან რიცხვი გასცდა 0-10 დიაპაზონს.")
print("საბოლოო რიცხვი: ")
print(current_number)
print("ყველა რიცხვის ჯამი: ")
print(total_sum)
დავალება 2: კენტი რიცხვების დათვლა და ოპერატორები დიაპაზონში (for ციკლით)¶
მიზანი: დიაპაზონში 1-დან 10-მდე:
თუ რიცხვი 3-ის ტოლია, გამოიყენეთ continue.
როგორც კი რიცხვი მიაღწევს 8-ს, გამოიყენეთ break.
დაითვალეთ კენტი რიცხვების რაოდენობა.
odd_count = 0 # კენტი რიცხვების მრიცხველი
start = 1
end = 10
break_value = 8
continue_value = 3
print("რიცხვების დამუშავება 1-დან 10-მდე...")
for number in range(start, end + 1):
print("--------------------")
print("მიმდინარე რიცხვი: ")
print(number)
# 2. შეამოწმეთ break
if number == break_value:
print("მიღწეულია 8, ციკლი შეწყდა (break).")
break
# 1. შეამოწმეთ continue
if number == continue_value:
print("რიცხვი 3-ის ტოლია, გამოტოვება (continue)...")
continue # ციკლი გადადის შემდეგ იტერაციაზე
# 3. კენტი რიცხვების დათვლა (პირობა % ოპერატორით)
if number % 2 != 0:
odd_count = odd_count + 1
print(" > კენტი რიცხვია, მრიცხველი გაიზარდა.")
else:
print(" > ლუწი რიცხვია.")
# შედეგის დაბეჭდვა
print("--------------------")
print("პროგრამა დასრულდა.")
print("კენტი რიცხვების საბოლოო რაოდენობა: ")
print(odd_count)
დავალება 3: სტრინგის სიმბოლოების შემოწმება და დათვლა¶
მიზანი: სტრინგში "Guria2025" for ციკლის გამოყენებით დაითვალეთ: სიმბოლო 'a'-ს რაოდენობა.
რიცხვითი სიმბოლოების რაოდენობა (გამოიყენეთ ლოგიკური or text = "Guria2025" )
a_count = 0
digit_count = 0
print("სტრინგი: ")
print(text)
print("სიმბოლოების ანალიზი...")
# for ციკლი სტრინგის სიმბოლოებზე
for char in text:
print("--------------------")
print("მიმდინარე სიმბოლო: ")
print(char)
# 1. 'a' სიმბოლოს შემოწმება
if char == 'a':
a_count = a_count + 1
print(" > აღმოჩენილია 'a'.")
# 2. რიცხვის სიმბოლოს შემოწმება (ლოგიკური OR ოპერატორით)
# მხოლოდ რამდენიმე რიცხვს შევამოწმებთ, რომ არ იყოს ძალიან გრძელი
if char == '0' or char == '1' or char == '2' or char == '5':
digit_count = digit_count + 1
print(" > აღმოჩენილია რიცხვითი სიმბოლო (0, 1, 2, ან 5).")
print("--------------------")
print("ანალიზი დასრულდა.")
print("სულ 'a' სიმბოლოების რაოდენობა: ")
print(a_count)
print("სულ რიცხვითი სიმბოლოების რაოდენობა: ")
print(digit_count)
დავალება 4: ლუწი რიცხვების დაბეჭდვა უკუღმა (for ციკლით)¶
მიზანი: დაბეჭდეთ მხოლოდ ლუწი რიცხვები 20-დან 1-მდე, დათვლის ოპერატორის გამოყენებით range() ფუნქციაში.
start = 20
stop = 0
step = -2
print("ლუწი რიცხვები 20-დან 1-მდე (უკუღმა):")
# range(start, stop, step) - step-ის გამოყენება
for number in range(start, stop, step):
print(number)
print("ციკლი დასრულდა.")
დავალება 5: ფარული რიცხვის პოვნა (while ციკლით და break-ით)¶
მიზანი: იპოვეთ და დაბეჭდეთ პირველი რიცხვი 1-დან 10-მდე, რომელიც 4-ის ტოლია. როგორც კი იპოვით, შეწყვიტეთ ციკლი.
secret_number = 4
current = 1
print("ვპოულობთ ფარულ რიცხვს...")
while current <= 10:
print("--------------------")
print("მიმდინარე რიცხვი: ")
print(current)
# პირობა და break
if current == secret_number:
print("ფარული რიცხვი ნაპოვნია!")
break # ციკლის შეწყვეტა
current = current + 1 # მრიცხველის ზრდა
# შედეგის დაბეჭდვა
print("პროგრამა დასრულდა.")
print("ნაპოვნი რიცხვი: ")
print(current)
დავალება 6: ხუთეულების გამოტოვება (for ციკლით და continue-ით)¶
მიზანი: დაბეჭდეთ რიცხვები 1-დან 25-მდე.
თუ რიცხვი 5-ის ჯერადია (იყოფა 5-ზე უნაშთოდ), გამოტოვეთ მისი დაბეჭდვა continue ოპერატორის გამოყენებით.
start = 1
end = 25
print("რიცხვები 1-დან 25-მდე (ხუთეულების გამოკლებით):")
for i in range(start, end + 1):
# პირობა continue-სთვის (გაყოფადობა)
if i % 5 == 0:
print(" >> რიცხვი ")
print(i)
print(" 5-ის ჯერადია, გამოტოვება (continue).")
continue
# თუ continue არ შესრულდა, რიცხვი დაიბეჭდება
print("დაბეჭდილი რიცხვი: ")
print(i)
print("ციკლი დასრულდა.")
დავალება 7: რიცხვის გამრავლება ლიმიტამდე (while ციკლით)¶
მიზანი: დაიწყეთ რიცხვით 2.
გააგრძელეთ მისი გამრავლება 3-ზე მანამ, სანამ შედეგი არ იქნება 50-ზე მეტი.
დათვალეთ, რამდენჯერ მოხდა გამრავლება.
number = 2
limit = 50
multiplication_count = 0
print("რიცხვის გამრავლება 50-ის ლიმიტამდე:")
while number <= limit:
print("--------------------")
print("მიმდინარე რიცხვი: ")
print(number)
number = number * 3
multiplication_count = multiplication_count + 1
print(" > რიცხვი გამრავლდა 3-ზე.")
# შედეგის დაბეჭდვა
print("--------------------")
print("ციკლი დასრულდა.")
print("საბოლოო რიცხვი: ")
print(number)
print("გამრავლება მოხდა ჯერ: ")
print(multiplication_count)
დავალება 8: პირობა სტრინგის სიგრძეზე¶
მიზანი: მოცემულია სტრინგი "Georgia".
for ციკლით გაიარეთ მისი ყველა სიმბოლო.
თუ სიმბოლოს ინდექსი (თანმიმდევრობის ნომერი, 0-დან დაწყებული) არის ლუწი, დაბეჭდეთ იგი.
word = "Georgia"
length = 7 # სიგრძე ვიცით
print("სიტყვა: ")
print(word)
print("ლუწი ინდექსის მქონე სიმბოლოები:")
# range(სიგრძე) იძლევა ინდექსებს 0, 1, 2, 3, 4, 5, 6
for index in range(length):
# შეამოწმეთ ინდექსი ლუწია თუ კენტი
if index % 2 == 0:
# ინდექსით მიმართვა სტრინგზე
char = word[index]
print("ინდექსი: ")
print(index)
print("სიმბოლო: ")
print(char)
else:
print("ინდექსი ")
print(index)
print(" კენტია, გამოტოვება.")
print("ციკლი დასრულდა.")
დავალება 9: ორი პირობის ერთად შემოწმება (and ოპერატორი)¶
მიზანი: დაბეჭდეთ რიცხვები 1-დან 30-მდე. თუ რიცხვი იყოფა 3-ზე უნაშთოდ და 5-ზე უნაშთოდ, დაბეჭდეთ მის გვერდით "Bingo".
end = 30
print("რიცხვების შემოწმება 3-ზე და 5-ზე გაყოფადობაზე:")
for num in range(start, end + 1):
print("--------------------")
print("რიცხვი: ")
print(num)
# ლოგიკური AND ოპერატორი
if num % 3 == 0 and num % 5 == 0:
print("Bingo")
elif num % 3 == 0:
print("იყოფა მხოლოდ 3-ზე")
elif num % 5 == 0:
print("იყოფა მხოლოდ 5-ზე")
else:
print("არ იყოფა არც 3-ზე და არც 5-ზე")
print("ციკლი დასრულდა.")
მარტივი მაგალითები¶
A) ხილის გამოთვლა
შედეგი:B) რიცხვების ჯამი
შედეგი:საშუალო სირთულის მაგალითები¶
C) ცხრილი (გამრავლება)
შედეგი:2. WHILE ციკლი (უცნობი რაოდენობის გამოთვლა)¶
მარტივი მაგალითები¶
A) რიცხვების ჯამი (10-მდე)
შედეგი:B) მომხმარებლის შეყვანა
საშუალო სირთულის მაგალითები¶
C) რიცხვის გამოცნობა
secret = 7
guess = 0
while guess != secret:
guess = int(input("გამოცანე რიცხვი (1-10): "))
if guess < secret:
print("მეტი!")
elif guess > secret:
print("ნაკლები!")
print("სწორია!")
D) ფაქტორიალი
შედეგი:3. შედარება - ერთი დავალება ორივე ციკლით¶
დავალება: 1-დან 10-მდე რიცხვების ჩაწერა
FOR ვერსია
შედეგი:WHILE ვერსია
შედეგი:📊 შეჯამება - როდის რომელი ციკლის გამოყენება?¶
| ციკლის ტიპი | გამოყენების მაგალითი |
|---|---|
| FOR | ცნობილი რაოდენობის გამოთვლა, List-ის ელემენტების გაშვება, range() გამოყენება |
| WHILE | უცნობი რაოდენობის გამოთვლა, მომხმარებლის შეყვანა, პირობის შესრულებამდე ციკლის გაგრძელება |