Типи даних та їх перетворення
Last updated on 2024-10-08 | Edit this page
Overview
Questions
- Які види даних зберігають програми?
- Як я можу перетворити один тип в інший?
Objectives
- Визначення ключових відмінностей між цілими числами та числами з плаваючою точкою.
- З’ясувати ключові відмінності між числами та символьними рядками.
- Використання вбудованих функцій для перетворення цілих чисел, чисел з плаваючою точкою та рядків.
Кожне значення має тип.
- Every value in a program has a specific type.
- Ціле число (
int
): зображує додатні або від’ємні цілі числа, наприклад 3 або -512. - Число з плаваючою крапкою (
float
): зображує дійсні числа, наприклад 3.14159 або -2.5. - Character string (usually called “string”,
str
): text.- Укладені в одинарні або подвійні лапки (тип лапок має збігатися).
- Під час відображення рядку лапки не друкуються.
Вбудована функція type
повертає тип значення.
- Використовуйте вбудовану функцію
type
, щоб з’ясувати, який тип має значення. - Це також працює зі змінними.
- But remember: the value has the type — the variable is just a label.
OUTPUT
<class 'int'>
OUTPUT
<class 'str'>
Types control what operations (or methods) can be performed on a given value.
- Тип значення визначає, що може робити з ним програма.
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'
You can use the “+” and “*” operators on strings.
- “Adding” character strings concatenates them.
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
Can mix integers and floats freely in operations.
- Цілі та дійсні числа можна використовувати разом для арифметичних
дій.
- Python 3 автоматично перетворить цілі числа у дійсні, якщо це потрібно.
OUTPUT
half is 0.5
three squared is 9.0
Variables only change value when something is assigned to them.
- Якщо в електронних таблицях ми зробимо одну комірку залежною від іншої та оновимо останню, перша оновиться автоматично.
- This does not happen in programming languages.
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
- The computer reads the value of
variable_one
when doing the multiplication, creates a new value, and assigns it tovariable_two
. - Після того, як значення
variable_two
встановлено, воно не залежить від значенняvariable_one
, отже його значення не змінюється автоматично, колиvariable_one
змінюється.
Дроби
What type of value is 3.4? Як це можна встановити?
Автоматичне перетворення типів
Який тип має вираз 3.25 + 4?
Вибір типу
What type of value (integer, floating point number, or character string) would you use to represent each of the following? Спробуйте знайти більш ніж одну гарну відповідь для кожної проблеми. For example, in # 1, when would counting days with a floating point variable make more sense than using an integer?
- Кількість днів, які пройшли з початку року.
- Час, що пройшов від початку року до сьогоднішнього дня.
- Серійний номер лабораторного обладнання.
- Вік лабораторного зразка
- Поточне населення міста.
- Average population of a city over time.
Відповіді на запитання:
Ціле, оскільки число днів належить діапазону від 1 до 365.
Дійсне число, оскільки потрібно використовувати частини дня.
Символьний рядок, якщо серійний номер містить літери та цифри, або ціле число, якщо серійний номер складається лише з цифр.
Це залежить від багатьох факторів! Як вимірюється вік зразка? whole days since collection (integer)? Дата і час (рядок)?
Виберіть дійсне число, щоб представити приблизну кількість населення за допомогою округлення (наприклад, до мільйонів), або ціле число, щоб представити точну кількість населення.
Floating point number, since an average is likely to have a fractional part.
Типи операцій ділення
In Python 3, the //
operator performs integer
(whole-number) floor division, the /
operator performs
floating-point division, and the %
(or modulo)
operator calculates and returns the remainder from integer division:
OUTPUT
5 // 3: 1
5 / 3: 1.6666666666666667
5 % 3: 2
If num_subjects
is the number of subjects taking part in
a study, and num_per_survey
is the number that can take
part in a single survey, write an expression that calculates the number
of surveys needed to reach everyone once.
We want the minimum number of surveys that reaches everyone once,
which is the rounded up value of
num_subjects/ num_per_survey
. Це еквівалентно виконанню
дійсного ділення за допомогою оператору //
і додаванню 1 до
результату. Before the division we need to subtract 1 from the number of
subjects to deal with the case where num_subjects
is evenly
divisible by 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!'
Given this information, what do you expect the following program to do?
Що вона робить насправді?
Як це пояснити?
Що ви очікуєте від цієї програми? Чому б не очікувати, що у 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 provides complex numbers, which are written as
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
повертає тип значення. - Types control what operations can be done on values.
- Рядки можна додавати і помножувати.
- Рядки мають довжину (але числа її не мають).
- Необхідно перетворювати числа в рядки або навпаки під час виконання певних операцій.
- Цілі та дійсні числа можна використовувати разом.
- Змінні можуть набути своє значення тільки через присвоювання.