Інструкція циклу з передумовою While.

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

У мові Python можлива організація циклів двох видів:

  • цикл з передумовою – while;
  • цикл з параметром – for.

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

Інструкція циклу з передумовою – while.

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

Одноразове виконання інструкцій циклу називаєтьсяітерацією.

В процесі виконання інструкцій циклу відбувається заміна значень змінних, що входять до вказаної умови у якості операндів. Завдяки чому при N-кратному виконанні циклу змінюється і значення логічного виразу (умови) з True на False. У цьому випадку, виконання циклу закінчується і управління передається на наступну інструкцію, яка стоїть після тіла циклу.

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

Циклwhile служить для організації N-кратного виконання групи інструкцій (тіла циклу) до тих пір, поки залишається істинним умова виконання циклу.

Схема циклу з передумовою.

  • while логічний_вираз:
    • блок_інструкцій_1
    • блок_інструкцій_2
    • блок_інструкцій_3
    • блок_інструкцій_N
  • [else:
    • блок_інструкцій_N+1]

Зауважимо, що ключове слово else: з блоком інструкцій можна опустити при складанні інструкції циклу while, на це вказують квадратні дужки. Якщо, даний блок інструкцій є присутнім, він буде виконаний один раз після закінчення циклу.

Приклад: створити програму, яка буде виводити на екран, в рядок, числа від 1 до n:

  • n = int(input('введіть кількість цифр = '))
  • i = 0
  • while i < n:
    • i = i + 1
    • print(i, end = ' ')

Накопичувачі суми і добутку

В циклах, доволі часто треба виконувати дії з отримання суми або добутку. Для цих цілей використовуються накопичувачі. Прикладом такого накопичувача є лічильник (рахує кроки циклу), який збільшує своє значення на одиницю з кожною ітерацією циклу. Для використання таких накопичувачів необхідна змінна цілого або дійсного типу , яка приймає початкове значення 0 для накопичення суми і початкове значення 1 для накопичення добутку поза тілом циклу (до початку циклу).

Приклад: створити програму, яка буде обчислювати суму ряду 1+2+3+…+n та виводити її на екран:

  • n = int(input('введіть кількість членів ряду = '))
  • i = 0
  • sum = 0
  • while i < n:
    • i = i + 1
    • sum = sum + i
  • else:
    • print('Сума', n, 'членів ряду =', sum)

Використання в циклах випадкових чисел.

Інколи, трапляються завдання, в яких необхідно генерувати випадкові числа, для цього зручно застосовувати генератор псевдо-випадкових чисел. Реалізація такого генератора, у мові python, знаходиться в модулі random. Цей модуль містить досить багато різноманітних функцій, які генерують випадкові числа, ми, поки що, розглянемо тільки функцію randint.

Ця функція має два аргументи randint (a, b), які, власне, визначають відрізок безлічі цілих чисел з якого будуть отримані випадкові числа, тобто випадкове ціле число видається в діапазоні від нижньої межі a до верхньої межі b включно.

Приклад: створити програму, яка буде виводити на екран, в рядок, десять випадкових чисел від 1 до n:

  • import ramdom
  • n = int(input('введіть кількість цифр = '))
  • i = 0
  • while i < 10:
    • i = i + 1
    • print(random.randint(0, n), end = ' ')

Інструкції управління циклом.

Взагалі, звичайний цикл завершується, коли логічний вираз повертає значення False. Але, можна перервати виконання циклу через інструкцію break.

Інструкція break перериває виконання циклу while або for і передає управління програмою інструкції, що стоїть одразу за блоком циклу. Блок else не буде виконуватися, якщо цикл переривається інструкцією break або continue.

Приклад: створити програму, яка буде отримувати від користувача довільні числа і визначати їх суму. Введення чисел повинно припинятися, коли програма отримує від’ємне число або нуль.

  • sum = 0
  • while True:
    • a = int(input('Введіть число '))
    • if a == 0 or a < 0:
      • break
    • sum = sum + a
  • print('Сума чисел =',sum)

Інструкція continue перериває виконання тільки поточної ітерації і передає виконання на обчислення логічного виразу. При цьому інструкції, наступні за continue до кінця блоку, ігноруються.

Приклад: створити програму, яка буде отримувати від користувача довільні числа і визначати їх суму, від’ємні числа ігноруються. Введення чисел повинно припинятися, коли програма отримує число нуль.

  • sum = 0
  • while True:
    • a = int(input('Введіть число '))
    • if a == 0:
      • break
    • if a < 0:
      • continue
    • sum = sum + a
  • print('Сума чисел =',sum)

Вкладені цикли

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

  • while логічний_вираз_1:
    • блок_інструкцій_1
    • блок_інструкцій_M
    • while логічний_вираз_2:
      • блок_інструкцій_N
      • блок_інструкцій_X
    • [else:
      • блок_інструкцій_X+1]
  • [else:
    • блок_інструкцій_Z]

Приклад: створити програму, яка буде виводити на екран таблицю множення.

  • i = 1
  • while i < 10:
    • j = 1
    • while j < 10:
      • print(j*i, end ='\t')
      • j += 1
    • i += 1
    • print()