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

🧵 თემა: სტრიქონები Python-ში

🔹 რა არის სტრიქონი (String)?

სტრიქონი — ეს არის სიმბოლოების მიმდევრობა, რომელსაც ვიყენებთ ტექსტური მონაცემების შესანახად.
Python-ში სტრიქონები იწერება ბრჭყალებში:

text1 = "Hello"
text2 = 'Python'
text3 = """ეს არის
მრავალსტრიქონიანი ტექსტი."""

სტრიქონი მიეკუთვნება საბაზისო ტიპს str.


🔹 სტრიქონთან დაკავშირებული ძირითადი ოპერაციები

ოპერაცია მაგალითი შედეგი
შეერთება (concatenation) "Hi" + "Python" "HiPython"
გამეორება "Hi" * 3 "HiHiHi"
სიმბოლოზე წვდომა "Python"[0] 'P'
სიგრძე len("Python") 6
სტრიქონის დაჭრა (slice) "Python"[1:4] "yth"

🔹 სტრიქონებთან სამუშაო ჩაშენებული მეთოდები

🧩 გარდაქმნები

text = "Python"
print(text.upper())     # დიდი ასოებით
print(text.lower())     # პატარა ასოებით
print(text.capitalize())# პირველი ასო დიდი
print(text.title())     # თითოეული სიტყვის პირველი ასო დიდი
print(text.swapcase())  # დიდი ასო → პატარა, პატარა → დიდი

🧩 გამოტოვებული სივრცეები

text = "   Hello World!   "
print(text.strip())   # აშორებს ცარიელ ადგილებს ორივე მხრიდან
print(text.lstrip())  # მარცხნიდან
print(text.rstrip())  # მარჯვნიდან

🧩 ძიება და ჩანაცვლება

text = "I love Python"
print(text.find("love"))     # აბრუნებს ინდექსს 2
print(text.replace("Python", "GIS"))  # "I love GIS"
print("Python" in text)      # True
print("Java" not in text)    # True

🔹 სტრიქონის ფორმატირება (String Formatting)

Python-ში გვაქვს რამდენიმე გზა ტექსტის ფორმატირებისთვის:

1️⃣ f-string (რეკომენდებული)

name = "Anna"
age = 21
print(f"My name is {name}, I am {age} years old.")

2️⃣ format() მეთოდი

text = "My name is {} and I am {} years old.".format("Anna", 21)

3️⃣ %-ფორმატირება (ძველი სტილი)

name = "Anna"
age = 21
print("My name is %s and I am %d years old." % (name, age))

🔹 სტრიქონების გადაქცევა სიად და პირიქით

text = "apple,banana,orange"
fruits = text.split(",")   # ['apple', 'banana', 'orange']

joined = "-".join(fruits)  # 'apple-banana-orange'

🔹 სასარგებლო მეთოდების მოკლე ცხრილი

მეთოდი აღწერა მაგალითი
.upper() დიდი ასოებად გარდაქმნა "hi".upper()"HI"
.lower() პატარა ასოებად "HI".lower()" →"hi"`
.title() სათაურის ფორმა "hello world".title()
.strip() ცარიელი ადგილების მოცილება " hi ".strip()
.replace(a, b) ჩანაცვლება "hi".replace("h","H")
.find(x) პოვნის ინდექსი "Python".find("th")
.count(x) რამდენჯერ გვხვდება x "banana".count("a")
.startswith(x) იწყება თუ არა "hello".startswith("he")
.endswith(x) სრულდება თუ არა "file.txt".endswith(".txt")

💡 მაგალითები

მაგალითი 1

text = "python programming"
print(len(text))
print(text.upper())
print(text.count("p"))

მაგალითი 2

name = "Nino"
print(f"Hello, {name}! Welcome to Python.")

მაგალითი 3

sentence = "I love programming in Python"
if "Python" in sentence:
    print("🎯 სტრიქონში მოიძებნა სიტყვა Python")

🧠 სავარჯიშოები (20 ამოცანა)

