🧵 თემა: სტრიქონები Python-ში¶
🔹 რა არის სტრიქონი (String)?¶
სტრიქონი — ეს არის სიმბოლოების მიმდევრობა, რომელსაც ვიყენებთ ტექსტური მონაცემების შესანახად.
Python-ში სტრიქონები იწერება ბრჭყალებში:
სტრიქონი მიეკუთვნება საბაზისო ტიპს 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 (რეკომენდებული)¶
2️⃣ format() მეთოდი¶
3️⃣ %-ფორმატირება (ძველი სტილი)¶
🔹 სტრიქონების გადაქცევა სიად და პირიქით¶
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¶
მაგალითი 2¶
მაგალითი 3¶
sentence = "I love programming in Python"
if "Python" in sentence:
print("🎯 სტრიქონში მოიძებნა სიტყვა Python")
🧠 სავარჯიშოები (20 ამოცანა)¶
მარტივი დონე (1–10)¶
- შეიყვანე სტრიქონი და დაბეჭდე მისი სიგრძე.
- დაბეჭდე სტრიქონის პირველი და ბოლო სიმბოლო.
- გადააქციე მომხმარებლის შეყვანილი ტექსტი დიდ ასოებად.
- მომხმარებელმა შეიყვანოს ორი სიტყვა — გააერთიანე ერთ სტრიქონად.
- შეამოწმე შეიცავს თუ არა სტრიქონი სიტყვას
"Python". - მომხმარებელმა შეიყვანოს ტექსტი და დაითვალე რამდენი
"a"არის მასში. - დაბეჭდე სტრიქონის შუა სიმბოლო.
- წაშალე სტრიქონის წინ და უკან არსებული ცარიელი ადგილები.
- შეამოწმე იწყება თუ არა სტრიქონი
"Hello"-თი. - დაბეჭდე სტრიქონის სიმბოლოები უკუღმა.
საშუალო სირთულე (11–20)¶
- მომხმარებელმა შეიყვანოს წინადადება — დაითვალე რამდენი სიტყვაა მასში.
- მომხმარებელმა შეიყვანოს სტრიქონი — შეცვალე ყველა
" ""_"-ით. - ტექსტიდან ამოიღე პირველი სამი სიმბოლო და ბოლო ორი.
- შეამოწმე სტრიქონი პალინდრომია თუ არა (წინიდან და უკანიდან ერთნაირია).
- შექმენი ფუნქცია, რომელიც მიიღებს სტრიქონს და დააბრუნებს
"მოკლეა"ან"გრძელია"იმის მიხედვით, თუ რამდენია სიგრძე. - მომხმარებელმა შეიყვანოს სახელი და ასაკი — დაბეჭდე ფორმატირებულად f-string-ით.
- მოაშორე სტრიქონიდან ყველა
"!"სიმბოლო. - დათვალე, რამდენი ხმოვანია (ა,ე,ი,ო,უ) არის ტექსტში.
- შეიყვანე ტექსტი და დაბეჭდე მხოლოდ დიდი ასოებით დაწყებული სიტყვები.
- დაწერე ფუნქცია, რომელიც მიიღებს ორ სტრიქონს და შეადარებს მათ სიგრძეს — დააბრუნებს უფრო გრძელს.
🔚 შეჯამება¶
სტრიქონები Python-ში წარმოადგენს ერთ-ერთ ყველაზე მნიშვნელოვან მონაცემთა ტიპს.
მათზე შეგვიძლია განვახორციელოთ:
- სიმბოლოს წვდომა და დაჭრა
- ფორმატირება
- ძიება და ჩანაცვლება
- მეთოდების ფართო სპექტრი ტექსტის მოსამუშავებლად
👉 თემის კარგად დასამუშავებლად რეკომენდებულია ამოცანების ყველა ვარიანტის გაშვება და ტესტირება.
#პირველი და ბოლო სიმბოლო
text = input("შეიყვანე სტრიქონი: ")
print("პირველი:", text[0])
print("ბოლო:", text[-1])
#შეიცავს თუ არა "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])
#სიტყვების რაოდენობა წინადადებაში
sentence = input("შეიყვანე წინადადება: ")
words = sentence.split()
print("სიტყვების რაოდენობა:", len(words))
#პალინდრომის შემოწმება
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("შეიყვანე ტექსტი: ")
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