Перетворення даних

 

Перетворення даних

Перетворення даних — важлива складова програмування, аджедає змогу проводити операції, недоступні для конкретного типу даних, а також захищати ці дані чи перевіряти їх. 

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

У якості першого перетворення розглянемо найпростіше із них — перетворення в логічний тип даних — bool. Для цього перетворення використовується однойменна функція bool(), яка повертає логічний нуль False, якщо до неї передали пустий елемент, елемент із нульовою довжиною або число нуль. Створимо елементи знайомих типів, по два кожного. Один із них буде пустим або нульовим, інший же буде мати дані. Запишемо:

bool_true = True
bool_false = False
string = "string"
zero_string = ""
my_int_float = 1
zero = 0
my_list = [0]
zero_list = []
my_tuple = 0,
zero_tuple = tuple()
my_set = {0}
zero_set = set()
my_dict = {0:0}
zero_dict = {}
print('bool_true -', bool(bool_true))
print('bool_false -', bool(bool_false))
print('string -', bool(string))
print('zero_string -', bool(zero_string))
print('my_int_float -', bool(my_int_float))
print('zero -', bool(zero))
print('my_list -', bool(my_list))
print('zero_list -', bool(zero_list))
print('my_tuple -', bool(my_tuple))
print('zero_tuple -', bool(zero_tuple))
print('my_set -', bool(my_set))
print('zero_set -', bool(zero_set))
print('my_dict -', bool(my_dict))
print('zero_dict -', bool(zero_dict))

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

 Відео 1

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

Наступний тип, з яким будемо працювати — рядок. 

Для перетворення даних у рядок, використовується метод str().Треба зазначити, якщо в метод нічого не передати, буде створено пустий рядок. Запишемо:

bool_true = True
bool_false = False
string = "string"
zero_string = ""
my_int_float = 1
zero = 0
my_list = [0]
zero_list = []
my_tuple = 0,
zero_tuple = tuple()
my_set = {0}
zero_set = set()
my_dict = {0:0}
zero_dict = {}
zero_string_2 = str()
print('bool_true -', str(bool_true))
print('bool_false -', str(bool_false))
print('string -', str(string))
print('zero_string -', str(zero_string))
print('my_int_float -', str(my_int_float))
print('zero -', str(zero))
print('my_list -', str(my_list))
print('zero_list -', str(zero_list))
print('my_tuple -', str(my_tuple))
print('zero_tuple -', str(zero_tuple))
print('my_set -', str(my_set))
print('zero_set -', str(zero_set))
print('my_dict -', str(my_dict))
print('zero_dict -', str(zero_dict))
print('zero_string_2 -', str(zero_string_2))

Виконаємо код (відео 2):

 Відео 2

Наступним типом даних, який ми отримаємо за перетворення буде цілочисельний. Одержати його можна з допомогою функції int(). Але будьте уважні, ця функція працюватиме лише з числовими типами даних і рядками, причому рядок має містити виключно цифри. Якщо ж нічого не передати всередину функції, вона поверне число нуль. Запишемо:

bool_true = True
bool_false = False
string = "0"
my_int = 1
my_float = 1.1
zero = int()
print('bool_true -', int(bool_true))
print('bool_false -', int(bool_false))
print('string -', int(string))
print('my_int -', int(my_int))
print('my_float -', int(my_float))
print('zero -', zero)

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

 Відео 3

Аналогічні вимоги працюють і для перетворення в дійсні числа методом float(). Але під час перетворення допускається використання крапки, що відділяє цілу частину від дробової:

bool_true = True
bool_false = False
string = "0.1"
my_int = 1
my_float = 1.1
zero = float()
print('bool_true -', float(bool_true))
print('bool_false -', float(bool_false))
print('string -', float(string))
print('my_int -', float(my_int))
print('my_float -', float(my_float))
print('zero -', zero)

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

 Відео 4

На черзі перетворення в список, кортеж, множину й frozenset

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

string = "string"
my_list = [0]
my_tuple = 0,
my_set = {0}
my_frozenset = frozenset()
my_dict = {0:0}
zero_list = list()
print('string -', list(string))
print('my_list -', list(my_list))
print('my_tuple -', list(my_tuple))
print('my_set -', list(my_set))
print('my_frozenset -', list(my_frozenset))
print('my_dict -', list(my_dict))
print('zero_list -', list(zero_list))

Отримали (відео 5):

 Відео 5

Як ви вже знаєте, функція tuple() створює пустий кортеж. Але також з її допомогою можна перетворити дані на кортеж:

string = "string"
my_list = [0]
my_tuple = 0,
my_set = {0}
my_frozenset = frozenset()
my_dict = {0:0}
print('string -', tuple(string))
print('my_list -', tuple(my_list))
print('my_tuple -', tuple(my_tuple))
print('my_set -', tuple(my_set))
print('my_frozenset -', tuple(my_frozenset))
print('my_dict -', tuple(my_dict))

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

 Відео 6

Перетворимо дані на множину з допомогою функції set():