მარტივი დონე (1–10)

  1. შეიყვანე სტრიქონი და დაბეჭდე მისი სიგრძე.
  2. დაბეჭდე სტრიქონის პირველი და ბოლო სიმბოლო.
  3. გადააქციე მომხმარებლის შეყვანილი ტექსტი დიდ ასოებად.
  4. მომხმარებელმა შეიყვანოს ორი სიტყვა — გააერთიანე ერთ სტრიქონად.
  5. შეამოწმე შეიცავს თუ არა სტრიქონი სიტყვას "Python".
  6. მომხმარებელმა შეიყვანოს ტექსტი და დაითვალე რამდენი "a" არის მასში.
  7. დაბეჭდე სტრიქონის შუა სიმბოლო.
  8. წაშალე სტრიქონის წინ და უკან არსებული ცარიელი ადგილები.
  9. შეამოწმე იწყება თუ არა სტრიქონი "Hello"-თი.
  10. დაბეჭდე სტრიქონის სიმბოლოები უკუღმა.

საშუალო სირთულე (11–20)

  1. მომხმარებელმა შეიყვანოს წინადადება — დაითვალე რამდენი სიტყვაა მასში.
  2. მომხმარებელმა შეიყვანოს სტრიქონი — შეცვალე ყველა " " "_"-ით.
  3. ტექსტიდან ამოიღე პირველი სამი სიმბოლო და ბოლო ორი.
  4. შეამოწმე სტრიქონი პალინდრომია თუ არა (წინიდან და უკანიდან ერთნაირია).
  5. შექმენი ფუნქცია, რომელიც მიიღებს სტრიქონს და დააბრუნებს "მოკლეა" ან "გრძელია" იმის მიხედვით, თუ რამდენია სიგრძე.
  6. მომხმარებელმა შეიყვანოს სახელი და ასაკი — დაბეჭდე ფორმატირებულად f-string-ით.
  7. მოაშორე სტრიქონიდან ყველა "!" სიმბოლო.
  8. დათვალე, რამდენი ხმოვანია (ა,ე,ი,ო,უ) არის ტექსტში.
  9. შეიყვანე ტექსტი და დაბეჭდე მხოლოდ დიდი ასოებით დაწყებული სიტყვები.
  10. დაწერე ფუნქცია, რომელიც მიიღებს ორ სტრიქონს და შეადარებს მათ სიგრძეს — დააბრუნებს უფრო გრძელს.

🔚 შეჯამება

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

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


#სტრიქონის სიგრძე
text = input("შეიყვანე სტრიქონი: ")
print("სიგრძე:", len(text))
#პირველი და ბოლო სიმბოლო
text = input("შეიყვანე სტრიქონი: ")
print("პირველი:", text[0])
print("ბოლო:", text[-1])
#ტექსტი დიდ ასოებად
text = input("შეიყვანე ტექსტი: ")
print(text.upper())
#ორი სიტყვის შეერთება
a = input("პირველი სიტყვა: ")
b = input("მეორე სიტყვა: ")
print(a + " " + b)
#შეიცავს თუ არა "Python"
text = input("შეიყვანე ტექსტი: ")
if "Python" in text:
    print("შეიცავს სიტყვას Python")
else:
    print("არ შეიცავს")
#დაითვალე რამდენი "a" არის ტექსტში
text = input("შეიყვანე ტექსტი: ")
print("სიმბოლო 'a' რაოდენობა:", text.count("a"))
#შუა სიმბოლო
text = input("შეიყვანე სტრიქონი: ")
mid = len(text) // 2
print("შუა სიმბოლო:", text[mid])
#ცარიელი ადგილების მოცილება
text = input("შეიყვანე სტრიქონი: ")
print(text.strip())
#იწყება თუ არა "Hello"-თი
text = input("შეიყვანე სტრიქონი: ")
print(text.startswith("Hello"))
#სტრიქონი უკუღმა
text = input("შეიყვანე სტრიქონი: ")
print(text[::-1])
#სიტყვების რაოდენობა წინადადებაში
sentence = input("შეიყვანე წინადადება: ")
words = sentence.split()
print("სიტყვების რაოდენობა:", len(words))
#შეცვალე ყველა გამოტოვება "_"-ით
text = input("შეიყვანე სტრიქონი: ")
print(text.replace(" ", "_"))
#ამოიღე პირველი სამი და ბოლო ორი სიმბოლო
text = input("შეიყვანე სტრიქონი: ")
print(text[3:-2])
#პალინდრომის შემოწმება
text = input("შეიყვანე სტრიქონი: ")
if text == text[::-1]:
    print("პალინდრომია ✅")
else:
    print("არ არის პალინდრომი ❌")
#ფუნქცია — მოკლეა თუ გრძელი
def check_length(s):
    if len(s) < 5:
        return "მოკლეა"
    else:
        return "გრძელია"

