Типи даних та їх використання

Перейти до вправ за цією темою »

Основним елементом програмування є робота з даними. Ми зберігаємо дані у змінних і структурах даних. Для цього ми маємо різні типи даних у Python, і кожен із них має своє специфічне використання. Тема огляд типів даних присвячена базовій нотації та позначенню у Python.

Ми можемо зосередитися на найбільш використовуваних типах даних:

  • Числові типи (int, float) розглядаються в основній темі змінні та числові вирази.
  • Логічний тип (bool) тісно пов’язаний із темою логічних виразів.
  • Рядки — це послідовності символів, які порівняно з числами додають принцип індексації.
  • Списки є більш загальними, ніж рядки, оскільки вони динамічно змінюються та можуть містити елементи різних типів.
  • Словники дозволяють індексувати не лише числами, а й рядками.

Більш загальна тема об’єкти пов’язана з типами даних, які у свою чергу належать до більш просунутих тем, а тут ми охоплюємо лише основи.

Вгору

Огляд типів

Основні типи даних у Python:

Тип Опис Приклади значень
int цілі числа 1, 42, -5, 200
float дійсні числа (точніше, числа з рухомою комою, де Python використовує десяткову крапку, а не кому) 2.5, 3.25, -12.37832
bool значення істинності True, False
str рядки "порося", "пес"
list списки, які є впорядкованими наборами значень [1, 3, 8, 2], ["коза", "вівця", "кенгуру"]
dict словники, які є невпорядкованими парами ключ-значення (словник відображає ключі на значення) {"a": 5, "b": 10}

Python також пропонує інші типи, наприклад, complex' (комплексні числа),tuple’ (сутність, незмінна послідовність), `set’ (набір).

Мінливість і незмінність

Ми розрізняємо типи залежно від того, чи можемо ми змінити їхні значення:

  • мінливі (mutable) типи даних це list, set, dict;
  • незмінні (immutable) типи даних це int, float, bool, str, tuple.

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

Приведення типів

Назви типів також є назвами вбудованих функцій, які виконуватимуть приведення. Типи змінних дуже важливі. Наприклад, вони впливають на значення операторів. Типовим прикладом є приведення числа до рядка:

x = 15

print(x)    # напише 15

print(3*x)  # напише 45

x = str(x)  # приведення до рядка, x тепер містить "15"

print(x)    # напише 15 (у цьому випадку не видно різниці)

print(3*x)  # напише 151515 (тому що x – це тепер рядок, а операція * для рядків

            # значить повторюваний запис до рядку)
Вгору

Написання рядків

Рядки пишемо в лапках або апострофах. У Python 3 рядки також можуть містити символи з діакритикою.

a = "Це рядок"

b = 'Це також рядок'

print(a, b)

Індексація

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

text = "порося"

text[0]     # перша літера => 'п'

text[1]     # друга літера => 'о'

text[6]     # шоста, остання літера => 'я'

text[-1]    # остання літера => 'я'

text[-2]    # передостання літера => 'с'

Ми можемо використовувати двокрапку для індексування підрядка.

text = "панорама"

print(text[2:7])  # від другої до сьомої позиції => нора

print(text[:3])   # перші 3 символи => пан

print(text[-4:])  # останні 4 знаки => рама

Більш просунутим елементом є використання двох двокрапок, де третє значення вказує на довжину стрибка:

text = "Бігає-лисиця-по-полю"

print(text[5:15:2])  # з 5-ї по 14-ту позиції кожні 2 => -иияп

print(text[::3])     # від початку до кінця, кожні 3 => Бали--л

print(text[::-1])    # задом наперед =>юлоп-оп-яцисил-єагіБ

Ітерація за рядком

Ми можемо легко переглядати окремі символи рядка за допомогою циклу for.

text = "соловій"

for letter in text:

    print("літера:", letter)

Незмінність рядків

Рядки є незмінним типом даних у Python. Це одна з рис, якими він відрізняється від списків. Незмінність означає, що ми не можемо змінити підлітеру в символі. Нам потрібно створити новий рядок, у якому буде змінена відповідна літера.

text = "кілець"

text[2] = "н"                 # TypeError - рядок не дозволяє змінювати символи

text = text[:2]+"н"+text[3:]  # ми створюємо новий, змінений рядок

print(text)

Операції з рядками

Рядки можна додавати (= об’єднувати). Ми також можемо множити рядки на ціле число (= багаторазово об’єднувати). Інші корисні операції включають пошук довжини (len) або перевірку на наявність підрядка (in).

text = "петр"

text + "ключ"  # => петрключ

3*text         # => петрпетрпетр

len(text)      # => 4

"е" in text    # => True

Рядки — це об’єкти, які мають низку доступних корисних методів, які ми викликаємо за допомогою крапкової нотації. Прикладами є перетворення у верхній/нижній регістр (upper, lower), розділення рядка відповідно до вказаного символу (split) або заміна підрядка (replace):

text = "Житомир"

text.upper()               # => ЖИТОМИР

text.lower()               # => житомир

text.split("о")            # => ['Жит', 'мир']

text.replace("том", "хет") # => Жихетир

Зауважте, що тут ми використовуємо так звану точкову нотацію: ми пишемо text.upper(), а не звичайний виклик функції у формі upper(text). Це пов’язано з тим, що рядки представлено як об’єкти.

Операції з символами

