Цикл for

Цикл for
Цикл for(цикл з параметром) в мові програмування Python призначений для перебору елементів структур даних і деяких інших об'єктів. Це не цикл з лічильником, яким є for в багатьох інших мовах.

Що значить перебір елементів? Наприклад, у нас є список, що складається з ряду елементів. Спочатку беремо з нього перший елемент, потім другий, потім третій і так далі. З кожним елементом ми виконуємо одні й ті ж дії в тілі for. Нам не треба витягати елементи по їх індексах  і піклуватися про те, на якому з них список закінчується. Цикл for сам перебере і визначить кінець.

# Приклад 1
spisok = [10, 40, 20, 30]
for element in spisok:
    print(element + 2)

Результат:
12
42
22
32
Після ключового слова for використовується змінна під ім'ям element. Ім'я тут може бути будь-яким. Нерідко використовують i. На кожній ітерації циклу for їй буде присвоєно черговий елемент зі списку spisok. Так при першій прокручуванні циклу ідентифікатор element пов'язаний з числом 10, на другий - з числом 40, і так далі. Коли елементи в spisok закінчуються, цикл for завершує свою роботу.

З англійської "for" перекладається як "для", "in" як "в". Перекласти конструкцію з мови програмування на людський можна так:
для кожного елемента в списку робити наступне (то, що в тілі циклу).

У прикладі ми збільшували кожен елемент на 2 і виводили його на екран. При цьому сам список звичайно ж не змінювався:

print(spisok)
[10, 40, 20, 30]

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

# Приклад 2
spisok = [10, 40, 20, 30]
i = 0
for element in spisok:
    spisok[i] = element + 2
        i += 1
print(spisok)

Результат:
[12, 42, 22, 32]

Але якщо ми змушені використовувати лічильник, то вигода від використання циклу for не очевидна. Якщо знати довжину списку, то чому б не скористатися while. Довжину можна виміряти за допомогою вбудованої в Python функції len ().

# Приклад 3
spisok = [10, 40, 20, 30]
i = 0
while i < len(spisok):
    spisok[i] = spisok[i] + 2    # або spisok [i] + = 2
    i = i + 1                    # або i + = 1
print(spisok)

Результат:
[14, 44, 24, 34]

Крім того, з циклом while ми позбулися змінної element.

Функція range ()
Тепер прийшов час познайомитися з вбудованою в Python функцією range (). "Range" перекладається як "діапазон". Вона може приймати один, два або три аргументи. Їх призначення таке ж як у функції randrange () з модуля random. Якщо заданий тільки один, то генеруються числа від 0 до зазначеного числа, не включаючи його. Якщо задані два, то числа генеруються від першого до другого, не включаючи його. Якщо задані три, то третє число - це крок.

Загальна структура функції range() така:
range([<початок>,] <кінець> [,<крок>])
Обов'язковим є лише параметр кінець