text = input("შეიყვანე სტრიქონი: ")
print(check_length(text))
#ფორმატირებული ბეჭდვა f-string-ით
name = input("შეიყვანე სახელი: ")
age = input("შეიყვანე ასაკი: ")
print(f"{name} არის {age} წლის.")
#ყველა "?" ამოშლა
text = input("შეიყვანე ტექსტი: ")
print(text.replace("?", ""))
#ხმოვანთა რაოდენობა
text = input("შეიყვანე ტექსტი: ")
vowels = "აეიოუAEIOU"
count = sum(1 for ch in text if ch in vowels)
print("ხმოვანთა რაოდენობა:", count)
#მხოლოდ დიდი ასოთი დაწყებული სიტყვები
text = input("შეიყვანე ტექსტი: ")
words = text.split()
for w in words:
    if w[0].isupper():
        print(w)
#დააბრუნე უფრო გრძელი სტრიქონი
def longer(a, b):
    if len(a) > len(b):
        return a
    elif len(b) > len(a):
        return b
    else:
        return "სიგრძეები ტოლია"

x = input("პირველი სტრიქონი: ")
y = input("მეორე სტრიქონი: ")
print("გრძელი სტრიქონი:", longer(x, y))

ამოცანა 1: დაწერეთ ფუნქცია, რომელიც მიიღებს სტრიქონს და დააბრუნებს მის სიგრძეს.
ამოცანა 2: დაწერეთ ფუნქცია, რომელიც სტრიქონს გადააქცევს დიდ ასოებად.
ამოცანა 3: დაწერეთ პროგრამა, რომელიც შეეკითხება მომხმარებელს სახელს და დაბეჭდავს მისალმებას: "გამარჯობა, [სახელი]!"
ამოცანა 4: დაწერეთ ფუნქცია, რომელიც შეამოწმებს სტრიქონი იწყება თუ არა კონკრეტული სიტყვით.
ამოცანა 5: დაწერეთ ფუნქცია, რომელიც სტრიქონში ყველა სფეისს შეცვლის ქვედა ხაზით.
ამოცანა 6: დაწერეთ პროგრამა, რომელიც დაითვლის რამდენჯერ გვხვდება კონკრეტული სიმბოლო სტრიქონში.
ამოცანა 7: დაწერეთ ფუნქცია, რომელიც სტრიქონს გადააბრუნებს (შექმნის საპირისპირო თანმიმდევრობას).
ამოცანა 8: დაწერეთ პროგრამა, რომელიც წინადადებას გაყოფს სიტყვებად და დაბეჭდავს თითოეულ სიტყვას ცალკე ხაზზე.
ამოცანა 9: დაწერეთ ფუნქცია, რომელიც შეამოწმებს არის თუ არა სტრიქონი ცარიელი (სფეისების გარდა).
ამოცანა 10: დაწერეთ პროგრამა, რომელიც სტრიქონიდან წაშლის ყველა სფეისს.
ამოცანა 11: დაწერეთ ფუნქცია, რომელიც შეამოწმებს არის თუ არა სტრიქონი პალინდრომი (ერთნაირად იკითხება ორივე მიმართულებით). მაგ: "aba", "noon".
ამოცანა 12: დაწერეთ ფუნქცია, რომელიც სტრიქონში ყოველ სიტყვას გახდის დიდი ასოთი დაწყებული (title case).
ამოცანა 13: დაწერეთ პროგრამა, რომელიც დაითვლის სტრიქონში ხმოვანი ასოების რაოდენობას (a, e, i, o, u).
ამოცანა 14: დაწერეთ ფუნქცია, რომელიც შეცვლის სტრიქონში პირველ N ჩანაწერს კონკრეტული სიტყვის.
ამოცანა 15: დაწერეთ პროგრამა, რომელიც მომხმარებლისგან მიიღებს სრულ სახელს და დააბრუნებს ინიციალებს. მაგ: "გიორგი გელაშვილი" -> "გ.გ."
ამოცანა 16: დაწერეთ ფუნქცია, რომელიც შეამოწმებს შეიცავს თუ არა სტრიქონი მხოლოდ ციფრებს.
ამოცანა 17: დაწერეთ პროგრამა, რომელიც სტრიქონში ყოველ მეორე სიმბოლოს დიდ ასოდ გადააქცევს.
ამოცანა 18: დაწერეთ ფუნქცია, რომელიც დაითვლის სტრიქონში სიტყვების რაოდენობას (სფეისებით გამოყოფილი).
ამოცანა 19: დაწერეთ პროგრამა, რომელიც ტელეფონის ნომერს (მაგ: "555123456") გადააქცევს ფორმატირებულ სახეში: "555-12-34-56".
ამოცანა 20: დაწერეთ ფუნქცია, რომელიც შეამოწმებს ორი სტრიქონი არიან თუ არა ანაგრამები (შეიცავენ იმავე ასოებს სხვა თანმიმდევრობით). მაგ: "listen" და "silent".


