Оператор while

Оператор while. Приклади


Зміст



1. Призначення оператора while. Загальна форма оператора while

Оператор while призначений для організації циклічного процесу в програмі. У мові програмування Python оператор while використовується у випадках, коли кількість повторень циклу наперед невідома (на відміну від оператора for). В операторі while наступний крок ітерації циклу визначається на основі істинності деякої умови.

Загальна форма оператора while має вигляд

while умова:
    інструкції

тут

  • умова – умова виконання рядка (рядків) інструкції;
  • інструкції – один оператор або набір операторів, які виконуються якщо значення умова=True. Якщо значення умова стає рівним False, то відбувається закінчення виконання оператора циклу while.

 

2. Приклади розв’язку задач на оператор while
2.1. Обчислення суми елементів списку

Умова задачі. Задано деякий список A який містить цілі числа. Використовуючи інструкцію while розробити програму, яка обчислює суму елементів списку.

# сформувати список та ініціалізувати значеннями змінні
A=[1,3,5,8,-3,10]
i=0
summ=0 # шукана сума

# цикл обчислення суми
while i<len(A):
    summ=summ+A[i]
    i=i+1
print("summ = ", summ) # summ = 24

Для визначення кількості елементів списку A використовується функція len(A).

У результаті виконання вищенаведеного коду буде отримано результат

summ = 24

 

2.2. Створити список заданої довжини та записати в нього задане число

У прикладі формуються два списки A та B різними способами з допомогою циклу while.

# створити список елементів
A=[]
n=10
i=0
while i<n: # в циклі формується список [0,1,2,3,4,5,6,7,8,9]
    A=A+[i]
    i=i+1

# сформувати новий список
B=[]
k=5 # число, яке записується в список B
n=4 # кількість чисел

# цикл while
i=0
while i<n: # формується список [5,5,5,5]
    B = B + [k]
    i=i+1

# вивести список A
i=0
print("Список A:")
while i<len(A):
    print(A[i])
    i=i+1

# вивести список B
i=0
print("Список B:")
while i<len(B):
    print(B[i])
    i=i+1

У результаті виконання вищенаведеного коду буде отримано результат

Список A:
0
1
2
3
4
5
6
7
8
9
Список B:
5
5
5
5

 

2.3. Створення списку чисел за умовою

Умова задачі. Задано число a (1<a<1.5). З чисел 1+1/2, 1+1/3, 1+1/4 …, надрукувати ті, які не менше a.

Розв’язок.

a=1.08
print("Число a = ", a)

n=2
t=1+1/n
print("Числа, які не менше a:")
while t>a:
    print(t)
    n=n+1
    t=1+1/n
print("-----------------------")

У результаті виконання вищенаведеного коду буде виведено наступний результат

Число a = 1.08
Числа, які не менше a:
1.5
1.3333333333333333
1.25
1.2
1.1666666666666667
1.1428571428571428
1.125
1.1111111111111112
1.1
1.0909090909090908
1.0833333333333333
-----------------------

 

3. Поняття вкладеної інструкції (оператору) while

Інструкція while може мати декілька рівнів вкладення. Вона може бути зовнішньою для інших інструкцій, наприклад, for, if, while. Також інструкція while може розміщуватись всередині інших інструкцій (for, if, while). Кількість рівнів (глубина) вкладення необмежена.

 

4. Приклади розв’язку задач, де інструкція while є зовнішньою для інших інструкцій
4.1. Підрахунок кількості входжень заданого рядка в списку рядків

У циклі while використовується вкладена інструкція if.

# Підрахунок кількості входжень заданого рядку в списку рядків
# Вхідні дані
LIST = [ 'abc', 'bcd', 'xvm', 'abc', 'abd', 'bcd', 'abc' ]
ITEM = str(input('Задайте рядок: '))

# обчислення
i=0
k=0
while i<len(LIST):
    if LIST[i]==ITEM:
        k=k+1
    i=i+1
print ("k = ", k)

У результаті виконання вищенаведеного коду буде отримано результат

Задайте рядок: bcd
k =   2

 

4.2. Визначення місяця, числа та дня тижня за порядковим номером дня в році

Задано ціле число k (1<k<365). Написати фрагмент коду, який визначає:

  • яким буде k-й день року: вихідний (субота, неділя);
  • яка буде дата (місяць та число).

У програмі використати цикл while.

Текст програми наступний:

# вхідні дані
print("Вхідні дані: ")
k = int(input('Номер дня в році: '))
first_day=3 # перший день року, 3 - середа
print("Перший день тижня в році: ", first_day)

# допоміжний список - кількість днів у місяцях року
MONTHS=[31,28,31,30,31,30,31,31,30,31,30,31]

# початкова ініціалізація перед обчисленням
tk=1 # поточне значення дня
tday=first_day # поточний день тижня
tmonth=1 # поточний номер місяця
tday2=1 # поточний номер дня в місяці tmonth

# цикл while - обчислення
while tk<k:
    # перейти на наступний день
    tday=tday+1
    tday2=tday2+1
    tk=tk+1
 
    # скоригувати день тижня  
    if tday>7:
        tday=1

    # скоригувати день місяця та номер місяць
    if tday2>MONTHS[tmonth-1]:
        tday2=1
        tmonth=tmonth+1 # перейти на наступний місяць
print("--------------------")
print("Результат: ")
print("День тижня: ", tday)
print("Номер місяця: ", tmonth)
print("Число: ", tday2)