Розглянемо окремі випадки:
 range(n) – шкала чисел від 0 до n-1;
 range(k, n) – шкала чисел від k до n-1;
 range(k, n, m) – шкала чисел від k до n-1 з кроком m (причому m може бути від'ємним. 

Однак, на відміну від randrange (), функція range () генерує не одне випадкове число в зазначеному діапазоні. Вона взагалі не генерує випадкові числа. Вона генерує послідовність чисел у вказаному діапазоні. Так, range (5, 11) згенерує послідовність 5, 6, 7, 8, 9, 10. Однак це буде не структура даних типу "список". Функція range () виробляє об'єкти свого класу - діапазони:

>>> a = range(-10, 10)
>>> a
range(-10, 10)
>>> type (a)
<Class 'range'>

Незважаючи на те, що ми не бачимо послідовності чисел, вона є, і ми можемо звертатися до її елементів:

>>> a [0]
-10
>>> a [5]
-5
>>> a [15]
5
>>> a [-1]
9
Хоча змінювати їх не можна, так як, на відміну від списків, об'єкти range () відносяться до групи незмінних:

>>> a[10] = 100
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'range' object does not support item assignment

Цикл for і range ()
Отже, навіщо нам знадобилася функцій range () в темі про цикл for? Справа в тому, що разом вони утворюють непоганий тандем. For як цикл перебору елементів, на відміну від while, дозволяє не стежити за тим, чи досягнуто кінець структури. Не треба вводити лічильник для цього, змінювати його і перевіряти умову в заголовку. З іншого боку, range () дає послідовність цілих чисел, які можна використовувати як індекси для елементів того ж списку.

>>> range(len(spisok))
range(0, 4)

Тут за допомогою функції len () вимірюється довжина списку. В даному випадку вона дорівнює чотирьом. Після цього число 4 передається в функцію range (), і вона генерує послідовність чисел від 0 до 3 включно. Це як раз індекси елементів нашого списку.

Тепер "з'єднаємо" for і range ():

#  Приклад 4
spisok = [10, 40, 20, 30]
for i in range(len(spisok)):
    spisok[i] += 2
print(spisok)

Результат:
[16, 46, 26, 36]

У заголовку циклу for беруться елементи зовсім не списку, а об'єкта range. Список, елементи якого планується перезаписувати, тут по-суті не фігурує. Якщо заздалегідь знати довжину списку, то заголовок може виглядати так:

for i in range(4) 

Те, як використовується i в тілі циклу, питання друге. Примітка. Замість ідентифікатора i може бути будь-який інший.

Оператор continue
Оператор continue починає наступний прохід циклу, минаючи залишився тіло циклу (for або while)

# Приклад 5
for i in 'hello world':
    if i == 'o':
        continue
    print (i * 2, end = '')

Результат:
hheellll wwrrlldd

Виведемо усі парні числа від 6 до 30, окрім чисел у діапазоні від 14 до 22

# Приклад 6
for i in range(6, 31, 2):   
    if i>12 and i<26:     # якщо число 12<i<26 
        continue          # перехід на нову ітерацію циклу  

    print(i, end=" ")

Результат:
6 8 10 12 26 28 30

Оператор break
Оператор break достроково перериває цикл. Здійснює вихід із циклу навіть у тому випадку, коли всі ітерації не виконано.

# Приклад 7
for i in 'hello world':
    if i == 'o':
        break
    print(i*2, end = '')

Результат:
hheellll

Обчислюємо суму цілих чисел доти, поки не буде введено q.

# Приклад 8 
s=0                       # початкова сума
while True:               # нескінченний цикл
    a=input("Уведи число: ") 
    if a=="q":            # якщо введено символ q 
        break             # переривання нескінченного циклу
    a=int(a)              # перетворення рядка в ціле число
    s=s+a                 # обчислення суми чисел
print("сума чисел s=", s)
input()


Результат:
Уведи число: 1
Уведи число: 2
Уведи число: 3
Уведи число: q

сума чисел s= 6

Запитання
1. Для чого призначений цикл for ?
2. З якою функцією використовують цикл for ?
3. Для чого використовують оператори continue i break ?
4. Що буде надруковано після виконання фрагмента програми

# a)
for i in range(10):
    if i%2 == 0:
        print(i, end = " ")

# б)
for i in range(4):
    print(i, end=" ")
print(i*2)

Завдання
1. У банк покладено 5000 грн під 20% річних. Потрібно визначити суму вкладу за кожний із п'яти років.

2. Створити програму для обчислення суми квадратів n перших натуральних чисел
s = 1**2 + 2**2 + 3**2 + ... +(n-1)**2 + n**2

3. Знайти суму натуральних чисел, більших 20, менших 100 і кратних 3.

Додатково
1. Складіть програму для обчислення факторіала. (Факторіал натурального числа n – добуток натуральних чисел від одиниці до n включно, позначається n!). 
n = 1*2*3* ... *(n-1)*n = n! 
Обчисліть за допомогою програми факторіали кількох натуральних чисел.

2. Складіть програму для обчислення n-го члена послідовності Фібоначчі. (1, 1, 2, 3, 5, 8, … – перші два члени дорівнюють1, а всі інші – це сума двох попередніх.
Формат вхідних даних: одне число 0<𝑛<100.
Формат вихідних даних: одне число n-й член послідовності.

















Комментариев нет:

Отправить комментарий