def string_length(s):
  """აბრუნებს სტრიქონის სიგრძეს."""
  return len(s)

# მაგალითი
print(string_length("გამარჯობა")) # 9

def to_uppercase(s):
  """სტრიქონს გადააქცევს დიდ ასოებად."""
  return s.upper()

# მაგალითი
print(to_uppercase("გამარჯობა")) # ᲒᲐᲛᲐᲠᲯᲝᲑᲐ
# პროგრამა
name = input("გთხოვთ შეიყვანეთ თქვენი სახელი: ")
print(f"გამარჯობა, {name}!")

# მაგალითი: თუ შევიყვანთ "მარიამი", დაიბეჭდება "გამარჯობა, მარიამი!"
def starts_with_word(s, prefix):
  """ამოწმებს სტრიქონი იწყება თუ არა მოცემული პრეფიქსით."""
  return s.startswith(prefix)

# მაგალითი
print(starts_with_word("პითონი არის მაგარი", "პითონი")) # True
print(starts_with_word("პითონი არის მაგარი", "ჯავა")) # False

def replace_spaces_with_underscore(s):
  """სტრიქონში ყველა სფეისს ცვლის ქვედა ხაზით."""
  return s.replace(' ', '_')

# მაგალითი
print(replace_spaces_with_underscore("ეს არის მაგალითი სტრიქონი")) # ეს_არის_მაგალითი_სტრიქონი
# პროგრამა (ფუნქციის სახით უფრო პრაქტიკულია)
def count_char_occurrence(s, char):
  """დაითვლის რამდენჯერ გვხვდება სიმბოლო სტრიქონში."""
  return s.count(char)

# მაგალითი
text = "ბანანი"
char_to_count = 'ა'
print(f"სიმბოლო '{char_to_count}' გვხვდება {count_char_occurrence(text, char_to_count)} ჯერ სტრიქონში '{text}'.") # 3
def reverse_string(s):
  """სტრიქონს გადააბრუნებს."""
  return s[::-1] # გამოიყენება პითონის 'slice' სინტაქსი

# მაგალითი
print(reverse_string("ABCDE")) # EDCBA
# პროგრამა
sentence = "პითონი არის ძალიან ძლიერი ენა"
words = sentence.split() # გაყოფს სიტყვებად სფეისების მიხედვით

print("სიტყვები ცალკე ხაზებზე:")
for word in words:
  print(word)

# შედეგი:
# პითონი
# არის
# ძალიან
# ძლიერი
# ენა
def is_effectively_empty(s):
  """ამოწმებს, არის თუ არა სტრიქონი ცარიელი ან შეიცავს თუ არა მხოლოდ სფეისებს."""
  return not s.strip() # .strip() შლის სფეისებს დასაწყისიდან და ბოლოდან

# მაგალითი
print(is_effectively_empty("   ")) # True
print(is_effectively_empty("")) # True
print(is_effectively_empty("  ტექსტი  ")) # False
# პროგრამა (ფუნქციის სახით)
def remove_all_spaces(s):
  """სტრიქონიდან შლის ყველა სფეისს."""
  return s.replace(' ', '')

# მაგალითი
print(remove_all_spaces("აი ეს არის სტრიქონი")) # აიესარისსტრიქონი
def is_palindrome(s):
  """ამოწმებს არის თუ არა სტრიქონი პალინდრომი."""
  # ვაქცევთ პატარა ასოებად და ვშლით სფეისებს შედარების წინ
  cleaned_s = s.lower().replace(' ', '')
  return cleaned_s == cleaned_s[::-1]

# მაგალითი
print(is_palindrome("ანა")) # True
print(is_palindrome("მანანა")) # False
print(is_palindrome("Race car")) # True
def to_title_case(s):
  """ყოველი სიტყვის პირველ ასოს ხდის დიდს (Title Case)."""
  return s.title()