У вищенаведеному коді для обчислення використовуються додаткові внутрішні змінні (об’єкти) tk, tday, tmonth, td2 та список MONTHS, який містить кількість днів у кожному місяці року. У прикладі цикл while містить декілька вкладених інструкцій присвоювання та дві іструкції if.

У результаті виконання вищенаведеного коду отримано наступний результат:

Вхідні дані:
Номер дня в році: 256
Перший день тижня в році: 3
--------------------
Результат:
День тижня: 6
Номер місяця: 9
Число: 13

Як можна побачити, 256-й день у невисокосному році попадає на 13 вересня, що відповідає Дню програміста (а що ще могло бути?).

 

4.3. Підрахунок кількості входжень заданого символу в рядку

Задано список рядків. У кожному рядку підрахувати кількість входжень заданого символу.

Програмний код на мові Python буде наступний

# кількість входжень символу у списку рядків
ListStr=['text', 'file', 'notepad', 'windows', 'hello']
c='t' # символ 't'
ListK=[] # кількість входжень
i=0
while i<5:
    j=0
    k=0
    while j<len(ListStr[i]):
        if c==ListStr[i][j]:
            k=k+1
        j=j+1
    ListK=ListK+[k]
    i=i+1
print(ListK) # ListK = [2, 0, 1, 0, 0]

Після виконання вищенаведеного коду буде отримано наступний результат

[2, 0, 1, 0, 0]

 

5. Приклади розв’язку задач, в яких інструкція while є вкладеною
5.1. Занулення двовимірного списку

В даному прикладі в інструкції while реалізована інша, вкладена інструкція while. Реалізується занулення двовимірного списку чисел з використанням вкладеної інструкції while

# задано деякий список A розміром 3*4
A=[ [1, 3, -2, -3], [0, 8, 1, -3], [2, 5, 3, 1]]

# занулення списку A
# використання вкладеного оператора while
i=0 # рядки
while i<3:
    j=0
    while j<len(A[i]):
        A[i][j]=0
        j=j+1
    i=i+1

# виведення списку A
print("Список A:")
i=0
while i<3:
    j=0
    while j<len(A[i]):
        print("A[", i,"][",j,"] = ", A[i][j])
        j=j+1
    i=i+1
print("--------------------")

 

5.2. Задача про бики, корови і телята

Умова задачі. Є в наявності 100 гривень. Скільки биків, корів та телят можна купити на всі ці гроші, якщо плата за бика – 10 гривень, плата за корову – 5 гривень, плата за теля – 0.5 гривень. Обов’язково потрібно купити щонайменше по одному бику, одній корові та одному теляті.

Розв’язок. Є декілька рішень цієї задачі. У даному випадку, задача розв’язується спрощеним для розуміння способом з використанням вкладених циклів while.

# задача про бики, корови і телята
x=1
while x<=9:
    y=1
    while y<=19:
        z=1
        while z<=198:
            cost=10*x+5*y+0.5*z
            if cost==100:
                print("x=", x,"; y=", y, "z=", z)
            z=z+1
        y=y+1
    x=x+1

У результаті вищенаведеного коду на екран виводиться список можливих варіантів (комбінацій), які утворюють множину розв’язків даної задачі.

 

6. Загальна форма оператора while, що передбачає використання інструкції break

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

while <умова1>:
    <інструкції1>
    if <умова2>: break #вийти з циклу
    if <умова3>: continue # перейти на початок циклу до умова1
else:
    <інструкції2> # виконується, якщо не була використана інструкція break

тут

  • умова1 визначає, чи потрібно виконувати наступну ітерацію циклу. Якщо значення умова1 рівне True (справджується або істинне), то наступна ітерація циклу виконується;
  • умова2 визначає, чи повинен виконуватись оператор break;
  • умова3 визначає, чи повинен виконуватись оператор continue;
  • інструкції1, інструкції2 – один або декілька операторів.

Вищенаведена форма оператора циклу while працює наступним чином. Спочатку відбувається перевірка умови умова1. Якщо умова1 справджується, відбувається виконання інструкцій інструкцції1.

В тілі оператора циклу while також перевіряються умови умова2, умова3. Якщо виконується умова2, то відбувається вихід з циклу. Якщо виконується умова3, то відбувається перехід до наступної ітерації циклу до перевірки умова1.

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

 

7. Приклад використання оператора while, що передбачає використання інструкції break

У прикладі здійснюється пошук (визначення наявності) заданого елементу в списку. Якщо елементу не знайдено, то виводиться відповідне повідомлення.

# задано список
List=[2,8,3,4,3,5,2,1,0,3,4,4,5,8,7,7,5]

print("Заданий список:", List)

# ввід елементу, який потрібно знайти
t = int(input("Елемент, який потрібно знайти: "))

# цикл
i=0
while i<len(List):
    if List[i]==t:
        print("Елемент ", t, " є в списку")
        break
    i=i+1
else:
    print("Елементу ", t, " немає в списку")

У вищенаведеному циклі while умовою виконання циклічного процесу є перевірка

i<len(List)

В тілі циклу while перевіряється, чи значення шуканого елементу t співпадає зі значенням елементу List[i] списку

if List[i]==t:
    ...

Якщо співпадіння знайдено, то немає сенсу продовжувати подальший обхід списку. Тому, в тілі оператора if викликається інструкція break.

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

...
else:
    print("Елементу ", t, " немає в списку")

Після запуску на виконання вищенаведеної програми, буде виведено наступний результат

Заданий список: [2, 8, 3, 4, 3, 5, 2, 1, 0, 3, 4, 4, 5, 8, 7, 7, 5]
Елемент, який потрібно знайти: 4
Елемент 4 є в списку

 


Зв’язані теми