Professional Documents
Culture Documents
Python
ლ ე ქ ც ი ა 1 2 : კ ო ნ ტე ი ნ ე რ ე ბ ი ,
ი ტე რ ა ტო რ ე ბ ი ,
გ ე ნ ე რ ა ტო რ ე ბ ი
ლიკა სვანაძე
lika.s v anadze@bt u.edu.ge
for ციკლი სხვადასხვა ტიპის მონაცემებისთვის
§ for ციკლი შეიძლება გამოყენებული იყოს სხვადასხვა ტიპის
მონაცემებთან, მაგ. სტრიქონი, სია, tuple, სიმრავლე,
ლექსიკონი.
text= "Python"
for i in [3,6,2,3,1,8]: for i in {3,6,5,2,4,3}:
for i in text:
print(i) print(i)
print(i)
17.12.19 lika.svanadze@btu.edu.ge 2
კონტეინერი
§ კონტეინერი არის ობიექტი, რომელიც აერთიანებს სხვადასხვა ტიპის ობიექტებს, ან
წარმოადგენენ მონაცემთა მიმდევრობას. მაგალითად ჩაშენებული (built-in)
კონტეინერებია: list, tuple, set, dict.
double = [i*i for i in range(10)] შედეგი: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
print(double)
double = list(i*i for i in range(10)) შედეგი: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
print(double)
double = [i*i for i in range(10) if i%2==1] შედეგი: [1, 9, 25, 49, 81]
print(double)
17.12.19 lika.svanadze@btu.edu.ge 3
იტერატორი
§ იტერაცია ნიშნავს მონაცემებზე წვდომას და მათ დამუშავებას თანმიმდევრობით.
17.12.19 lika.svanadze@btu.edu.ge 4
იტერატორის შექმნა
§ იტერატორის შექმნა ხდება iter() ფუნქციის საშუალებით.
თავდაპირველად შევქმნათ რომელიმე მიმდევრობითი ტიპის (მაგ.
სიის) მონაცემი და გარდავქმნათ იტერატორში. შექმნილი ობიექტის
ტიპია list_iterator.
Python Console
>>> t=[1,4,3,2]
>>> my_iter=iter(t)
>>> type(my_iter)
<class 'list_iterator'>
17.12.19 lika.svanadze@btu.edu.ge 5
იტერატორის მეშვეობით ელემენტების დაბრუნება
17.12.19 lika.svanadze@btu.edu.ge 6
მაგალითი 1
შესრულება: შედეგი:
4
t=[4,5,6,7,3,5,3,1]
5
my_iter=t.__iter__()
6
while True:
7
try:
3
print(next(my_iter))
5
except StopIteration:
3
break
1
17.12.19 lika.svanadze@btu.edu.ge 7
გენერატორი
§ გენერატორის მეშვეობით შესაძლებელია იტერატორის შექმნა.
17.12.19 lika.svanadze@btu.edu.ge 8
მაგალითი 2
def my_gen(): გენერატორის შექმნა
n = 1
print('This is printed first')
yield n
n += 1
print('This is printed second')
yield n
შედეგი:
n += 1
print('This is printed at last')
yield n This is printed first
1
17.12.19 lika.svanadze@btu.edu.ge 9
მაგალითი 3
შექმენით (აღწერეთ) 5-ის ჯერადი რიცხვების გენერატორი. გენერატორის
მეშვეობით შექმენით იტერატორი და 10 ჯერ დაბეჭდეთ 5-ის ჯერადი რიცხვები
თანმიმდევრობით.
შესრულება შედეგი:
def gen5(): 5
i=5 10
while True: 15
if i%5==0: yield i 20
i+=5 25
30
b=gen5() 35
for i in range(10): 40
print(next(b)) 45
50
17.12.19 lika.svanadze@btu.edu.ge 10
სავარჯიშოები
• შექმენით სია, რომლის ელემენტებია 1-დან 100-მდე არსებული 5-ის ჯერადი რიცხვების კუბები. გამოიყენეთ for ციკლის
მოკლე ჩაწერის ფორმა. შესაბამისი ფუნქციის გამოყენებით იპოვეთ სიის მაქსიმალური ელემენტი.
• წინა მაგალითში არსებული სიისთვის შექმენით იტერატორი და StopIteration შეცდომის გამოსროლამდე
დაბეჭდეთ სათითაოდ იტერატორის ელემენტები next() ფუნქციის გამოყენებით.
• შექმენით სიმრავლე, რომლის ელემენტებია 1-დან 100-მდე არსებული 5-ის ჯერადი რიცხვების კუბები. გამოიყენეთ for
ციკლის მოკლე ჩაწერის ფორმა. შესაბამისი ფუნქციების გამოყენებით იპოვეთ სიმრავლის ელემენტების საშუალო
არითმეტიკული.
• წინა მაგალითში არსებული სიმრავლისთვის შექმენით იტერატორი და StopIteration შეცდომის გამოსროლამდე
დაბეჭდეთ სათითაოდ იტერატორის ელემენტები next() ფუნქციის გამოყენებით.
• შექმენით tuple ტიპის ობიექტი, რომლის ელემენტებია 1-დან 100-მდე არსებული 5-ის ჯერადი რიცხვების კუბები.
გამოიყენეთ for ციკლის მოკლე ჩაწერის ფორმა. შესაბამისი ფუნქციის გამოყენებით იპოვეთ tuple-‐ის სიგრძე
(ელემენტების რაოდენობა).
• წინა მაგალითში არსებული tuple ტიპის ობიექტისთვის შექმენით იტერატორი და StopIteration შეცდომის
გამოსროლამდე დაბეჭდეთ სათითაოდ იტერატორის ელემენტები next() ფუნქციის გამოყენებით.
• შექმენით გენერატორი, რომელიც სათითაოდ დააბურნებს რიცხვებს 1-დან 5-მდე. შექმენით შესაბამისი იტერატორი და
სათითაოდ გამოიძახეთ 1-დან 5-მდე მდე რიცხვები.
17.12.19 lika.svanadze@btu.edu.ge 11