Лабораторне заняття 14. Робота з циклами, текстовими рядками та списками в Python. Функції

Мета роботи: ознайомитися з можливостями мови Python по роботі з циклами, текстовими рядками, списками та словниками, реалізовувати власні функції.

Теоретичні відомості

Цикли

Цикли – це інструкції, які виконують одну й ту ж послідовність дій, поки діє задана умова.

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

Універсальним організатором циклу в мові програмування Python (як і в багатьох інших мовах) є конструкція while. Конструкцію while на мові Python можна описати наступним чином:

while умова:

    тіло циклу

    зміна параметрів

Зміна одного з параметрів умови потрібна обов’язково, оскільки якщо цього не зробити, умова буде істинною завжди, а отже – цикл не завершиться.

Одна з найпростіших реалізацій циклу наведено далі:

i = 0

while i < 10

   print(i)

   i = i + 1

Змінна i використовується в якості лічильника та набуває початкового значення (i = 0) до виконання циклу. Умовою виходу з циклу є досягнення змінною i значення рівного або більшого 10. В тілі циклу здійснюється виведення поточного значення змінної i. Зміною параметру умови в даному випадку є збільшення значення змінної i на одиницю.

 

Текстові рядки

Текстовий рядок – це складний тип даних, що представляє собою послідовність символів.

Рядки в мові програмування Python можуть заключатися як в одинарні, так і подвійні лапки. Однак, початок і кінець рядка повинні обрамлятися однаковим типом лапок.

Для отримання довжини рядка використовується спеціальна функція len(). Результатом виконання даної функції є число, що показує кількість символів в рядку. Також для рядків використовуються операції конкатенацій (об’єднання) та дублювання:

>>> len('It is a long string')

19

>>> '!!!' + ' Hello World ' + '!!!'

'!!! Hello World !!!'

>>> '-' * 20

'--------------------'

В кожного символу в текстовому рядку є унікальний порядковий номер – індекс. Можна звертатися до конкретного символу в рядку і отримувати його за допомогою оператора індексування, який представляє собою квадратні дужки з номером символу в них:

>>> tday = 'morning, afternoon, night'

>>> tday[4]

'i'

Індексація символів в рядку починається з нуля. Також існує можливість отримувати символи, починаючи відлік з кінця. В цьому випадку відлік починається з -1 (останній символ):

>>> tday[-1]

't'

>>> tday[-3]

'g'

Можна отримати з рядка не один символ, а кілька, тобто отримувати зріз (підрядок). Оператор отримання зрізу з рядка виглядає наступним чином: [X: Y]. X – це індекс початку зрізу, а Y – його закінчення; причому символ з номером Y в зріз вже не входить. Якщо відсутній перший індекс, то зріз береться від початку до другого індексу; при відсутності другого індексу, зріз береться від першого індексу до кінця рядка:

>>> tday[0:7]

'morning'

>>> tday[9:-7]

'afternoon'

>>> tday[-5:]

'night'

 

Списки

Списки в мові програмування Python, як і текстові рядки, є впорядкованими послідовностями. Однак, на відміну від рядків, списки складаються не з символів, а з різних об'єктів (значень, даних), і заключаються не в лапки, а в квадратні дужки []. Об'єкти відокремлюються один від одного за допомогою коми:

[23, 656, -20, 67, -45] # список цілих чисел

[4.15, 5.93, 6.45, 9.3, 10.0, 11.6] # список з дробових чисел

["Київ", "Луцьк", "Рівне", "Львів"] # список з текстових рядків

["Київ", "Петренко", 12, 148] # змішаний список

[[0, 0, 0], [0, 0, 1], [0, 1, 0]] # список зі списків

Як і над рядками, над списками можна виконувати операції об'єднання і та дублювання:

>>> [45, -12, 'april'] + [21, 48.5, 33]

[45, -12, 'april', 21, 48.5, 33]

>>> [[0,0],[0,1],[1,1]] * 2

[[0, 0], [0, 1], [1, 1], [0, 0], [0, 1], [1, 1]]

По аналогії з текстовими рядками, можна отримувати доступ до об'єктів списку за їх індексами, отримувати зрізи, вимірювати довжину списку:

>>> li = ['a','b','c','d','e','f']

>>> len(li)

6

>>> li[4]

'e'

>>> li[:3]

['a', 'b', 'c']

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

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

>>> mylist = ['ab','ra','ka','da','bra']

>>> mylist[1] = 'ro'

>>> mylist

['ab', 'ro', 'ka', 'da', 'bra']

>>> mylist[0:2] = [10, 20]

>>> mylist

[10, 20, 'ka', 'da', 'bra']

>>> del(mylist[0])

>>> mylist

[20, 'ka', 'da', 'bra']

>>> mylist = mylist + [20, 30]

>>> mylist

[20, 'ka', 'da', 'bra', 20, 30]

В мові Python існує ряд функцій, які полегшують роботу з текстовими рядками:

  • find() – пошук підрядка в рядку тексту. Повертає номер першого входження або -1 (якщо входження не знайдено). Приклад:

>>> s = 'some text'

>>> s.find('te')

5

>>> s.find('tx')

-1

  • split() – розбиття текстового рядка на підрядки за вказаним роздільником:

>>> s.split(' ')

