Wednesday, June 24, 2015

თავი 5 (5,4 - 5,6)



5.4  "უსასრულო მარყუჟები" და break

ხანდახან არ იცი როდის დამთავრდება მარყუჟი, სანამ კოდის შუაში არ გახვალ. ამ შემთხვევაში შეგიძლია დაწერო უსასრულო მარყუჟი და გამოიყენო break ბრძანება მარყუჟიდან გამოსასვლელად. ეს მარყუჟი აშკარად უსასრულოა, იმიტომ რომ while ბრძანების ლოგიკური გამოსახულება არის მუდმივად True.

n = 10
while True:
            print n,
            n = n - 1
print 'Done!'

თუ მიქარავ და ამ კოდს გაუშვებ, სწრაფად ისწავლი როგორ გათიშო პითონი ან დენიდან გამორთავ კომპიუტერს. ეს პროგრამა იმუშავებს მუდამ, იმიტომ რომ მარყუჟის ზემოთ ლოგიკური გამოსახულება არის ყოველთვის True და ამ ფაქტის ძალით გამოსახულების მუდმივი მნიშვნელობაა True .
სანამ ესაა უფუნქციო უსასრულო მარყუჟი, ჩვენ შეგვიძლია ისევ გამოვიყენოთ ნიმუში  სასარგებლო მარყუჟის გასაკეთებლად  და კოდში ფრთხილად დავამატოთ break ბრძანება, რომელიც შესრულდება მაშინ, როცა კი ამის პირობა შესრულდება.

while True:
            line = raw_input('> ')
            if line == 'done':
                        break
            print line
print 'Done!'

მარყუჟის პირობაა True, რომელიც ყოველთვის მართალია, ამიტომ კოდი იმუშავებს მანამ, სანამ არ მიაღწევს break ბრძანებას. ყოველ ჯერზე  გამოჩნდება ახალი კუთხური ფრჩხილი და მომხმარებელი როცა დაწერს done - ს, break ბრძანება მარყუჟს გათიშავს. სხვა შემთხვევაში პროგრამა ყოველ ჯერზე  ექოსავით გაიმეორებს მომხმარებლის დაწერილს.აქაა მაგალითი:

> hello there
hello there
> finished
finished
> done
Done!

ეს გზა   while  მარყუჟის დასაწერად არის  გავრცელებული, იმიტომ რომ  ყოველთვის შეგიძლია შეამოწმო პირობა, და  შეგიძლია გამოსახო გაჩერების ბრძანება როგორც  დადებითად ("გააჩერე როცა ეს მოხდება") ასევე უარყოფითად ("გააგრძელე სანამ ეს მოხდება")

5.5 continue - თი დასრულებული გამეორება

ხანდახან გინდა, რომ გამეორების მარყუჟი (iteration of a loop) მორჩეს და დაუყოვნებლივ გადახტეს სხვა გამეორებაზე. ამ შემთხვევაში შეგიძლია გამოიყენო continue ბრძანება, რომ გადახტე შემდეგ გამეორებაზე, მიმდინარე გამეორების კოდის შესრულების გარეშე. აქაა მარყუჟის მაგალითი, რომელიც აკოპირებს  input-ს, სანამ მომხმარებელი არ დაწერს "done" - ს, თუმცა ხაზი, რომელიც იწყება დიეზის ნიშნით არ ამობეჭდავს (როგორც პითონის კომენტარებს)

while True:
      line = raw_input('> ')
      if line[0] == '#' :
            continue
      if line == 'done':
            break
      print line
print 'Done!'

ნიმუში სადაც დამატებულია continue .

> hello there
hello there
> # don't print this
> print this!
print this!
> done

ყველა ხაზი ამობეჭდილია გარდა იმ ხაზისა, რომელიც დაიწყო დიეზით, იმიტომ რომ, როცა continue ხორციელდება,  ეს ამთავრებს მიმდინარე გამეორებას და ხტება უკან while ბრძანებაზე ახალი გამეორების დასაწყებად. ასე ახტება print ბრძანებას.

5.6 განსაზღვრული მარყუჟები იყენებს for -

ხანდახან გვინდა გავაკეთოთ მარყუჟი, რათა შევადგინოთ სიტყვების სია ან ხაზები ფაილში ან ციფრების სია. ასეთ დროს შეგვიძლია ავაგოთ განსაზღვრული (definite) მარყუჟი, რომელიც იყენებს for ბრძანებას. while ბრძანებას ვეძახით უსასრულო მარყუჟს, იმიტომ რომ მარტივად ამარყუჟებს, სანამ რამე პირობა არ გახდება False, მაშინ როდესაც for მარყუჟი ამარყუჟებს ნაცნობ ელემენტებს, ასე რომ აკეთებს იმდენ გამეორებას რამდენი ელემენტიცაა მითითებული.
for მარყუჟის სინტაქსი არის while მარყუჟის მსგავსი.

friends = ['Joseph', 'Glenn', 'Sally']
for friend in friends:
            print 'Happy New Year:', friend
print 'Done!'

პითონში ცვლადი friends არის სია1 სამი სტრინგის და for მარყუჟი ხორციელდება ყოველი სტრინგისთვის და გამოაქვს შედეგი:

Happy New Year: Joseph
Happy New Year: Glenn
Happy New Year: Sally
Done!

for მარყუჟის ინგლისურიდან გადმოთარგმნა არ ხდება ისევე, როგორც while - ის შემთხვევაში, მაგრამ თუ იფიქრებ friends -ზე, როგორც კომპლექტზე, მაშინ გადმოითარგმნება შემდეგნაირად: "კომპლექტში სახელად friends, for მარყუჟის სხეულში თითოეული მეგობრისთვის შეასრულე ბრძანებები”
პითონში for და in არის განსაზღვრული სიტყვები ხოლო friend და friends - ცვლადები.