Цикли

 

Цикли

Часто людям доводиться розв'язувати однакові завдання та повторювати монотонні дії. Тому такі завдання намагаються автоматизувати та делегувати машинам, які краще з цим впораються. 

Це, до речі, і є одним з головних завдань програмістів, які у своїй роботі не дуже люблять повторюватись. Тому для повторного виконання блоку коду вони розробили специфічні конструкції — цикли, у яких послідовність дій прописується лише один раз.

Водночас цикли бувають різні та їх умовно поділяють на:

  • цикли з відомою кількістю повторів (з параметром). Цей різновид характеризується тим, що вказана послідовність дій виконається вказану кількість разів. Наприклад, маємо завдання підтягтись 20 разів. Тоді, тіло циклу, яке описує одне підтягування, буде виконане 20 разів.
  • цикли з невідомою кількістю повторів (з умовою). Для цього циклу, повторення триватиме доти, доки не буде виконана умова для виходу з циклу. Повертаючись до підтягувань, завдання буде виконуватися, доки не настане втома.

Але зауважте, будь-який цикл можна перетворити як на цикл із параметром, так і на умовний цикл.

Цикл while

Оскільки на попередніх заняттях були розкриті умовні конструкції, знайомство з циклами почнемо з умовного циклу while. Загальна структура циклу виглядає таким чином:

while [умова]:
    [код]

Запишемо приклад, що демонструє роботу циклу:

var_1 = 0
while var_1 < 5:
    var_1+=1
    print(var_1)

Маємо (відео 1):

 Відео 1

Розглянемо роботу програми:

  • Спершу створили змінну var_1 та присвоїли їй значення нуль.
  • Починається цикл, у якому вказується умова, за якої var_1 має бути менше ніж 5, щоби він виконався.
  • Оскільки на цьому етапі змінна має нульове значення, цикл починає свою роботу.
  • Виконується цикл, у якому змінна збільшується на одиницю та виводиться на екран.
  • Оскільки умова для циклу виконується й далі, він продовжує працювати.
  • Коли тіло циклу виконалося знову, а var_1 стала дорівнювати 5, умова перестала виконуватись і цикл завершив свою роботу.

Зрозумівши, як працює цикл, не будемо зупинятись і виведемо кожен елемент списку на екран:

i=0
list_1 = ["Macbook", "Iphone", "Tesla", "Space X", "noodle"]
while i < len(list_1):
    print(list_1[i])
    i+=1

Отримаємо (відео 2):

 Відео 2

Якщо вивели на екран кожен з елементів, то можна їх модифікувати:

i=0
list_1 = ["Macbook", "Iphone", "Tesla", "Space X", "noodle"]
while i < len(list_1):
    list_1[i]= list_1[i]+" - "+ input(list_1[i]+" ")
    i+=1
print(list_1)

Маємо (відео 3):

 Відео 3

Але умову треба роботи такою, щоби рано чи пізно вона виконалась, інакше цикл стане нескінченним.

Наприклад:

i=0
while i < 5:
    print("infinity ")

Отримаємо (відео 4):

 Відео 4

Як бачимо, у цьому випадку доводиться вручну зупиняти програму, бо вона буде нескінченно працювати. Але нескінченний цикл використовується й дуже корисний для певних завдань. Зупинити роботу будь-якого циклу можна використанням оператора break. Використаємо його для зупинки нашої «нескінченності»:

i=0
while i < 5:
    print("infinity ")
    break

Результат (відео 5):

 Відео 5

А тепер, скористаємося нескінченним циклом для пошуку елементу всередині списку. Зверніть увагу, зазвичай нескінченний цикл оголошують записами "while True:" або "while 1:":

i=0
list_1 = ["Macbook", "Iphone", "Tesla", "Space X", "noodle"]
while 1:
    print(list_1[i])
    if list_1[i] == "Tesla":
        print("Hooray! Tesla!")
        break
    i+=1

Маємо (відео 6):

 Відео 6

Звісно, варто пам'ятати, що за відсутності шуканого елементу, циклі далі працював би нескінченно або до помилки. Тому додамо умову — «запобіжник», який дасть змогу цього уникнути:

i=0
list_1 = ["Macbook","Iphone", "Tesla", "Space X", "noodle"]
while 1:
    print(list_1[i])
    if list_1[i] == "Tesla":
        print("Hooray! Tesla!")
        break
    if i == len(list_1)-1:
        print("The fuse went off")
        break
    i+=1