['some', 'text']

  • isdigit() – перевіряє, чи складається тектовий рядок лише з цифр:

>>> s.isdigit()

False

  • isalpha() – перевіряє, чи складається тектовий рядок лише з літер:

>>> s.isalpha() # пробіл – це не літера

False

  • islower() – перевіряє, чи складається тектовий рядок з символів нижнього регістру:

>>> s.islower()

True

  • isupper() – перевіряє, чи складається тектовий рядок з символів верхнього регістру:

>>> s.isupper()

False

  • upper()перетворює рядок в верхній регістр:

>>> s.upper()

'SOME TEXT'

  • lower()перетворює рядок в нижній регістр:

>>> s.lower()

'some text'

  • ord() – перетворює символ в код ASCII:

>>> ord('f')

102

  • chr() – перетворює код ASCII в символ:

>>> chr(99)

'c'

  • capitalize()переводить перший символ рядка у верхній регістр, а решту – в нижній:

>>> s.capitalize()

'Some text'

  • count() – повертає кількість входжень підрядка в текстовий рядок:

>>> s.count('e') # в тексті є дві літери 'е'

2

 

Словники

Одним із складних типів даних (поряд з текстовими рядками та списками) в мові програмування Python є словники. Словник – це змінний (як список) невпорядкований (на відміну від рядків і списків) набір пар "ключ: значення".

Синтаксис словника на Python можна описати наступною схемою:

{ключ:значення, ключ:значення, ключ:значення}

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

Словники, як і списки, є змінним типом даних: можна змінювати, додавати і видаляти елементи (пари "ключ: значення"). Спочатку словник можна створити порожнім (наприклад, d = {}) і лише потім заповнити його елементами. Додавання і зміна має однаковий синтаксис: словник[ключ] = значення. Ключ може бути як вже існуючим (тоді відбувається зміна значення), так і новим (відбувається додавання елемента словника). Видалення елемента словника здійснюється за допомогою функції del():

>>> dic = {'cat':'кіт','dog':'пес','bird':'курка'}

>>> dic['cat']

'кіт'

>>> dic['bird'] = 'пташка'

>>> dic

{'cat': 'кіт', 'dog': 'пес', 'bird': 'пташка'}

>>> dic['mouse'] = 'миша'

>>> dic

{'cat': 'кіт', 'dog': 'пес', 'bird': 'пташка', 'mouse': 'миша'}

>>> del(dic['bird'])

>>> dic

{'cat': 'кіт', 'dog': 'пес', 'mouse': 'миша'}

 

Цикл for

Раніше вже було розглянуто цикл while. Однак це не єдиний спосіб організації в мові Python повторення групи виразів. У програмах, написаних на Python, широко застосовується цикл for, який являє собою цикл обходу заданої множини елементів (символів рядка, об'єктів списку або словника) і виконання в своєму тілі різних операцій над ними. Наприклад, якщо є список чисел, і необхідно збільшити значення кожного елемента на дві одиниці, то можна перебрати список за допомогою циклу for, виконавши над кожним його елементом відповідну дію:

>>> s = [0,10,20,30,40,50,60,70,80,90]

>>> i = 0

>>> for element in s:

s[i] = element + 2

i = i + 1

>>> s

[2, 12, 22, 32, 42, 52, 62, 72, 82, 92]

В прикладі змінна i потрібна для того, щоб записати змінене значення елемента в список. В ній зберігається значення індексу чергового елемента списку. В той час, як змінна element зв'язується зі значенням чергового елемента даних.

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

Таким же чином перебирати можна і текстові рядки, якщо не намагатися їх при цьому змінювати:

>>> s = "hello"

>>> for letter in s:

    print(letter, end='*')

 

h*e*l*l*o*

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

 

Функції

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

Функція в Python – об'єкт, який приймає аргументи та повертає значення. Зазвичай функція визначається за допомогою інструкції def. Визначимо просту функцію:

def add(x, y):

    return x + y

Інструкція return говорить про те, що потрібно повернути значення. В даному випадку функція повертає суму x та y. Тепер можна її викликати:

>>> add(1, 10)

11

Функція може бути будь-якої складності і повертати будь-які об'єкти (списки, кортежі, і навіть функції):

>>> def newfuncНі:

        def myfunc(x):

             return x + n

        return myfunc

 

>>> new = newfunc(100) # new - це функція

>>> new(200)

300

Функція може і не закінчуватися інструкцією return, але при цьому функція поверне значення None.

Функція може приймати будь-яку кількість аргументів або не приймати їх зовсім. Також поширені функції з довільним числом аргументів, функції з позиційними та іменованими аргументами, обов'язковими і необов'язковими:

def func(a, b, c=2): # c – необов'язковий аргумент

  return a + b + c

Якщо аргумент c не введений, то буде використовуватися значення за замовчуванням (2). Функція також може приймати змінну кількість позиційних аргументів (у вигляді кортежу (незмінного списку)):

>>> def func(*args):

        return args

 

>>> func(1,2,3,'abc')

(1, 2, 3, 'abc')

Також функція може приймати довільну кількість іменованих аргументів:

>>> def func(**args):

        return args

 

>>> func(a=1, b=2, c=3)

{'a': 1, 'b': 2, 'c': 3}


Остання зміна: Thursday 28 May 2020 23:45 PM