# მაგალითი
print(to_title_case("ეს არის მაგალითი")) # ეს არის მაგალითი
print(to_title_case("hello world")) # Hello World
# პროგრამა (ფუნქციის სახით)
def count_vowels(s):
  """დაითვლის ინგლისური ხმოვნების რაოდენობას სტრიქონში."""
  vowels = "aeiou"
  count = 0
  # ვაქცევთ პატარა ასოებად, რომ ორივე შემთხვევა დავითვალოთ
  for char in s.lower():
    if char in vowels:
      count += 1
  return count

# მაგალითი
print(count_vowels("Hello World!")) # 3 (e, o, o)
print(count_vowels("Programmer")) # 3 (o, a, e)
def replace_n_occurrences(s, old_word, new_word, n):
  """ცვლის 'old_word'-ის პირველ 'n' ჩანაწერს 'new_word'-ით."""
  return s.replace(old_word, new_word, n)

# მაგალითი
text = "წითელი, ლურჯი, წითელი, მწვანე, წითელი"
new_text = replace_n_occurrences(text, "წითელი", "ყვითელი", 2)
print(new_text) # ყვითელი, ლურჯი, ყვითელი, მწვანე, წითელი
# პროგრამა (ფუნქციის სახით)
def get_initials(full_name):
  """აბრუნებს სახელის ინიციალებს."""
  words = full_name.split()
  initials = [word[0].upper() + '.' for word in words]
  return "".join(initials)

# მაგალითი
print(get_initials("გიორგი გელაშვილი")) # გ.გ.
print(get_initials("ჯონ სმიტი")) # ჯ.ს.
def contains_only_digits(s):
  """ამოწმებს შეიცავს თუ არა სტრიქონი მხოლოდ ციფრებს."""
  return s.isdigit()

# მაგალითი
print(contains_only_digits("12345")) # True
print(contains_only_digits("123a45")) # False
print(contains_only_digits("")) # False (ცარიელი სტრიქონი False-ს აბრუნებს)
# პროგრამა (ფუნქციის სახით)
def capitalize_every_other_char(s):
  """ყოველ მეორე სიმბოლოს ხდის დიდ ასოდ (ინდექსით 1, 3, 5...)."""
  result = []
  for i, char in enumerate(s):
    if i % 2 != 0: # ამოწმებს კენტი ინდექსის მქონე სიმბოლოებს
      result.append(char.upper())
    else:
      result.append(char)
  return "".join(result)

# მაგალითი
print(capitalize_every_other_char("abcdefg")) # aBcDeFg
print(capitalize_every_other_char("გამარჯობა")) # გᲐმᲐრᲯოᲑა
def count_words(s):
  """დაითვლის სიტყვების რაოდენობას სტრიქონში."""
  words = s.split()
  return len(words)

# მაგალითი
print(count_words("ეს არის სამი სიტყვა")) # 4
print(count_words("ერთი")) # 1
print(count_words("  სფეისებით  დაწყებული  ")) # 2
# პროგრამა (ფუნქციის სახით)
def format_phone_number(number_str):
  """ტელეფონის ნომერს აფორმირებს 'XXX-XX-XX-XX' სახეში (9-ნიშნა ნომრისთვის)."""
  # ვშლით ყველა არაციფრულ სიმბოლოს (თუ არის)
  digits = "".join(filter(str.isdigit, number_str))

  if len(digits) == 9:
    return f"{digits[0:3]}-{digits[3:5]}-{digits[5:7]}-{digits[7:9]}"
  else:
    return "არასწორი ნომრის სიგრძე"

# მაგალითი
print(format_phone_number("555123456")) # 555-12-34-56
print(format_phone_number("599-123-456")) # 599-12-34-56
def are_anagrams(s1, s2):
  """ამოწმებს არიან თუ არა ორი სტრიქონი ანაგრამები."""
  # ვშლით სფეისებს და ვაქცევთ პატარა ასოებად
  cleaned_s1 = s1.lower().replace(' ', '')
  cleaned_s2 = s2.lower().replace(' ', '')

  # ანაგრამები არიან, თუ მათი დალაგებული სიმბოლოების სია ერთნაირია
  return sorted(cleaned_s1) == sorted(cleaned_s2)

# მაგალითი
print(are_anagrams("listen", "silent")) # True
print(are_anagrams("ელექტრო", "ტელეკომ")) # True
print(are_anagrams("Hello", "World")) # False