Маємо (відео 7):

 Відео 7

А тепер змінимо шуканий рядок "Tesla" на рядок, що не існує у списку, "Android" й запустимо програму (відео 8):

 Відео 8

Як бачимо, «запобіжник» відпрацював і врятував програму, тому не забувайте додавати його під час роботи з нескінченними циклами.

Гра «Вгадай число»

Час використати набуті знання для створення власної гри. 

Як видно з назви, користувач має вгадати загадане комп'ютером число. В іншому випадку, необхідно надати підказку, введене ним число більше чи менше від загаданого. Коли користувач вгадує число, необхідно привітати його з перемогою і вказати кількість затрачених спроб.

cpx3Oz1s1wQ5GlOpBhrjxeMLGH_6oZQx
Малюнок 1

Технічне завдання отримано, тож приступимо до розробки. 

Оскільки комп'ютер має загадати число, воно має бути випадковим, тому імпортуємо модуль random й функцію randint(). Виведемо на екран рядки «"-------Guess my number-------"», «"You need to guess the number picked by enigmatic computer!"» та «"Number is in range from 1 to 10"», щоби сповістити користувача про запущену програму та його завдання. Створимо змінну, яка буде зберігати інформацію про загадане число:

import random
print("-------Guess my number-------")
print("You need to guess the number picked by enigmatic computer!")
print("Number is in range from 1 to 10")
magic_number = random.randint(1, 10)

Додамо змінну count, в якій буде зберігатися рахунок гри:

count = 0

Час задуматися про реалізацію алгоритму програми. Оскільки гра має тривати, доки користувач не вгадає число, скористаємося циклом while. Поки введене число не зрівняється з загаданим, цикл триватиме. Але в нашому коді не вистачає змінної, яка б зберігала число, загадане користувачем. Додамо її:

user_number = input()

Але так у цій змінній зберігатиметься рядок і з числом його не порівняти, тому додамо перетворення на число:

import random
print("-------Guess my number-------")
print("You need to guess the number picked by enigmatic computer!")
print("Number is in range from 1 to 10")
magic_number = random.randint(1, 10)
count = 0
user_number = int(input())

Тепер треба додати сам цикл while:

import random
print("-------Guess my number-------")
print("You need to guess the number picked by enigmatic computer!")
print("Number is in range from 1 to 10")
magic_number = random.randint(1, 10)
count = 0
user_number = int(input())
while user_number != magic_number:

Зараз виходить, що користувач одного разу введе значення і, якщо не вгадає, цикл перетвориться на нескінченний. Треба реалізувати введення числа всередині циклу, але якщо перенести змінну туди, виникне помилка, адже умова буде перевірятися до створення самої змінної. Але є вихід - оголосити змінну і присвоїти їй нульове значення до циклу. А вже в самому циклі користувач буде вводити значення:

import random
print("-------Guess my number-------")
print("You need to guess the number picked by enigmatic computer!")
print("Number is in range from 1 to 10")
magic_number = random.randint(1, 10)
count = 0
user_number = 0
while user_number != magic_number:
    user_number = int(input("Your number: "))

Оскільки на цьому етапі користувач ввів число, треба додати спробу до рахунку:

count+=1

Додамо підказки:

import random
print("-------Guess my number-------")
print("You need to guess the number picked by enigmatic computer!")
print("Number is in range from 1 to 10")
magic_number = random.randint(1, 10)
count = 0
user_number = 0
while user_number != magic_number:
    user_number = int(input("Your number: "))
    count+=1
    if magic_number > user_number:
        print("The magic number is greater than yours!")
    elif magic_number < user_number:
        print("The magic number is less than yours!")

Програма майже готова, лишається вивести на екран результат гри.

Готовий код:

import random
print("-------Guess my number-------")
print("You need to guess the number picked by enigmatic computer!")
print("Number is in range from 1 to 10")
magic_number = random.randint(1, 10)
count = 0
user_number = 0
while user_number != magic_number:
    user_number = int(input("Your number: "))
    count+=1
    if magic_number > user_number:
        print("The magic number is greater than yours!")
    elif magic_number < user_number:
        print("The magic number is less than yours!")
print("You Win! You guessed it on the", count, "try")

Зіграємо (відео 9):

 Відео 9

Сьогодні ми познайомилися з циклами, а конкретно з умовним циклом while. Дізнались, як працювати з ним та вберегтися від нескінченного циклу або ж використати його у своїх цілях, що продемонстрували під час створення власної гри, що захоплює.