Типи даних

 

Типи даних

Ми вже познайомилися з двома типами даних — рядками та цілими числами. Але в Python є й багато інших типів даних. У них ми сьогодні й розберемось.  

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

До незмінних належать такі типи даних:

  • Числа
  • Рядки
  • Кортежі
  • frozenset

До змінних:

  • Списки
  • Словники
  • Множини

Створимо новий проєкт на сервісі repl.it, з ім'ям, яке вам подобається, а як мову програмування знов виберіть Python(with turtle).

Числа

З цілими числами, тип яких називається int (від англ. integer — ціле число) ми вже познайомились, але як бути з дробовими числами, наприклад, 25,8? Скористаємось вже знайомим синтаксисом й виведемо тип даного числа. Але зверніть увагу, щоби Python правильно нас зрозумів і не видав помилки, необхідно замість коми в цьому числі поставити крапку. Маємо код:

print(type(25.8))

Запустивши його, отримаємо (відео 1):

Видео 1

Отже, тип числа 25,8floatдійсне число. А якщо імпортувати вже знайому бібліотеку turtle, з допомогою дійсних чисел ми зможемо нарисувати багато інших фігур. Наприклад, зобразимо єгипетський прямокутний трикутник, у якого довжини сторін кратні числам 3, 4 та 5. Збільшимо їх в 10 разів, й отримаємо такі довжини: 30, 40, 50. Знаючи довжини сторін, лишається знайти необхідний кут повороту черепашки. Для цього скористаємось калькулятором трикутника, доступним за посиланням. Введемо довжини сторін і отримаємо значення кутів (мал. 1):

LAnwWHECp_J3aoddFdX-sJfmyHYQIzt7
Малюнок 1

Маючи значення кутів, можемо скласти код для рисування трикутника:

from turtle import *
shape("turtle")
forward(50)
left(180)
right(53.13)
forward(30)
left(90)
forward(40)

Запустимо (відео 2):

Видео 2

Як бачимо, дійсні числа дали змогу нарисувати нам трикутник.

Але це не все. 

Наступним типом чисел є логічніbool. Вони набувають усього двох значень — логічного нуля (False) або логічної одиниці (True). Вони створені для того, щоби перевіряти вірність (True) або невірність (False) твердження. Для прикладу перевіримо чи істинне твердження, що число 4 дорівнює числу 4. Додатково виведемо тип цього твердження. Для цього пропишемо:

print(4==4)
print(type(4==4))

Запустивши код побачимо (відео 3):

Видео 3

Нам повернулось значення True, отже, твердження вірне.

Рядки

Ми лише виводили рядки, але Python дає змогу проводити з ними багато інших цікавих операцій. Наприклад, дізнатися довжину рядка, використавши функцію len(). Запишемо код:

string = "Hello World!"
print("Length of string -", len(string))

Отримаємо (відео 4):

Видео 4

Рядки також можна додавати між собою, або множити на число. Наприклад:

string = " Hello World!"
string_2 = "- Hello to You!"
string_sum = string + string_2
big_str = string*3
print("string_sum - ", string_sum)
print("big_str -", big_str)

Результат (відео 5):

Видео 5

З допомогою методу split() можна розбивати рядок на частини. Водночас буде створено список, у який будуть поміщені ці рядки. 

Список — масив даних, тобто контейнер, у якому можна зберігати різні дані. На наступних заняттях ми обов'язково попрацюємо з ними, але поки що повернемось до рядків. Запишемо:

string = " Hello World!"
string_list = string.split()
print(string_list)

Результат (відео 6):

Видео 6

Ми отримали масив, який містить у собі два рядки. Бачимо, що вони роз'єднались у місці пробілу. Але у функцію split() можна передати рядок, який стане розділовим знаком. Наприклад, як аргумент використаємо рядок "о" (відео 7):

Видео 7

Поекспериментуйте. Спробуйте розділити рядок іншими буквами.

Також можна зробити всі літери рядку маленькими або великими. Тут стануть у пригоді методи lower() та upper(). Якщо необхідно, щоби всі слова рядку починалися з великої літери, використовується метод title(). А ось метод capitalize() робить лише першу літеру великою, а всі інші — маленькими. І, нарешті, можна змінити регістр усіх символів на протилежний із допомогою методу swapcase(). Запишемо:

string_1 = "I am a String and I want to be printed"
print("lower -", string_1.lower())
print("upper -", string_1.upper())
print("title -", string_1.title())
print("capitalize -", string_1.capitalize())
print("swapcase -", string_1.swapcase())

Результат (відео 8):

Видео 8

А перевірити, чи починається рядок із підрядку можна використавши метод startswith(). Він повертає значення True, якщо рядок починається з підрядку в дужках. Для перевірки закінчення рядку використовується метод endswith(). Маємо:

string_1 = "I am a String and I want to be printed"
print(string_1.startswith('I am'))
print(string_1.endswith("printed"))

Результат (відео 9):

Видео 9

Перевірити, чи складається рядок виключно з цифр можна методом isdigit(). А чи складається рядок лише з букв — методом isalpha(). Якщо ж рядок складається лише з букв і цифр, метод isalnum() поверне значення True. Запишемо:

string_1 = "012345"
string_2 = "string"
string_3 = "string123"
print(string_1.isdigit())
print(string_2.isalpha())
print(string_3.isalnum())

Результат (відео 10):

Видео 10

