შიგთავსზე გადასვლა

იტერატორები და კონტეინერები Python-ში

შესავალი

კონტეინერები არის ობიექტები, რომლებიც შეიცავენ სხვა ობიექტებს (მონაცემებს). იტერატორები კი საშუალებას გვაძლევენ ამ მონაცემებზე თანმიმდევრულად წვდომისთვის.


1. კონტეინერები (Containers)

რა არის კონტეინერი?

კონტეინერი არის ობიექტი, რომელიც ინახავს მონაცემთა კოლექციას. Python-ში ძირითადი კონტეინერებია:

  • List (სია) - შეცვლადი, დალაგებული
  • Tuple (tuple) - შეუცვლელი, დალაგებული
  • Set (სიმრავლე) - შეცვლადი, დაულაგებელი, უნიკალური ელემენტები
  • Dictionary (ლექსიკონი) - გასაღები-მნიშვნელობის წყვილები

მაგალითები

# List - სია
fruits = ['vashli', 'banani', 'atami', 'qurdzeni']
print(fruits[0])  # vashli

# Tuple
coordinates = (10, 20)
# coordinates[0] = 15  # შეცდომა! Tuple შეუცვლელია

# Set - უნიკალური ელემენტები
numbers = {1, 2, 3, 3, 4, 5, 5}
print(numbers)  # {1, 2, 3, 4, 5}

# Dictionary
student = {
    'name': 'Giorgi',
    'age': 20,
    'faculty': 'Informatika'
}
print(student['name'])  # Giorgi

პრაქტიკული მაგალითი: შეფასებების სისტემა

# სტუდენტების შეფასებები
grades = {
    'matematika': [85, 90, 78, 92],
    'fizika': [88, 76, 95, 89],
    'programireba': [95, 98, 91, 94]
}

# საშუალო შეფასების გამოთვლა
for subject, scores in grades.items():
    average = sum(scores) / len(scores)
    print(f"{subject}: sashualo {average:.1f}")

2. იტერაცია (Iteration)

რა არის იტერაცია?

იტერაცია არის პროცესი, როდესაც კონტეინერის ელემენტებს ერთ-ერთად გადავუყვებით.

for ციკლი - ძირითადი იტერაცია

# სიის იტერაცია
colors = ['witeli', 'lurji', 'mwvane', 'qviteli']

for color in colors:
    print(f"feri: {color}")

enumerate() - ინდექსით იტერაცია

# ინდექსების ჩვენება
words = ['gamarjoba', 'samqaro', 'Python', 'magaria']

for index, word in enumerate(words):
    print(f"{index + 1}. {word}")

# გამოტანა:
# 1. gamarjoba
# 2. samqaro
# 3. Python
# 4. magaria

zip() - რამდენიმე სიის პარალელური იტერაცია

# ორი სიის გაერთიანება
names = ['Nino', 'Dato', 'Mariam']
scores = [95, 87, 92]

for name, score in zip(names, scores):
    print(f"{name}: {score} qula")

3. იტერატორები (Iterators)

რა არის იტერატორი?

იტერატორი არის ობიექტი, რომელსაც შეუძლია თავისი ელემენტები ერთი-ერთის მიყოლებით დააბრუნოს.

iter() და next()

# სიის იტერატორის შექმნა
numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers)

# ელემენტების ერთ-ერთის მიღება
print(next(iterator))  # 1
print(next(iterator))  # 2
print(next(iterator))  # 3

პრაქტიკული მაგალითი: ფაილის წაკითხვა

# ფაილის თითოეული ხაზი არის იტერატორი
# (მაგალითია - რეალურ ფაილზე ასე მუშაობთ)

# with open('teksti.txt', 'r', encoding='utf-8') as file:
#     for line in file:
#         print(line.strip())

# სიმულაცია:
lines = ['pirveli xazi', 'meore xazi', 'mesame xazi']
for line in lines:
    print(line)

4. range() - რიცხვების გენერატორი

range() გამოყენება

# 0-დან 5-მდე (5 არ შედის)
for i in range(5):
    print(i, end=' ')  # 0 1 2 3 4

print()

