|
|
Програмування мовою Python: основи та практика Електронний посібник |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ТЕМА 6. ЛОГІЧНІ ВИРАЗИ І ЛОГІЧНИЙ ТИП
ДАНИХ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Часто виникає потреба у програмуванні
та у повсякденному житті виконати дії кілька разів. Це може бути здійснено за
допомогою циклів, які дають змогу повторювати операції. Цикл складається з двох частин: заголовка
та тіла. У заголовку вказується умова, за якої цикл
виконуватиметься, а тіло визначає дії, які повторюються. Наприклад,
подивімося на ситуацію з першокласником, який має гроші на морозиво. Щоб
перевірити, чи вистачить грошей, він купує морозиво і перевіряє залишок.
Процес роботи циклу while полягає в обчисленні логічного виразу: якщо він істинний, виконується тіло
циклу і умова знову перевіряється. Це триває доти, поки умова не стане
хибною. Якщо умова спочатку хибна, тіло циклу не виконується. У циклі while важливо, щоб умова перевірялася коректно, тобто значення логічного виразу було встановлене до
першої перевірки. Також для завершення циклу умова має змінюватися. Цей цикл
часто використовують, коли не можна точно визначити кількість повторень.
n = int(input()) length
= 0 while n > 0: n = n // 10 length = length + 1 print(length)
n=int(input()) s=0 i=1 while i<n: s=s+i i=i+2 print(‘Сума непарних чисел =‘,s)
Тип діапазон
(range) є незмінюваною послідовністю цілих чисел.
За функцією
range(5)
отримаємо діапазон в із елементів 0, 1, 2, 3, 4 За функцією
range(1,
5) отримаємо діапазон в із елементів 1, 2, 3, 4 За функцією
range(0,
10, 3) отримаємо діапазон в із елементів 0, 3, 6, 9 Для отримання діапазону, в якому значення зменшуватимуться, необхідно використовувати функцію range з трьома параметрами.
Третій параметр має бути від’ємним, а перший ‒ більшим ніж
другий. За функцією
range(0,
-5, -2) отримаємо діапазон в із елементів 0, -2, -4. Проте вивести на екран елементи
утвореного діапазону звичайними методами неможливо, зокрема:
Можна лише перевірити приналежність деякого числа до діапазону, використовуючи оператор in.
Ще одне зауваження стосується терміна віртуальний. Чому
ми говоримо про числову послідовність, сформовану функцією range(), як про віртуальну? Насправді функція повертає деякий об’єкт, який допускає
з собою таке поводження, як наче б це була послідовність
чисел. Проте, якщо ми присвоїмо результат функції range() деякій змінній і потім захочемо перевірити значення цієї змінної, послідовності ми не побачимо ‒ буде формальне позначення результату з посиланням на назву функції range(). Щоб наочно побачити, що ж «заховано» всередині,
можна скористатися функцією формування списків list(). Як аргумент цій функції передається результат виклику функції range(). Наприклад, результатом виразу list(range(1,6)) є список [1,2,3,4,5]. Однак звертаємо увагу, що для використання функції range() в операторі циклу for ніяких додаткових
дій щодо «візуалізації» віртуальної послідовності робити не потрібно. Крім циклу while, у Python
також є цикл for, який дає змогу перебирати
всі елементи у певній послідовності або наборі, наприклад, рядку, списку,
словнику чи файлі. Він дає змогу виконати певну операцію для кожного елементу
послідовності без необхідності працювати з індексами чи дбати про кількість
елементів. Порівняно з оператором циклу while,
оператор циклу for
можна було б назвати більш
«спеціалізованим». З одного боку, оператор дуже гнучкий і ефективний. З
іншого, його успішне використання може викликати певні труднощі, так би мовити, ідеологічного характеру.
На початку, індексній
змінній надається значення першого елементу послідовності і тоді виконується
блок інструкцій. Після цього індексній змінній надається значення наступного
елементу в послідовності. Це триває до того моменту, коли індексна змінна
отримає всі значення з послідовності. Цикл for часто використовується
для виконання операцій над усіма елементами послідовності або для виконання
певної операції стільки разів, скільки елементів у послідовності. Хоча менш універсальний, застосовується швидше за цикл while.
Команди
в else-блоці виконуються фактично після завершення оператора
циклу, як би ми його розуміли
без else-блоку.
Весь «виграш» від else-блоку в тому, що якщо робота оператора циклу закінчується
внаслідок виконання інструкції break, то команди в блоці else не виконуються.
n=int(input()) for i in range(1,n): print(i**2) Якщо значення змінної n буде дорівнювати нулю або від’ємне, то
тіло циклу не виконається жодного разу.
print("Сума натуральних
чисел") n=100 # Кількість
доданків # Формуємо текст для
відображення результату text="1+2+...+"+str(n)+"=" # Змінна для запису
суми s=0 # Оператор циклу для
обчислення суми for i in range(1,n+1): # Додаємо доданок до
суми s=s+i # Відображаємо
результат print(text,s)
for i in range(10,0,-1): print(i)
n=int(input()) if n%2==0:n=n+1 m=int(input()) s=0 for i in range(n,m+1,2): s=s+i print(‘Сума непарних чисел =‘,s) У цій програмі спочатку уточнюється початок проміжку
так, щоб початком було перше непарне число із
заданого проміжку. Потім за функцією
range(n,m+1,2) формується діапазон всіх непарних чисел із заданого
проміжку і відбувається їх підсумовування.
n=int(input()) if n%2==0:n=n+1 m=int(input()) s=0 for i in range(n,m+1,2): s=s+i if i%5==0: break else: print(‘Сума не містить доданку, що ділиться на 5’) print(‘Сума непарних чисел =‘,s)
Оператор continue призначений
для переривання поточної ітерації циклу і переходу
до наступної. Тобто оператори,
що ітимуть в тілі циклу після виклику continue,
на цьому кроці
виконуватися не будуть.
n=int(input()) if n%2==0:n=n+1 m=int(input()) s=0 for i in range(n,m+1,2): if i%5==0: continue s=s+i print(‘Сума непарних чисел =‘,s) Під час виконання тіла циклу, коли
значення змінної i ділитиметься націло на 5 (залишок
від цілочисельного ділення i на 5 дорівнює 0), відбувається перехід на
наступний елемент послідовності. Оператор break призначений для дострокового припинення роботи циклу (for або while),
тобто зупинки виконання тіла циклу, навіть якщо умова виконання циклу ще не набула значення False
або послідовність елементів не закінчилася. Зрозуміло, інструкцію break
варто викликати тільки всередині інструкції if,
тобто вона має
виконуватися тільки за виконання якоїсь особливої умови.
n=int(input()) if n%2==0:n=n+1 m=int(input()) s=0 for i in range(n,m+1,2): s=s+i if i%5==0: break print(‘Сума непарних чисел =‘,s)
n=int(input(‘Вкажіть n’)) for i in range(1,n+1): for j in range(1,i+1): print(j,end=‘‘) print() Завдання для самоперевірки
Ø Оператор
циклу while дає змогу багаторазово
виконувати визначений наперед набір команд. Ø Після ключового слова while в операторі
циклу вказується умова. Оператор
виконується, поки умова істинна. Умова перевіряється на
початку виконання оператора і потім кожен раз після виконання групи команд оператора циклу. Ø Оператор
циклу for зручний у тому разі, коли необхідно перебрати елементи
певної послідовності. Після ключового слова for указується змінна для виконання перебору елементів послідовності, яка так само розміщується після ключового слова in. Змінна
послідовно набуває значення елементів послідовності, і для кожного такого
значення виконується блок команд оператора
циклу. Ø Як
послідовність, яка вказується в операторі
циклу for,
можна, крім іншого, використовувати текст,
списки або віртуальну числову послідовність, створену за допомогою функції range(). Ø Інструкції break і continue використовуються
в операторах циклу while і for відповідно для припинення
виконання оператора циклу або для припинення
виконання поточного циклу. Ø В
операторах циклу (while і for) може використовуватися else-блок, який виконується
після закінчення роботи оператора і за умови, що закінчення роботи
оператора циклу не пов’язане
з виконанням інструкції break.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||