Перевірку регістрів символів дають змогу проводити методи islower(), isupper(), istitle(). Очевидно, що islower() перевіряє чи є всі символи маленькими, isupper() — чи всі символи великі, а istitle() — чи починається кожне слово рядку з великої літери (відео 11):

Видео 11

Насправді будь-який рядок — це масив даних, елементами якого є букви та знаки. Це означає, що ми можемо звернутися до будь-якого елемента за його номером. Це називається "індексацією".  

Важливо! Нумерація індексів в Python починається з нуля, отже буква "H" рядка "Hello World!" матиме нульовий номер. 

Тоді номери індексів в рядку будуть наступними (мал. 2):

SN8W8ZSnER9NPFCnruLYnh7tBFl-GAOw
Малюнок 2

Перевіримо твердження, записавши:

string = "Hello World!"
small_str = string[0]
print(small_str)

Отримаємо (відео 12):

Видео 12

Але з допомогою індексації також можна одержати й більше знаків. Наприклад, спробуємо вивести слово "Hello". Для цього всередині квадратних дужок необхідно вказати індекс першого елементу й останнього, розділивши їх двокрапкою. Як ми вже перевірили, буква "H" матиме нульовий індекс, тоді буква "o" — четвертий. Алепід час індексації частини рядку, останній елемент не включається, тому для виведення всього слова, необхідно збільшити кінцевий індекс на одиницю. Маємо:

string = "Hello World!"
small_str = string[0:5]
print(small_str)

Запустивши код отримаємо (відео 13):

Видео 13

Зверніть увагу, якщо індексація починається з початкового елементу, то запис [0:5] буде еквівалентний [:5]

Але номери індексів можна почати рахувати з іншого боку. Тоді індекс першого елемента буде мати номер [-1]. Поглянь на картинку нижче. Номери індексів еквівалентні (мал. 3):

jZ2N9oLpv0SazCT5sxQEOsoJ3_DjofIQ
Малюнок 3

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

string = "Hello World!"
small_str = string[-6:]
print(small_str)

Запустимо код (відео 14):

Видео 14

Переставимо двокрапку й число -6 місцями (відео 15):

Видео 15

Отже, двокрапка вказує, звідки треба рахувати: у першому випадку рахували від числа -6, а переставивши — до числа -6. Але й це ще не все. Можна вказати крок, з яким буде проводитись індексація. Наприклад, будемо виводити кожен другий елемент. Тоді запишемо:

string = "Hello World!"
small_str = string[:-6:2]
print(small_str)

Запустивши код, отримаємо (відео 16):

Видео 16

Якщо ж потрібно вивести елементи з кроком на всьому рядку, достатньо прибрати індекси, що вказують на діапазон. Але важливо залишити двокрапку:

string = "Hello World!"
small_str = string[::2]
print(small_str)

Результат (відео 17):

Видео 17

Щоби дізнатися чи є в рядку підрядок, можна використати методи find(), rfind(), index() та rindex(). Перший поверне номер індексу першого входження, другий — останнього. Якщо ж підрядок відсутній у рядку, повернеться значення «-1». Index() працює аналогічно find(), а rindex()rfind(), але за відсутності підрядка в рядку, відбудеться помилка. Запишемо:

string_1 = "I am a String and I want to be printed"
print(string_1.find("I"))
print(string_1.index("I"))
print(string_1.rfind("I"))
print(string_1.rindex("I"))

Результат (відео 18):

Видео 18

Відредагувати рядок, замінивши один підрядок на інший можна завдяки методу replace(). Першим елементом у дужках має бути підрядок, який будемо заміняти, другим — на який необхідно замінити. Маємо:

string_1 = "I am a String and I want to be printed"
print(string_1.replace("String", "Verse"))

А в результаті отримаємо (відео 19):

Видео 19

Коли необхідно дізнатися кількість входжень підрядку до рядка, використовують метод count(). Дізнаємось кількість букв "a" в рядку, для чого запишемо:

string_1 = "I am a String and I want to be printed"
print(string_1.count("a"))

Маємо (відео 20):

Видео 20

Знайди черепашку

Ми запросили черепашку на наш екран, але сталася прикрість, черепашка загубилась у джунглях (мал. 4).

K32Fk9-wkk4JAxpCoGUeqLYILpXAOrAb
Малюнок 4

Допоможімо їй потрапити на наш екран, використавши отримані знання. Маємо:

from turtle import shape
jungle = "our jungle is very dense and impassable. there are many dangerous monsters in them"
turtle = ""
shape(turtle)

У змінній turtle маємо замість пустого рядка отримати рядок "turtle", використовуючи рядок jungle. Для цього дивимось на цей рядок і бачимо, що буква "t" є в трьох словах: there, monsters, them. Оскільки слово them в кінці, зручніше всього взяти цю букву саме в нього. Отже, додаємо до нашої змінної вираз jungle[-4]. Тоді змінна набуде вигляду:

turtle = "" + jungle[-4]

Але це ще тільки початок і нам треба знайти всі інші частини черепашки. Тож не зупиняємось і бачимо, що буква "u" є в слові our і її індекс у рядку jungle буде під номером 1. Тож додаємо його до нашої змінної. Отримали:

turtle = "" + jungle[-4] + jungle[1]

Аналогічно шукаємо всі інші літери. Завершивши пошуки, отримаємо:

turtle = "" + jungle[-4] + jungle[1] + jungle[2] + jungle[-4] + jungle[8] + jungle[9]

Зібрали, а тепер запустимо код і перевіримо (відео 21):

Видео 21

Ура! Наша черепашка повернулася на екран!

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