Цикъл в Python

Цикли в Python

Циклите са полезна и често използвана програмна конструкция във всички съвременни езици за програмиране. Ако искаме да автоматизираме една повтаряща се задача или да предотвратим писането на повтарящ се код, използването на цикъл е най-добрия вариант за това.

Цикълът е конструкция, която се състои от условие и тяло. Циклите са набор от команди, които се изпълняват многократно, докато не бъде изпълнено определено условие. Това условие често се нарича условие за край, а наборът от команди, които се изпълняват многократно се наричат тяло на цикъла. Всяко изпълнение на тялото на цикъла се нарича итерация. След като условието за край се удовлетвори, програмата приключва с действията в цикъла и продължава с изпълнението на следващите команди от програмата.

В Python има два вида цикли:

  • цикъл for – с точен брой итерации. Цикълът for има управляваща променлива, която приема последователно стойности от дадена крайна редица.
  • цикъл while – с условие. В началото на цикъла while има условие. Ако условието е изпълнено, се изпълнява една итерация, след което отново се проверява условието. Ако условието е изпълнено, се изпълнява втора итерация и т.н. Ако условието не е изпълнено, тялото на цикъла се пропуска и програмата изпълнява следващата след цикъла команда.

Цикъл for

Цикълът for има следния формат:

for i in sequence:
     # тяло на цикъла

Променливата i получава последователно стойности от множеството sequence. Тази променлива наричаме управляваща променлива. Променливата i получава първата си стойност и се изпълнява първата итерация на цикъла. След това i получава втора стойност и се изпълнява втора итерация на цикъла и т.н., докато i получи всичките стойности от даденото в sequence крайно множество от стойности. Множеството sequence може да се зададе по различен начин.

Функция range()

Често в цикъла for се използва функцията range(). Форматът на тази функция e:

range(start, stop, step)

Функцията range има три параметъра – начало, край и стъпка. Функцията връща редица от числа, която започва от числото start и свършва преди числото stop. Числата в редицата се увеличават с дадената стъпка. По подразбиране стъпката е 1, т.е. числата нарастват с единица. В този случай стъпката може да не се пише.

Например функцията

range(0, 10)

връща редицата [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]. Когато стъпката е 1, можем да запишем само range(10).

Ако искаме да се получи редица, в която числата да са през 2, трябва да запишем стъпката – 2. Например функцията

range(0, 10, 2)

ще върне редицата [0, 2, 4, 6, 8].

Задача 1

Променете кода така, че да отпечатва нечетните числа до 100 и техните кубове.

for i in range(2, 100, 2) :
   print(i, i**2)

Да разгледаме кода. Управляващата променлива приема стойностите 2, 4, 6, 8, … , 98.

Програмата отпечатва четните числа и техните квадрати до 100:

За да се приемат нечетните стойности трябва да използваме функцията в следния формат:

range(1, 100, 2).

За да се отпечатват кубовете, трябва да се промени степенуването.

for i in range(1, 100, 2) :
   print(i, i**3)

Използване на списък

Управляващата променлива i може да получи своите стойности от елементите на списък.
Например в следващия код i получава последователно стойностите „я”, „еш” и „ее”. Чрез кода се отпечатва глаголът „пее” в първо, второ и трето лице сегaшно време.

for i in ["я", "еш", "е"] :
   print("пе" + i)

Да разгледаме още един пример. В следващия код променливата col взема последователно стойностите от списъка и така цветът на костенурката може да се промени на червен, син и зелен. 

for col in ["red", "green", "blue"] :
   turtle.color(col)

Задача 2

Запишете код, с който да отпечатвате имената на балканските столици и броя букви в името на града.

За решението на задачата трябва да се състави списък, в който като елементи да се въведат столиците на всички балкански държави. За отпечатване на броя букви в името на града да припомним функцията len(string), която връща броя на символите в символния низ string.

capitals = ["София""Атина""Букурещ"...]
for i in capitals :
   print(i, len(i))

('София', 5)
('Атина', 5)
('Букурещ', 7)
('Белград', 7)...

Цикъл while

Логически константи

Като резултат от операторите за сравнение и логическите операции И, ИЛИ, НЕ получаваме Истина = 1 или Лъжа = 0.
В Python използваме логическите константни True (Истина) и False (Лъжа).

while условие:
    тяло на цикъла

При цикъл while командите от тялото на цикъла се изпълняват, докато условието е удовлетворено. Първо се проверява условието. Ако условието е изпълнено, т.е. има стойност True, се изпълняват командите от тялото на цикъла.

Възможно е цикълът while да не се изпълни. Ако при срещане на командата while условието не се удовлетворява, т.е. има стойност False, то програмата прескача цикъла while и преминава към изпълнение на следващата след цикъла команда.

Безкраен цикъл

Цикълът for винаги има край, тъй като управляващата променлива взима краен брой стойности.

Цикълът while може да бъде безкраен. Такъв е цикълът while True : …. Обикновено в условието на цикъла while има променлива, която трябва да се променя в тялото на цикъла.

В следващия код променливата number не се променя в тялото на цикъла и стойността ѝ винаги е 1. Условието (1 < 10) винаги е изпълнено и програмата винаги ще отпечатва стойността на променливата number, т.е. числото 1.

number = 1
while number < 10 :
    print(number)

В следващия стойността на променливата number се променя – всеки път се увеличава 2 пъти. Програмата отпечатва стойностите 1, 2, 4 и 8. По време на 4-тата итерация стойността на number става 16. Условието 16 < 10 е False и цикълът while приключва.

number = 1
while number < 10 :
    print(number)
    number = number * 2

Оператор break

Понякога е добре да можем да съчетаем безкраен цикъл с команда, която да го прекъсва. Такава командата е командата break. При нейното срещане, програмата прекратява изпълнението на цикъла и преминава на първата команда след цикъла. Има случаи, в които бихме желали цикълът да се изпълни поне веднъж. Например, когато пишем програма, която очаква от потребителя да въведе определена стойност. Цикълът трябва да се изпълни поне веднъж, за да има възможност потребителя да въведе стойността. Ако тази стойност не отговаря на изискванията, цикълът трябва да продължи да работи и да поиска отново въвеждане на стойността. Ако потребителят въведе очакваната стойност, цикълът ще спре и ще позволи да се изпълнят следващите инструкции от програмата. Този подход често се нарича контрол на входните данни.

Python няма вградена команда за създаване на такъв цикъл, но е в състояние да изпълни тези функционалности, чрез използване на разгледания вече цикъл while.

Операторът break ни позволява да контролираме изпълнението на цикъла while. Операторът break незабавно прекратява текущата итерация и предизвика излизане от цикъла.

Задача 3

Напишете код в Python за отпечатване на четните естествени числа до 100 чрез цикъл while.

Въпроси и задачи

3*. Разгледайте и обяснете действието на кода:

password = "python"
counter = 0
while True :
    word = input("Парола:")
    counter = counter + 1
    if word == password :
       break
    if word != password and counter > 2 :
       break

 

В безкраен цикъл потребителят въвежда парола. Ако паролата е правилна се изпълнява командата break и се излиза от цикъла. Ако паролата не е вярна, но са направени повече от 2 опита за въвеждане, също се стартира командата break и се излиза от цикъла.

Така може да се програмира въвеждане на парола от потребителя. Потребителят може да въвежда паролата или докато я въведе правилно или докато направи повече от 2 опита.