Під час роботи з рядками іноді корисними є операції для маніпулювання окремими символами, особливо функції ord і chr, які перетворюють символи в цілі числа і назад:

  • ord(c) повертає порядковий номер символу c,
  • chr(i) повертає символ із порядковим номером i.

«Послідовний номер» означає номер у кодуванні Unicode. Для базових завдань програмування достатньо знати, що в цьому кодуванні букви розташовані за алфавітом (на жаль, це стосується лише літер англійського алфавіту). Ось як ми можемо написати літери англійського алфавіту:

start = ord('A')

for i in range(26):

    print(chr(start + i))
Вгору

Список (list) — це впорядкована колекція значень будь-якого типу.

Створення списку

Списки записуються з використанням квадратних дужок:

s = []           # порожній список

s = [8, 3, 45]   # список із трьох чисел

Ми також можемо створити список за допомогою ключового слова list.

s = list("порося")   # створює список ['п', 'о', 'р', 'о', 'с', 'я']

Індексація

Ми отримуємо доступ до окремих елементів списку за допомогою індексації з використанням квадратних дужок. Увага: індексуємо з нуля. Ми можемо індексувати назад за допомогою від’ємних чисел:

s = ["пес", "порося", "вівця", "коза"]

s[0]      # перший елемент списку => "пес"

s[1]      # другий елемент списку => "порося"

s[-1]     # останній елемент списку => "коза"

s[-2]     # передостанній елемент списку => "вівця"

Ми можемо використовувати двокрапку, щоб індексувати частину списку:

numbers = [37, 99, 42, 7, 13, 1, 1000]

print(numbers[2:5])  # => [42, 7, 13]

print(numbers[:3])   # => [37, 99, 42]

print(numbers[-2:])  # => [1, 1000]

Операції зі списками

Корисні функції зі списками:

s = [8, 3, 45]

a = len(s)    # довжина списку

s.append(7)   # додавання елемента до списку

s.sort()      # упорядкування елементів у списку

t = sorted(s) # сортує елементи в s і призначає цей новий список t

              # s не зміниться

Зауважте, що тут ми використовуємо так звану точкову нотацію: ми пишемо s.sort(), а не звичайний виклик функції у формі sort(s). Це пов’язано з тим, що списки представлено як об’єкти.

Списки та цикл for

Використовуючи цикл for, ми можемо перебирати елементи списку:

s = [8, 3, 45]

for x in s:

    print(x)

Крім того, ми можемо прокрутити елементи списку таким чином (це позначення ближче до того, як ми перебираємо списки в інших мовах програмування):

for i in range(len(s)):

    print(s[i])
Вгору

Словник (dictionary, dict) визначає зіставлення ключів зі значеннями. Наприклад, ми можемо запам’ятати кількість фруктів на складі.

Створення словника

Ми створюємо словник на Python за допомогою дужок.

fruits = {"apple": 5,

          "banana": 10,

          "orange": 2}



empty_dictionary = {}    # порожній словник

Доступ до елементів

Ми отримуємо доступ до словникових статей за допомогою індексації з квадратними дужками. Так само ми можемо додати запис до словника.

print(fruits["apple"])

fruits["pear"] = 3

Якщо ми спробуємо одержати доступ до елемента, якого немає у словнику, ми отримаємо помилку. Безпечний доступ здійснюється за допомогою get:

print(fruits["plum"])    # => KeyError: 'plum'

print(fruits.get("plum", 0))   # якщо елемента немає у словнику,

                               # повертає вказане значення (0)

Робота зі словниками

Інші корисні функції для роботи зі словниками:

len(fruits)        # кількість ключів у словнику

fruits.keys()      # ключі у словнику, tj. 'pear', 'orange', 'banana', 'apple'

fruits.values()    # значення у словнику, tj. 10, 2, 3, 5

"apple" in fruits  # перевірка наявності у словнику
Вгору

Python, як і більшість інших сучасних мов програмування, підтримує об’єктно-орієнтоване програмування. Це вже досить просунута тема програмування. Тут ми підсумовуємо лише деякі основні поняття.

Об’єкт (object) – це набір даних (змінних) і методів (функцій), які працюють з цими даними. У Python майже всі дані, з якими ми стикаємося, є об’єктами (числа, рядки, списки тощо).

Об’єкти — це спеціальні екземпляри класів (class). Клас можна розуміти як загальний шаблон, згідно з яким створюються об’єкти.

Приклад визначення класу:

class Person:

    def __init__(self, name, age):

        self.name = name

        self.age = age

        

    def introduce(self):

        print("My name is ", self.name)

        print("I am ", self.age, "years old")

І ось як ми створюємо об’єкти (екземпляри класу) і використовуємо їх:

homer = Person("Homer Simpson", 39)

bart = Person("Bart Simpson", 10)

homer.introduce()

bart.introduce()

У цьому прикладі:

  • Person — це клас,
  • homer та bart — це об’єкти,
  • name та age — це атрибути даних,
  • introduce() — це метод,
  • __init__ — це метод ініціалізації, який автоматично викликається під час створення об’єкта.
Вгору
ЗВ’ЯЖІТЬСЯ З НАМИ

Дякуємо за ваше повідомлення, його було успішно відправлено.

Напишіть нам

Вам потрібна допомога?

Будь ласка, спочатку ознайомтеся з інструкціями.

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

Про що йдеться у повідомленні?

Повідомлення Сповістити про помилку Зміст Управління Вхід до системи Ліцензія