string = "string"
my_list = [0]
my_tuple = 0,
my_set = {0}
my_frozenset = frozenset()
my_dict = {0:0}
print('string -', set(string))
print('my_list -', set(my_list))
print('my_tuple -', set(my_tuple))
print('my_set -', set(my_set))
print('my_frozenset -', set(my_frozenset))
print('my_dict -', set(my_dict))

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

 Відео 7

Залишилося перетворити дані у frozenset. Очевидно, для цього використовується функція frozenset(), якою ми вже користувались:

string = "string"
my_list = [0]
my_tuple = 0,
my_set = {0}
my_frozenset = frozenset()
my_dict = {0:0}
print('string -', frozenset(string))
print('my_list -', frozenset(my_list))
print('my_tuple -', frozenset(my_tuple))
print('my_set -', frozenset(my_set))
print('my_frozenset -', frozenset(my_frozenset))
print('my_dict -', frozenset(my_dict))

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

 Відео 8

Найскладніше перетворити дані в словник. Для цього використовується функція dict(). Звісно ж, якщо нічого не передати всередину, отримаємо пустий словник. Для перетворення необхідно передати елемент типу список, кортеж, множина або frozenset, що містять ітеровані елементи, причому вони мають включати два елементи, перший із яких стане ключем, а другий — значенням. Водночас якщо елементом, що передається, є множина або frozenset, то допускається використання лише незмінних типів даних всередині них:

my_list = ['01', ["1",2], (2,"3"), {3.3,4}, frozenset({5,6})]
my_tuple = ('01', ["1",2], (2,"3"), {3.3,4}, frozenset({5,6}))
my_set = {'01', (2,"3"), frozenset({5,6})}
print(dict(my_list))
print(dict(my_tuple))
print(dict(my_set))

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

 Відео 9

З допомогою функції dict() можна напряму створити словник з елементами. Водночас всередину дужок поміщаються назви, які перетворяться на рядки та стануть ключами, а через знак «=» вводяться значення:

my_dict = dict(string = 'string', number = 0, list = [])
print(my_dict)

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

 Відео 10

Стартапер

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

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

gtgf1vt5OPfVh2p6UXzGHFkIpMO1xT8O
Малюнок 1

Спершу необхідно створити елемент, у якому будемо зберігати покупки. Доцільніше всього як «кошик» використати словник, адже в ньому зручно зберігати назви товарів і їхні ціни. Отже, створимо його:

my_basket = {}

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

my_basket = {}
my_basket[input()] = int(input())
print(my_basket)

Запустимо його, щоби перевірити роботу (відео 11):

 Відео 11

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

my_basket = {}
ware_1 = input()
my_basket[ware_1] = int(input())
print(my_basket)

Тепер маємо (відео 12):

 Відео 12

Додамо рядки в input(), які пояснюють що необхідно ввести:

my_basket = {}
ware_1 = input("product name -")
my_basket[ware_1] = int(input("value -")

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

my_basket = {}
ware_1 = input("product name - ")
my_basket[ware_1] = int(input("value - "))
ware_2 = input("product name - ")
my_basket[ware_2] = int(input("value - "))
ware_3 = input("product name - ")
my_basket[ware_3] = int(input("value - "))
ware_4 = input("product name - ")
my_basket[ware_4] = int(input("value - "))
ware_5 = input("product name - ")
my_basket[ware_5] = int(input("value - "))

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

my_basket = {}
ware_1 = input("product name - ")
my_basket[ware_1] = int(input("value - "))
ware_2 = input("product name - ")
my_basket[ware_2] = int(input("value - "))
ware_3 = input("product name - ")
my_basket[ware_3] = int(input("value - "))
ware_4 = input("product name - ")
my_basket[ware_4] = int(input("value - "))
ware_5 = input("product name - ")
my_basket[ware_5] = int(input("value - "))
total_cost = sum(my_basket.values())

Лишилося вивести результати роботи додатку на екран. Для цього додамо рядки:

print('We bought these goods:')
print('ware -', my_basket.popitem())
print('ware -', my_basket.popitem())
print('ware -', my_basket.popitem())
print('ware -', my_basket.popitem())
print('ware -', my_basket.popitem())
print("Total cost -", total_cost)

Готовий код має вигляд:

my_basket = {}
ware_1 = input("product name - ")
my_basket[ware_1] = int(input("value - "))
ware_2 = input("product name - ")
my_basket[ware_2] = int(input("value - "))
ware_3 = input("product name - ")
my_basket[ware_3] = int(input("value - "))
ware_4 = input("product name - ")
my_basket[ware_4] = int(input("value - "))
ware_5 = input("product name - ")
my_basket[ware_5] = int(input("value - "))
total_cost = sum(my_basket.values())
print('We bought these goods:')
print('ware -', my_basket.popitem())
print('ware -', my_basket.popitem())
print('ware -', my_basket.popitem())
print('ware -', my_basket.popitem())
print('ware -', my_basket.popitem())
print("Total cost -", total_cost)

Запустимо код і впевнимось у коректній роботі програми (відео 13):

 Відео 13

Наша програма працює й дає змогу проводити розрахунок.

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

На наступному занятті освоїмо нові можливості роботи з даними.