# 1-დან 10-მდე
for i in range(1, 11):
    print(i, end=' ')  # 1 2 3 4 5 6 7 8 9 10

print()

# ნაბიჯით 2
for i in range(0, 11, 2):
    print(i, end=' ')  # 0 2 4 6 8 10

პრაქტიკული მაგალითი: გამრავლების ტაბულა

# 7-ის გამრავლების ტაბულა
number = 7

print(f"gamravlebis tabula {number}-istvis:")
for i in range(1, 11):
    product = number * i
    print(f"{number} × {i} = {product}")

5. List Comprehension - სიის შექმნა ერთ ხაზში

ძირითადი სინტაქსი

# ჩვეულებრივი მეთოდი
squares = []
for x in range(10):
    squares.append(x ** 2)

# List Comprehension - მოკლე და ელეგანტური
squares = [x ** 2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

პირობით (if)

# მხოლოდ ლუწი რიცხვები
even_numbers = [x for x in range(20) if x % 2 == 0]
print(even_numbers)  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

# სიტყვები, რომლებიც იწყება 'გ'-თი
words = ['Giorgi', 'Mariam', 'Giga', 'Nino', 'Gvanca']
g_words = [word for word in words if word.startswith('G')]
print(g_words)  # ['Giorgi', 'Giga', 'Gvanca']

დიქშენერისთვის (Dictionary Comprehension)

# რიცხვები და მათი კვადრატები
squares_dict = {x: x**2 for x in range(1, 6)}
print(squares_dict)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

6. პრაქტიკული ამოცანები

ამოცანა 1: საშუალო ტემპერატურა

# კვირის ტემპერატურები
temperatures = [23, 25, 22, 24, 26, 27, 25]
days = ['orshabati', 'samshabati', 'otxshabati', 'xutshabati', 
        'paraskevi', 'shabati', 'kvira']

# თითოეული დღის ტემპერატურა
for day, temp in zip(days, temperatures):
    print(f"{day}: {temp}°C")

# საშუალო ტემპერატურა
average = sum(temperatures) / len(temperatures)
print(f"\nsashualo temperatura: {average:.1f}°C")

# ცხელი დღეები (25°C-ზე მეტი)
hot_days = [day for day, temp in zip(days, temperatures) if temp > 25]
print(f"cxeli dgeebi: {', '.join(hot_days)}")

ამოცანა 2: პროდუქტების მენეჯმენტი

# პროდუქტების კატალოგი
products = [
    {'name': 'Laptopi', 'price': 1200, 'quantity': 5},
    {'name': 'Mausi', 'price': 25, 'quantity': 50},
    {'name': 'Klaviatura', 'price': 75, 'quantity': 30},
    {'name': 'Monitori', 'price': 300, 'quantity': 15},
]

# ყველა პროდუქტის ჩვენება
print("produqtebis sia:")
print("-" * 50)
for i, prod in enumerate(products, 1):
    print(f"{i}. {prod['name']:15} - {prod['price']:>6}₾ "
          f"(maragshi: {prod['quantity']})")

# მთლიანი ღირებულება
total = sum(p['price'] * p['quantity'] for p in products)
print(f"\nmtliani maragis ghirebuleba: {total}₾")

# ძვირი პროდუქტები (100₾-ზე მეტი)
expensive = [p['name'] for p in products if p['price'] > 100]
print(f"dzviri produqtebi: {', '.join(expensive)}")

ამოცანა 3: სტუდენტების რეიტინგი

# სტუდენტების შეფასებები
students = {
    'Giorgi': [85, 90, 88, 92],
    'Mariam': [95, 93, 97, 96],
    'Dato': [78, 82, 80, 85],
    'Nino': [88, 91, 89, 93]
}

# საშუალო ქულების გამოთვლა
averages = {}
for name, scores in students.items():
    avg = sum(scores) / len(scores)
    averages[name] = avg

# დალაგება საშუალო ქულის მიხედვით
sorted_students = sorted(averages.items(), key=lambda x: x[1], reverse=True)

print("studentebis reitingi:")
print("=" * 40)
for position, (name, score) in enumerate(sorted_students, 1):
    print(f"{position}. {name:10} - sashualo: {score:.2f}")

7. სავარჯიშოები თქვენთვის

სავარჯიშო 1: ლუწ-კენტი

შექმენით პროგრამა, რომელიც 1-დან 50-მდე რიცხვებს ორ სიაში გაყოფს: ლუწები და კენტები.

# თქვენი კოდი აქ
even = []
odd = []

for num in range(1, 51):
    if num % 2 == 0:
        even.append(num)
    else:
        odd.append(num)

print(f"Luwebi: {even}")
print(f"Kentebi: {odd}")

სავარჯიშო 2: წიგნების ბიბლიოთეკა

შექმენით წიგნების სია (dictionary-ებით), სადაც თითოეულ წიგნს ექნება სათაური, ავტორი და გვერდების რაოდენობა. იპოვეთ: - ყველაზე გრძელი წიგნი - წიგნები კონკრეტული ავტორის - წიგნების საშუალო სიგრძე

# თქვენი კოდი აქ
books = [
    {'title': 'Vefxistyaosani', 'author': 'Rustaveli', 'pages': 350},
    {'title': 'Didostatis Marjvena', 'author': 'Javaxishvili', 'pages': 520},
    {'title': 'Qaji Baia', 'author': 'Kazbegi', 'pages': 180}
]

# ყველაზე გრძელი წიგნი
longest = max(books, key=lambda b: b['pages'])
print(f"Qvelaze grdzeli: {longest['title']} - {longest['pages']} gverdi")

# საშუალო სიგრძე
avg_pages = sum(b['pages'] for b in books) / len(books)
print(f"Sashualo sigrdze: {avg_pages:.0f} gverdi")

სავარჯიშო 3: სავაჭრო კალათა

შექმენით სავაჭრო კალათის სიმულაცია: - დაამატეთ პროდუქტები კალათაში - გამოთვალეთ მთლიანი ფასი - გამოიყენეთ 10% ფასდაკლება 100₾-ზე მეტი შესყიდვისთვის

# თქვენი კოდი აქ
cart = []

cart.append({'name': 'Puri', 'price': 2})
cart.append({'name': 'Rdzis', 'price': 5})
cart.append({'name': 'Qveli', 'price': 3})

total = sum(item['price'] for item in cart)
print(f"Jamuri: {total}₾")

if total > 100:
    discount = total * 0.1
    final_price = total - discount
    print(f"Fasdakleba: {discount}₾")
    print(f"Gadasaxdeli: {final_price}₾")
else:
    print(f"Gadasaxdeli: {total}₾")

8. სასარგებლო რჩევები

  1. for vs while: გამოიყენეთ for როდესაც იცით რამდენჯერ უნდა შეასრულოთ ციკლი, while - როდესაც პირობაზე არის დამოკიდებული.

  2. List Comprehension: გამოიყენეთ მარტივი ოპერაციებისთვის, რთული ლოგიკისთვის ჩვეულებრივი for ციკლი უფრო გასაგებია.

  3. enumerate(): როდესაც გჭირდებათ და ინდექსი და ელემენტი.

  4. zip(): რამდენიმე სიის პარალელურად დამუშავებისთვის.

  5. break და continue:

  6. break - ციკლის შეჩერება
  7. continue - მიმდინარე იტერაციის გამოტოვება
# break მაგალითი
for i in range(10):
    if i == 5:
        break
    print(i)  # დაბეჭდავს: 0, 1, 2, 3, 4

# continue მაგალითი
for i in range(5):
    if i == 2:
        continue
    print(i)  # დაბეჭდავს: 0, 1, 3, 4

დასკვნა

იტერატორები და კონტეინერები Python-ის ძირითადი კომპონენტებია. მათი კარგად ცოდნა გეხმარებათ: - ეფექტურად იმუშაოთ მონაცემებთან - დაწეროთ უფრო კომპაქტური და გასაგები კოდი - გამოიყენოთ Python-ის ძლიერი შესაძლებლობები

გახსოვდეთ: პრაქტიკა სრულყოფს! სცადეთ სხვადასხვა მაგალითები და შექმენით საკუთარი პროგრამები. 🚀