Типи даних та їх перетворення
Last updated on 2025-02-23 | Edit this page
Estimated time: 20 minutes
Overview
Questions
- Які види даних зберігають програми?
- Як я можу перетворити один тип в інший?
Objectives
- Визначення ключових відмінностей між цілими числами та числами з плаваючою точкою.
- З’ясувати ключові відмінності між числами та символьними рядками.
- Використання вбудованих функцій для перетворення цілих чисел, чисел з плаваючою точкою та рядків.
Кожне значення має тип.
- Кожне значення, яке використовує програма, має певний тип.
- Ціле число (
int
): зображує додатні або від’ємні цілі числа, наприклад 3 або -512. - Число з плаваючою крапкою (
float
): зображує дійсні числа, наприклад 3.14159 або -2.5. - Рядки символів (зазвичай просто “рядки”,
str
): представляють текст.- Укладені в одинарні або подвійні лапки (тип лапок має збігатися).
- Під час відображення рядку лапки не друкуються.
Вбудована функція type
повертає тип значення.
- Використовуйте вбудовану функцію
type
, щоб з’ясувати, який тип має значення. - Це також працює зі змінними.
- Але запамʼятайте: значення має свій тип, а змінна тільки вказує на деяке значення.
OUTPUT
<class 'int'>
OUTPUT
<class 'str'>
Тип визначає, які операції (або методи) можна виконувати над даним значенням.
- Тип значення визначає, що може робити з ним програма.
OUTPUT
2
ERROR
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-67f5626a1e07> in <module>()
----> 1 print('hello' - 'h')
TypeError: unsupported operand type(s) for -: 'str' and 'str'
Ви можете використовувати оператори “+” та “*” для дій над рядками.
- “Додавання” рядків об’єднує їх.
OUTPUT
Ahmed Walsh
- Якщо рядок помножити на ціле число N, то це створить новий
рядок, який буде містити вихідний рядок, повторений N разів.
- Оскільки множення - це повторюване додавання.
OUTPUT
==========
Рядки мають довжину (але числа її не мають).
- Вбудована функція
len
повертає кількість символів у рядку.
OUTPUT
11
- Але числа не мають довжини (навіть нульової).
ERROR
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-f769e8e8097d> in <module>()
----> 1 print(len(52))
TypeError: object of type 'int' has no len()
Must convert numbers to strings or vice versa when operating on them.
- Додавання чисел та рядків неможливе.
ERROR
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-fe4f54a023c6> in <module>()
----> 1 print(1 + '2')
TypeError: unsupported operand type(s) for +: 'int' and 'str'
- Таке додавання не дозволено, тому що воно не визначене: чи має
1 + '2'
повертати3
чи'12'
? - Перетворення типу виконується за допомогою функції, яка має те ж саме імʼя, що і потрібний тип.
OUTPUT
3
12
З цілими та дійсними числами можна оперувати одночасно.
- Цілі та дійсні числа можна використовувати разом для арифметичних
дій.
- Python 3 автоматично перетворить цілі числа у дійсні, якщо це потрібно.
OUTPUT
half is 0.5
three squared is 9.0
Змінні можуть змінити своє значення тільки через присвоєння.
- Якщо в електронних таблицях ми зробимо одну комірку залежною від іншої та оновимо останню, перша оновиться автоматично.
- Це не трапляється у мовах програмування.
PYTHON
variable_one = 1
variable_two = 5 * variable_one
variable_one = 2
print('first is', variable_one, 'and second is', variable_two)
OUTPUT
first is 2 and second is 5
- Комп’ютер зчитує значення
variable_one
під час множення, створює нове значення та призначає цьому значенню ім’яvariable_two
. - Після того, як значення
variable_two
встановлено, воно не залежить від значенняvariable_one
, отже його значення не змінюється автоматично, колиvariable_one
змінюється.
Дроби
Який тип має значення 3.4? Як це можна встановити?
Автоматичне перетворення типів
Який тип має вираз 3.25 + 4?
Вибір типу
Який тип значення (ціле число, дійсне число або рядок символів) ви б використовували для представлення кожного з наступних значень? Спробуйте знайти більш ніж одну гарну відповідь для кожної проблеми. For example, in # 1, when would counting days with a floating point variable make more sense than using an integer?
- Кількість днів, які пройшли з початку року.
- Час, що пройшов від початку року до сьогоднішнього дня.
- Серійний номер лабораторного обладнання.
- Вік лабораторного зразка
- Поточне населення міста.
- Середня чисельність населення міста протягом певного часу.
Відповіді на запитання:
Ціле, оскільки число днів належить діапазону від 1 до 365.
Дійсне число, оскільки потрібно використовувати частини дня.
Символьний рядок, якщо серійний номер містить літери та цифри, або ціле число, якщо серійний номер складається лише з цифр.
Це залежить від багатьох факторів! Як вимірюється вік зразка? Кількість днів з моменту, коли його було створено (ціле число)? Дата і час (рядок)?
Виберіть дійсне число, щоб представити приблизну кількість населення за допомогою округлення (наприклад, до мільйонів), або ціле число, щоб представити точну кількість населення.
Дійсне число, оскільки результат усереднення, швидше за все, буде мати дробну частину.
Типи операцій ділення
У Python 3 оператор //
виконує ціле ділення (повертає
цілу частину результату), оператор /
виконує ділення з
плаваючою точкою, та оператор ‘%’ (або модуль) повертає залишок
від цілого ділення:
OUTPUT
5 // 3: 1
5 / 3: 1.6666666666666667
5 % 3: 2
Припустимо, що num_subjects
- це кількість суб’єктів,
які беруть участь у дослідженні, а num_per_survey
—
кількість, яка може взяти участь в одному опитуванні. Напишіть вираз,
який обчислює кількість необхідних опитувань для охоплення кожного хоча
б один раз.
Потрібно визначити мінімальну кількість опитувань для охоплення
кожного суб’єкта хоча б один раз, тобто округлене значення
num_subjects/num_per_survey
. Це еквівалентно виконанню
дійсного ділення за допомогою оператору //
і додаванню 1 до
результату. Перед діленням нам потрібно відняти 1 від кількості
num_subjects
, щоб працювати з випадком, коли
num_subjects
порівну ділиться на
num_per_survey
.
PYTHON
num_subjects = 600
num_per_survey = 42
num_surveys = (num_subjects - 1) // num_per_survey + 1
print(num_subjects, 'subjects,', num_per_survey, 'per survey:', num_surveys)
OUTPUT
600 subjects, 42 per survey: 15
Перетворення рядків у числа
Якщо потрібно, функція float()
перетворить рядок у
дійсне число, а функція int()
перетворить дійсне число в
ціле:
OUTPUT
string to float: 3.4
float to int: 3
Якщо перетворення не має сенсу, то генерується повідомлення про помилку.
ERROR
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-5-df3b790bf0a2> in <module>
----> 1 print("string to float:", float("Hello world!"))
ValueError: could not convert string to float: 'Hello world!'
Беручи це до уваги, чого чекати від наступної програми?
Що вона робить насправді?
Як це пояснити?
Що ви очікуєте від цієї програми? Чому б не очікувати, що у Python 3
команда int
перетворить рядок “3.4” на 3.4 та виконає
додаткове перетворення у ціле число 3. After all, Python 3 performs a
lot of other magic - isn’t that part of its charm?
OUTPUT
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-ec6729dfccdc> in <module>
----> 1 int("3.4")
ValueError: invalid literal for int() with base 10: '3.4'
Однак Python 3 видає помилку. Чому? Можливо, щоб бути послідовним. If you ask Python to perform two consecutive typecasts, you must convert it explicitly in code.
OUTPUT
3
Арифметичні дії з різними типами
Правильні відповіді: 1 та 4
Комплексні числа
Python підтримує комплексні числа, які записуються як
1.0 + 2.0j
. If val
is a complex number, its
real and imaginary parts can be accessed using dot notation as
val.real
and val.imag
.
OUTPUT
6.0
2.0
- Чому, на вашу думку, Python використовує
j
замістьi
для уявної частини? - What do you expect
1 + 2j + 3
to produce? - Що ви очікуєте від
4j
? А що від4 j
або4 + j
?
Стандартні математичні позначення зазвичай використовують
i
для позначення комплексного числа. However, from media reports it was an early convention established from electrical engineering that now presents a technically expensive area to change. Stack Overflow містить додаткові пояснення та обговорення.(4+2j)
4j
абоSyntax Error: invalid syntax
. В останньому випадкуj
вважається змінною і значення виразу залежить від того, чи єj
визначеним.
Key Points
- Кожне значення має тип.
- Вбудована функція
type
повертає тип значення. - Типи контролюють, які операції можна виконувати над значеннями.
- Рядки можна додавати і помножувати.
- Рядки мають довжину (але числа її не мають).
- Необхідно перетворювати числа в рядки або навпаки під час виконання певних операцій.
- Цілі та дійсні числа можна використовувати разом.
- Змінні можуть набути своє значення тільки через присвоювання.