Заняття 5
До
моменту вивчення циклів у школі
програмування для багатьох школярів є чимось складним, вони не розуміють
переваг комп’ютера
над тими самими діями, виконаними «вручну». Звичайно, швидше учні розв’яжуть задачі на слідування та розгалудження вручну, ніж напишуть програму і
побачать результат роботи на екрані. Саме цикли показують переваги
програмування над самостійним розв’язуванням задачі. Отже, цикли …
На
мові PYTHON є два види циклів: перелік і умовний. Розпочнемо з
першого.
Цикл
«перелік» записується так:
for i in range(n):
тіло
циклу
Змінна і пробігає значення певного діапазону
записаного у функції range() і для кожного значення виконується деяка послідовність
команд, яка називається тілом циклу. Як видно із запису, тіло циклу знаходиться
правіше оператора for.
Розглянемо
параметри функції range(). У наведеному
записі змінна n задає
інтервал від 0 до n-1 включно (всього n значень). Тобто, спочатку змінна і набуває значення 0 і для цього значення виконуються всі команди у
циклі. Наступне значення змінної і є
1, потім 2, потім 3 і т.д., поки не досягне значення n, для якого цикл вже не виконується. У випадку запуску
циклу не з нуля, то вводиться ще один параметр – початкове значення. Наприклад,
for i in range(3,n):
тіло
циклу
Значення
змінної і розпочинається з 3, потім
4, і т.д. і закінчується n-1.
Якщо
ввести ще один параметр, то отримаємо …Спробуйте зрозуміти самостійно
:)
n=10
for i in range(3,n,2):
print(i, end=’ ’)
Програма
виведе результат:
3
5 7 9
Здогадалися?
Змінна і змінює значення з певним
кроком, який задається у третьому параметрі. Більш формально можна сказати так:
Функція
range(x,y,d) задає інтервал від х
до y-1 включно з кроком d, тобто x,
x+d, x+2d, x+3d,
… поки не досягне значення, рівного y
або більше, для яких вона не виконується.
Якщо значення d<0, то повинно бути x>y. Наприклад, для виведення чисел від 100 до 1 потрібно
записати так:
for i in range(100,0,-1):
print(i, end=’ ’)
Розглянемо
цикл з умовою. Цей цикл записується практично так само як і в PASCAL, тільки
замість оператора do ставиться
двокрапка
x=1
while x<10:
print(x**2)
x+=2
Програма
виводить у окремих рядках квадрати непарних одноцифрових чисел. Зверніть увагу,
що тіло циклу знаходиться правіше оператора while.
Звичайно,
що умова циклу може бути як проста так і складна. Наприклад, для того щоб цикл
повторювався, поки не дотягнеться певний результат, наприклад, поки позиція
об’єкта (i,
j) не співпаде з координатою (x, y), цикл
запишеться так:
while
not(x==i and y==j):
тіло циклу
Якщо
під час виконання циклу потрібно відокремити окремий випадок, наприклад, не
опрацьовувати його або вийти з циклу, то для цього використовуються оператори continue та break. Перший оператор переходить
на початок циклу (до наступної ітерації), не опрацьовуючи дані, а другий виходить
із циклу. Звичайно, для цих операторів всередині тіла циклу повинна прописана
умова, для яких вона виконується.
Наприклад, при виведенні коренів рівняння (х^3+x^2-10x+8)/(x^2-6x+5)=0 в діапазоні [0;10] необхідно пропускати пошук і виведення кореня для
тих випадків, коли знаменник дорівнює нулю, тому слід використати оператор continue.
for x in range(11):
if x**2-6*x+5==0:
continue
if x**3+x**2-10*x+8==0:
print(x, end=’ ‘)
Програма виведе число 2, бо число 1 пропустить (знаменник дорівнює нулю),
а корінь -4 не входить в область пошуку.
Коли ж потрібно зупинитися на відшукання лише
одного кореня, то після його знаходження потрібно вийти із циклу за допомогою
оператора break.
for x in range(-10,11):
if x**2-6*x+5==0:
continue
if x**3+x**2-10*x+8==0:
print(x, end=’ ‘)
break
Програма виведе число -4 і одразу вийде з циклу.
Розглянемо кілька прикладів.
Приклад 1.
Дано натуральне число n. Знайти n! (добуток всіх натуральних чисел,
що не перевищує n, тобто
1*2*3*…*n).
Вхід
Вихід
6
720
n=int(input())
p=1
for i in range(1,n+1):
p*=i
print(p)
Приклад 2.
Дано натуральне число n. Знайти суму його цифр.
Вхід Вихід
342 9
n=int(input())
s=0
while n>0:
s+=n%10 (знаходимо
останню цифру і додаємо до суми)
n//=10 (відкидаємо
останню цифру)
print(s)
Приклад 3.
Дано натуральне число n (n≤9). Вивести числові східці, у якій і-ий рядок складається із східців від 1 до і.
Вхід Вихід
4 1
12
123
1234
n=int(input())
for i in range(1,n+1):
for j in
range(1,i):
print(j, end=’’)
print(i)
Приклад 4.
Дано послідовність чисел по одному в кожному рядку,
що закінчуються нулем. Знати середнє арифметичне їх значення. Число 0 обробляти
не потрібно. Числа в послідовності є натуральними.
Вхід
Вихід
4 5.5
5
12
1
0
s=0
n=0
a=int(input())
while a!=0:
s+=a
n+=1
a=int(input())
print(s/n)
На
цьому закінчимо заняття, а на наступному розглянемо створення використання
власних функцій. До зустрічі.