СЛОВНИКИ, ЦИКЛ FOR ТА ФУНКЦІЇ В МОВІ PYTHON
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи № 3
з дисципліни “Алгоритмізація та програмування, частина 2”
для студентів спеціальності 122 «Комп’ютерні науки та інформаційні технології»
Затверджено
на засіданні кафедри інформаційних систем та мереж
Протокол №__ від _____.2017 р.
Словники, цикл for та функції в мові Python: Методичні вказівки до лабораторної роботи №3 / Укл.: В.А. Висоцька, Л.В. Чирун. – Львів: Видавництво Національного університету ”Львівська політехніка”, 2017. – 15 с.
Укладачі
Висоцька В.А., канд. техн. наук, доц.
Чирун Л.В., канд. техн. наук, доц.
Відповідальний за випуск Литвин В.В., доктор техн. наук., проф.
Рецензенти Верес О.М., канд. техн. наук, доц.
Берко А.Ю., доктор техн. наук., проф.
Мета роботи: ознайомитись із Python.
- Теоретичні відомості
- 1.Cловники
Словник (Dictionary) - це змінюваний (як і список) невпорядкований (на відміну від рядків і списків) набір пар "ключ: значення".
Щоб уявлення про словник стало більш зрозумілим, можна провести аналогію зі звичайним словником, наприклад, англо-українським. На кожне англійське слово в такому словникові є українське слово-переклад: cat - кішка, dog - собака, table - стіл і т.д. Якщо англо-український словник описувати за допомогою Python, то англійські слова будуть ключами, а українські - їхніми значеннями:
{'cat': 'кішка', 'dog': 'собака', 'bird': 'птах', 'mouse': 'миша'} |
Зверніть увагу на фігурні дужки, саме з їх допомогою визначається словник. Синтаксис словника на Python можна описати такою схемою:
Якщо створити словник в інтерпретаторі Python, то після натискання Enter можна спостерігати, що послідовність виведення пар "ключ: значення" може не збігатися з тим, як було введено:
>>> {'cat': 'кішка', 'dog': 'собака', 'bird': 'птах', 'mouse': 'миша'} {'bird': 'птах', 'mouse': ' миша ',' dog ':' собака ',' cat ':' кішка '} |
Справа в тім, що в словнику абсолютно не важливий порядок пар, і інтерпретатор виводить їх у випадковому порядку. Тоді як же отримати доступ до певного елемента, якщо індексація не можлива в принципі? Відповідь: в словнику доступ до значень здійснюється за ключами, які беруться у квадратні дужки (за аналогією з індексами рядків і списків).
>>> dic = {'cat': 'кішка', 'dog': 'собака', 'bird': 'птах', 'mouse': 'миша'} >>> dic ['cat'] 'кішка' >>> dic ['bird'] 'птах' |
Словники, як і списки, є змінним типом даних: можна змінювати, додавати та видаляти елементи (пари "ключ: значення"). Спочатку словник можна створити порожнім (наприклад, d = {}) і лише потім заповнити його елементами. Додавання і зміна має однаковий синтаксис: словник[ключ] = значення. Ключ може бути як вже існуючим (тоді відбувається зміна значення), так і новим (відбувається додавання елемента словника). Видалення елемента словника здійснюється за допомогою функції del().
>>> dic = {'cat': 'кішка', 'dog': 'собака', 'bird': 'птах', 'mouse': 'миша'} >>> dic ['elephant'] = 'бегемот' >>> dic ['fox'] = 'лисиця' >>> dic {'fox': 'лисиця', 'dog': 'собака', 'cat': 'кішка', 'elephant': 'бегемот', 'mouse': 'миша', 'bird': 'птах'} >>> dic ['elephant'] = 'слон' >>> del(dic['bird']) >>> dic {'fox': 'лисиця', 'dog': 'собака', 'cat': 'кішка', 'elephant': 'слон', 'mouse': 'миша'} |
Типи даних ключів і значень словників не обов'язково повинні бути рядками. Значення словників можуть бути більш складними (містити структури даних, наприклад, інші словники або списки).
>>> d = {1:'one',2:'two',3:'three'} >>> d {1: 'one', 2: 'two', 3: 'three'} >>> d = {10:[3,2,8], 100:[1,10,5], 1000:[23,1,5]} >>> d {1000: [23, 1, 5], 10: [3, 2, 8], 100: [1, 10, 5]} >>> d = {1.1:2, 1.2:0, 1.3:8} >>> d {1.3: 8, 1.2: 0, 1.1: 2} >>> d = {1.1:2, 10:'apple', 'box':100} >>> d {'box': 100, 10: 'apple', 1.1: 2} |
Словники - це широко використовуваний тип даних мови Python. Для роботи з ними існує ряд вбудованих функцій.
- 2.Цикл for
У сьомому уроці було розглянуто цикл while. Однак це не єдиний спосіб організації у мові Python повторення групи виразів. У програмах, написаних на Python, широко застосовується цикл for, який являє собою цикл обходу заданої множини елементів (символів рядка, об'єктів списку або словника) та виконання в своєму тілі різних операцій над ними. Наприклад, якщо є список чисел, і необхідно збільшити значення кожного елемента на дві одиниці, то можна перебрати список за допомогою циклу for, виконавши над кожним його елементом відповідну дію.
>>> spysok = [0,10,20,30,40,50,60,70,80,90] >>> i = 0 >>> for element in spysok: spysok[i] = element+2 i = i + 1 >>> spysok [2, 12, 22, 32, 42, 52, 62, 72, 82, 92] |
У прикладі змінна i потрібна для того, щоб записати змінене значення елемента в список. У ній зберігається значення індексу чергового елемента списку. У той час, як змінна element пов'язується зі значенням чергового елемента даних. У заголовку циклуfor відбувається звернення до чергового елементу списку. У тілі циклу елементу з індексом i присвоюється сума значення поточного (оброблюваного) елемента і двійки. Далі індекс збільшується на одиницю, а потік виконання програми переходить знову в заголовок циклу for, де відбувається звернення до іншого елементу списку. Коли всі елементи оброблені цикл for припиняє свою роботу. Відсутність чергового елемента є умовою завершення роботи циклу for (для порівняння: в циклі while умовою завершення служить результат False логічного виразу в заголовку). З таким само успіхом перебирати можна й рядки, якщо не намагатися їх при цьому змінювати:
>>> radok = "привіт" >>> for bukva in radok: print (bukva, end = '*') п * р * и * в * і * т * |
Примітка: у вищевказаному прикладі функція print() має також аргумент end —він вказує, яким символом має закінчуватись поточне виведення на екран. Якщо в функції print() не вказаний даний аргумент то виведення закінчується символом переходу на нову стрічку (\n). Спробуйте змінити вищевказаний приклад, написавши, наприклад, print(bukva, '*'), або print(bukva+' *') і ви побачите, як зміниться результат.
Цикл for використовується і для роботи зі словниками:
>>> d = {1:'one',2:'two',3:'three',4:'four'} >>> for key in d: d[key] = d[key] + '!' >>> d {1: 'one!', 2: 'two!', 3: 'three!', 4: 'four!'} |
Цикл for широко використовується в мові програмування Python, тому що є важливим інструментом при обробці структур даних. Також слід запам'ятати, що цикл for в Python особливий. Він не є аналогом циклів for в багатьох інших мовах програмування, де представляє собою, так званий, цикл з лічильником.
- 3.Функції
Функції в програмуванні можна представити як ізольований блок коду, звернення до якого в процесі виконання програми може бути багаторазовим. Навіщо потрібні такі блоки інструкцій? У першу чергу, щоб скоротити обсяг вихідного коду: раціонально винести часто повторювані вирази в окремий блок і, потім, у міру потреби, звертатися до нього.
Уявімо собі таку ситуацію. Потрібно написати скрипт, який при виконанні повинен три рази запитувати у користувача різні дані, але виконувати з ними одні й ті ж дії.
a = int(input('Введіть перше число: ')) b = int(input('Введіть друге число: ')) if a > b: print(a-b) else: print(b-a) c = int(input('Введіть перше число: ')) d = int(input('Введіть друге число: ')) if c > d: print(c-d) else: print(d-c) e = int(input(Введіть перше число: ')) f = int(input('Введіть друге число: ')) if e > f: print(e-f) else: print(f-e) |
Дана програма знаходить модуль різниці двох чисел. Очевидно, що такий запис вихідного коду не раціональний: виходять три майже однакових блоки коду. Здавалося б, чому б не використати цикл while для організації повторення?
i = 0 while i < 3: a = int(input('Введіть перше число: ')) b = int(input('Введіть друге число: ')) if a > b: print(a-b) else: print(b-a) i = i + 1 |
Проте, в цьому випадку є один нюанс. Введені користувачем дані завжди зв'язуються з змінними a і b. При кожному витку циклу колишні дані втрачаються. Що ж робити, якщо всі шість чисел, введених користувачем треба зберегти для подальшого використання в програмі? Розглянемо рішення цієї задачі з використанням функції.
def diff(): m = int(input('Введіть перше число: ')) n = int(input('Введіть друге число: ')) if m > n: print(m-n) else: print(n-m) return m,n a,b = diff() c,d = diff() e,f = diff() |
def - це інструкція (команда) мови програмування Python, що дозволяє створювати функцію. diff - це ім'я функції, яке (так само як і імена змінних) може бути майже будь-яким, але бажано осмисленим. Після в дужках перераховуються параметри функції. Якщо їх немає, то дужки залишаються порожніми. Далі йде двокрапка, що позначає закінчення заголовка функції (аналогічно з умовами та циклами). Після заголовка з нового рядка і з відступом слідують вирази тіла функції. У кінці тіла функції присутня інструкція return (її може й не бути), яка повертає результат, або результати (як у вищевказаному прикладі) в основну гілку програми. У даному випадку, якби у функції не було інструкції return, то в основну програму нічого б не поверталося, і змінним a і b (c іd, а також e і f) числові значення не присвоювалися б.
Після функції йде, так звана, основна гілка програми, в якій змінним попарно присвоюється результат виконання викликаної функції. У інших ситуаціях, коли функція не вертає значень, її виклик не зв'язується зі змінною.
Сама функція виконуються лише тоді, коли вона викликається в основній гілці програми. Так, наприклад, якщо функція присутня у вихідному коді, але ніде не викликається в ньому, то вона не буде виконуватись в програмі жодного разу.
- 4.Параметри і аргументи функцій
Часто функція використовується для обробки даних, отриманих із зовнішнього для неї середовища (з основної гілки програми). Дані передаються функції при її виклику в дужках і називаються аргументами. Однак, щоб функція могла "взяти" передані їй дані, необхідно при її створенні описати параметри (в дужках після імені функції), що представляють собою змінні.
Коли функція викликається, конкретні аргументи підставляються замість параметрів-змінних. Майже завжди кількість аргументів і параметрів має збігатися (хоча можна запрограмувати змінну кількість прийнятих аргументів). В якості аргументів можуть виступати як безпосередньо значення, так і змінні, що посилаються на них.
- 5.Локальні та глобальні змінні
Якщо записати в IDLE наведену нижче функцію, і потім спробувати вивести значення змінних, то виявиться, що деякі з них чомусь не існують:
>>>def mathem(a,b): a = a/2 b = b+10 print(a+b) >>>num1 = 100 >>>num2 = 12 >>>mathem(num1,num2) 72.0 >>>num1 100 >>> num2 12 >>> a Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> a NameError: name 'a' is not defined >>> b Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> b NameError: name 'b' is not defined |
Змінні num1 і num2 не змінили своїх початкових значень. Справа в тому, що у функцію передаються копії значень. Колишні значення з основної гілки програми залишилися по колишньому пов'язані з їх змінними.
А ось змінних a і b виявляється немає і в помині (помилка "name 'b' is not defined"перекладається як "змінна b не визначена"). Ці змінні існують лише в момент виконання функції і називаються локальними. На противагу їм, змінні num1 і num2 видно не тільки в зовнішній гілці, а й усередині функції:
>>> def mathem2(): print(num1+num2) >>> mathem2() 112 |
Змінні, що визначені в основний гілці програми, є глобальними.
(Для ознайомлення з повним текстом статті необхідно залогінитись)