Вы находитесь на странице: 1из 15

Programming

Languages

Лабораторная работа #03


Базовый синтаксис языка Python 3.
Система типов.
Арифметические операции.
Линейные алгоритмы

LEARN. GROW. SUCCED.


® 2020-2021. Department: <Software of Information Systems and Technologies>
Faculty of Information Technology and Robotics
Belarusian National Technical University
by Viktor Ivanchenko / ivanvikvik@bntu.by / Minsk
Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

ЛАБОРАТОРНАЯ РАБОТА #03


Базовый синтаксис языка Python 3. Си-
стема типов. Арифметические операции.
Линейные алгоритмы
Цель работы
Закрепить систему типов и базовый синтаксис языка Python 3 на примере напи-
сания простейших консольных интерактивных программ с использованием
арифметических операций и линейных алгоритмов.

Общее задание
Для закрепления написания простейших консольных интерактивных программ
с использованием языка Python 3 попробуйте создать простенькие программы-
конверторы для различных шкал температур (из градусов Цельсия в градусы
Фаренгейта или Кельвина и наоборот) или для различных валют (к примеру, из
бел. руб. в евро или наоборот). Можно использовать любую предметную об-
ласть для создания однотипных приложений (к примеру, конвертор значений
углов из градусы в радианы и наоборот и т.д.).

Основное задание
1) Масса динозавра задаётся в граммах. Разработайте программу, которая вы-
числяет, сколько это килограммов, центнеров и т.д.
2) Дан общий размер файла в байтах (размер задаётся в виде целого числа). Раз-
работайте программу, которая вычисляет, сколько это килобайтов, мегабайтов
и т.д.
3) Разработайте программу, которая меняет местами содержимое двух перемен-
ных a и b. Если есть возможность, то укажите все возможные варианты обмена
в языке Python и проанализируйте плюсы и минусы приведённых решений.

1 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

Дополнительное задание
Разработать исследовательскую программу, которая тестировала бы все воз-
можные арифметические операции над «простыми» (примитивными) типами
данных в Python. К простым стандартным типам данных можно отнести целые
числа (int), числа с плавающей запятой (float), булевский тип (bool) и строки
(str). Сделать соответствующий анализ результатов и выводы.

Требования к выполнению
1) При написании кода считать, что пользователь вводит всегда корректные дан-
ные.

2) Если логически не подразумевается или в задании иного не указано, то вход-


ными и выходными данными являются вещественные числа (числа с плаваю-
щей запятой).

3) Программа должна обязательно быть снабжена комментариями на англий-


ском языке, в которых необходимо указать краткое предназначение про-
граммы, её версию, ФИО разработчика, номер группы и дату разработки.

4) Интерфейс всех программ должен быть англоязычным.

Best of LUCK with it, and remember to HAVE FUN while you’re learning :)
Victor Ivanchenko

2 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

Что нужно запомнить (краткие тезисы)


1. Тип переменной – это совокупность всевозможных значений, которое может
принимать и хранить переменная. Тип переменной также определяет сово-
купность разрешённых операций над данной переменной.
2. Языки программирования по типизации принято делить на два больших ла-
геря – типизированные и нетипизированные (бестиповые). К первому
например относятся C, С++, С#, Java, Python, Scala, PHP, Pascal, JavaScript, Lua
и мн. др., а ко второму – языки ассемблера, Forth, HQ9, Piet, Brainfuck.
3. В зависимости от того, в какой момент и кто (что) определяет тип переменной,
все типизированные языки программирования делятся на динамически ти-
пизированные и статически типизированные.
4. В большинстве случаев, при использовании статически типизированного
языка тип переменной определяется программистом при написании исход-
ного кода во время объявления и не может быть изменён позже, т.е. на мо-
мент компиляции (интерпретации) тип переменной уже известен. Примеры
языков со статической типизацией: C, C++, C#, Java, Pascal.
5. При использовании динамически типизированного языка тип переменной
определяется во время выполнения программы в момент присваивания ей
значения, т.е. на момент компиляции (интерпретации) тип переменной не из-
вестен. Пример языков с динамической типизацией: Python, Ruby, JavaScript.
6. Также различают языки с сильной (строгая) и слабой (нестрогая) типизацией.
7. Сильная типизация (strong typing) выделяется тем, что язык не позволяет
смешивать в выражениях различные типы и не выполняет автоматические не-
явные преобразования, например нельзя вычесть из строки множество. При-
мер языков с сильной типизацией: Python, Java, C#, Ruby, Haskell, Lisp, D, Pascal.
8. Языки со слабой типизацией (weak typing) выполняют множество неявных
преобразований автоматически, даже если может произойти потеря точности
или преобразование неоднозначно. Пример языков со слабой типизацией: C,
C++, JavaScript, Visual Basic, PHP, Perl, Objective-C.
9. Дополнительно, в зависимости от того, нужно ли явно задавать тип перемен-
ных (аргументов функций и самих функций) или нет, все языки имеют явную

3 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

(explicit typing) или неявную типизацию (implicit typing). Пример языков с яв-
ной типизацией: C, C++, C#, Objective-C, Java, D, Pascal, а языки с неявной ти-
пизацией – Python, Ruby, JavaScript, PHP, Lua, Perl, Haskell, Lisp.
10. Язык Python 3 имеет следующие категории встроенных по умолчанию типов:
Text type (строковый тип): str
Numeric types (числовые типы): int, float, complex
Sequence types (типы-контейнеры): list, tuple, range
Mapping type (ассоциативный тип): dict
Set types (множества): set, frozenset
Boolean type (булевский тип): bool
Binary types (бинарные или битовые типы): bytes, bytearray, memoryview

11. Ниже представлена таблица присваивания значений целевым переменным


(тип определяется неявно):
Пример Тип данных
x = "Hello World" str
x = 10 int
x = 2.5 float
x = 1j complex
x = ["pear", "apple", "banana", "kiwi"] list
x = ("pear", "apple", "banana", "kiwi") tuple
x = range(7) range
x = {"name" : "Alex", "age" : 17} dict
x = {"pear", "apple", "banana", "kiwi"} set
x = frozenset({"pear", "apple", "banana", "kiwi"}) frozenset
x = True bool
x = b"Hello, students!" bytes
x = bytearray(7) bytearray
x = memoryview(bytes(7)) memoryview

12. Если необходимо явно указать тип присеваемого значения или попытаться
преобразовать значение одного типа в значение другого типа, то можно ис-
пользовать функции-конструкторы, которые приведены ниже в таблице:
Пример Тип данных
x = str("Hello World") str
x = int(10) int
x = float(2.5) float

4 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

x = complex(1j) complex
x = list(["pear", "apple", "banana", "kiwi"]) list
x = tuple(("pear", "apple", "banana", "kiwi")) tuple
x = range(7) range
x = dict({"name" : "Alex", "age" : 17}) dict
x = set({"pear", "apple", "banana", "kiwi"}) set
x = frozenset({"pear", "apple", "banana", "kiwi"}) frozenset
x = bool(7) bool
x = bytes(7) bytes
x = bytearray(7) bytearray
x = memoryview(bytes(7)) memoryview
13. Для проверки типа значения, которое хранится в переменной, в языке Python
используют встроенную функцию type(…).
14. В языках программирования существует поддержка стандартных встроенных
примитивных операций (операторов), которые могут выполнять вычислитель-
ные действия со значениями соответствующих стандартных типов данных.
15. По типу все операции делятся на унарные, бинарные (binary) и тернарные
(ternary). Тип операция показывает на то, сколько необходимо передать дан-
ной операции операндов (значений или переменных) чтобы операция могла
выполниться и возвратить результат.
16. Чтобы выполнилась унарная (unary) операция – достаточно передать ей один
операнд, т.е. одно значение или переменную. К примеру, операцию унарный
минус, которая меняет знак операнда, можно использовать следующим обра-
зом: print(-x).
17. Чтобы выполнилась бинарная (binary) операция – необходимо передать ей
уже два операнда (значения или переменных). К примеру, операцию сложе-
ние, которая подсчитывает сумму двух операндов, можно использовать сле-
дующим образом: print(a + b).
18. Соответственно, тернарная (ternary) операция требует для своего выполне-
ния три операнда. К примеру, чтобы сравнить вхождение числа в заданный
промежуток, необходимо применить тернарную операцию сравнения (такая
операция есть не во всех языках): print(a < x < b).
19. Запомните, любая операция всегда возвращает соответствующий результат её
выполнения.

5 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

20. По характеру исполнении и схожести действий все операции дополнительно


делятся на группы. В современных языка программирования минимум суще-
ствуют пять групп операций: арифметические операции (arithmetic
operators), операции отношений (comparison operators), логические опера-
ции (logical operators), побитовые (поразрядные) операции (bitwise
operators) и группа операций составного присваивания + сама востребован-
ная – операция присваивания (assignment operators), которая в языке Python
имеет ещё и несколько разновидностей.
21. Дополнительно в Python есть ещё две группы операций: операции идентифи-
кации или тождественности (identity operators) и операции принадлежности
(membership operators).
22. Все существующие арифметические (arithmetic) операции в основном в
языке Python 3 используются для выполнения общих математических опера-
ций над числами (но есть и перегруженные версии, которые могут быть при-
менены со значениями других типов данных) и представлены ниже в таблице:

Операция Пример Результат при


Название (name)
(operation) (example) a=5иb=2
- Унарный минус (unary plus) -a -5
+ Унарный плюс (unary minus) +b 2
** Возведение в степень (exponentiation) a**b 25
* Умножение (multiplication) a * b 10
/ Деление (division) a / b 2.5
// Целочисленное деление (floor division) a // b 2
% Остаток от деления (modulus) a % b 1
+ Сложение (addition) a + b 7
– Вычитание (subtraction) a – b 3

6 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

Пример выполнения общего задания


Задание
Разработайте две программы, одна из которых конвертирует заданную тем-
пературу в градусах (degrees) по шкале Цельсия (Celsius) в температуру по
шкале Фаренгейта (Fahrenheit), а вторая наоборот.

Решение
1) Известно (источник: https://ru.wikipedia.org/wiki/Градус_Фаренгейта), что фор-
мула для преобразование температуры по шкале Фаренгейта в температуру
по шкале Цельсия выглядит следующим образом:
5
𝑡𝐶 = ∗ (𝑡𝐹 − 32),
9
а формула для преобразования температуры по шкале Цельсия в темпера-
туру по шкале Фаренгейта:
9
𝑡𝐹 = ∗ 𝑡𝐶 + 32.
5

Для общего развития приводим диаграмму перевода температур:

2) Перед написание первого приложения разработаем вербальное (словесное)


описание последовательности действий для достижения результата:

7 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

a) объявление целочисленной переменной для хранения первоначаль-


ного значения градусов по шкале Цельсия;
b) объявление вещественной переменной для сохранения результата кон-
вертации градусов по шкале Цельсия в градусы по шкале Фаренгейта;
c) инициация целочисленной переменной соответствующим значением;
d) выполнение выражения по конвертации градусов согласно указанной
формулы и присвоение вещественной переменной
e) вывод полученного результата на консоль.
3) Исходный код первой программы представлен ниже:

4) Результат работы первой программы:

5) Давайте рассмотрим вышеописанную программу более подробно:


5.1) объявление вещественную переменную и осуществляем её инициализа-
цию строкой с помощью функции input(...):

Пользовательская Оператор Вызов функции input(…) для ввода поль-


переменная присваивания зователем строковых данных с консоли

5.2) конвертация значения строкового типа данных в вещественное значение:

8 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

5.3) вычисление выражения, согласно формуле конвертирования и присвое-


ние результата выражения переменной:

Пользователь- Целочислен- Целочислен- Оператор Оператор


ская переменная ный литерал ный литерал умножения сложения

Оператор при- Оператор Пользователь- Целочислен-


сваивания деления ская переменная ный литерал

5.4) вывод результата на системную консоль с помощью форматного вывода с


использованием функций print(… ) и встроенной в строку функции for-
mat(…):

Функция для Символ новой Места для вставки веще- Функция для фор-
вывода print(…) строки ственных значений мата format(…)

Пользовательские переменные, значение которых будет


подставлено в соответствующую шаблонную строку

6) Итого, анатомия первой программы следующая:


Инициализация переменной

Объявление
переменной

Вычисление
выражения

Вывод данных на системную консоль

7) Перед написание второго приложения также разработаем вербальное (сло-


весное) описание последовательности действий для достижения результата:

9 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

a) объявление целочисленной переменной для хранения первоначаль-


ного значения градусов по шкале Фаренгейта;
b) объявление вещественной переменной для сохранения результата кон-
вертации градусов по шкале Цельсия в градусы по шкале Фаренгейта;
c) инициация целочисленной переменной соответствующим значением;
d) выполнение выражения по конвертации градусов согласно указанной
формулы и присвоение вещественной переменной
e) вывод полученного результата на консоль.
8) Исходный код второй программы представлен ниже:

9) Результат работы второй программы:

10) Попробуйте самостоятельно разобрать анатомию данной программы.

10 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

Пример исследовательской программы для те-


стирования арифметических операций над зна-
чениями булевского типа в языке Python 3
Задание
Разработать исследовательскую программу, которая тестировала бы все воз-
можные арифметические операции над данными булевского типа.

Решение
1) Ниже представлен исходный код тестирования всех возможных арифметиче-
ских операций над значениями булевского типа:

a = True
b = False

print("Result of testing Arithmetic Operations on boolean data type in Python")

c = a + b
s = f"1) addition:\t\t {a} + {b} = {c}\n"

c = a - b
s += f"2) subtraction:\t\t {a} - {b} = {c}\n"

c = b - a
s += f"3) subtraction:\t\t {a} - {b} = {c}\n"

c = a * b
s += f"4) multiplication:\t {a} * {b} = {c}\n"

c = b / a
s += f"5) division:\t\t {b} / {a} = {c}\n"

c = b // a
s += f"6) floor division:\t {b} // {a} = {c}\n"
s += f"7) division:\t\t {a} / {b} => ZeroDivisionError: division by zero\n"
s += f"8) division:\t\t {a} // {b} => ZeroDivisionError: division by zero\n"

c = b % a
s += f"9) modulus:\t\t\t {b} % {a} = {c}\n"
s += f"10) modulus:\t\t {a} % {b} => ZeroDivisionError: division or modulo by zero\n"

c = a ** b
s += f"11) exponentiation:\t {a}**{b} = {c}\n"

11 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

c = b ** a
s += f"12) exponentiation:\t {b}**{a} = {c}"

print(s)

2) Ниже представлен скриншот работы тестовой программы:

12 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

Контрольные вопросы
1. Что такое тип данных и что он определяет?
2. В зависимости от наличия системы типов на какие две
группы делятся все языки программирования?
Перечислите несколько представителей данных групп, а
также объясните их преимущества и недостатки.
3. В зависимости от того, когда определяется тип переменной, на какие две
группы делятся типизированные языки программирования? Перечислите
несколько представителей данных групп, а также объясните их преимущества
и недостатки.
4. В зависимости от того, можно ли в выражениях комбинировать операции со
значениями различных типов данных, на какие две группы делятся языки
программирования? Перечислите несколько представителей данных групп, а
также объясните их преимущества и недостатки.
5. В зависимости от того, нужно ли задавать тип переменной явно или не нужно,
на какие две группы делятся языки программирования? Перечислите
несколько представителей данных групп, а также объясните их преимущества
и недостатки.
6. Какие существуют встроенные (стандартные) типы данных в языке Python 3?
7. Что измеряет диапазон типа данных?
8. Что такое инициализация? Можете ли вы обратиться к переменной, если вы
инициализируете её чуть позже?
9. В зависимости от количества необходимых операндов для вычисления
встроенных операций на какие типы делятся все операции в языках
программирования?
10. Какие существуют группы операций во всех языках программирования?
11. Какие есть группы операций в языке Python 3?
12. Что такое приоритет операции?
13. Что такое ассоциативность операции?
14. Что такое выражение?
15. Какие есть способы инициализации переменных в языке Python 3?

13 | We hope you enjoy working with Python!


Python Basic Syntax. Data Types. Arithmetical Operations. Linear Algorithms

16. Какие есть способы присваивания данных переменным в языке Python 3?


17. Какие есть способы обмена содержимого двух переменных в языке Python 3?
18. Какой из арифметических операторов не может иметь дробного операнда?
19. Какие из арифметических операций не могут иметь в качестве второго
операнда значение ноль?
20. В чём схожесть группы арифметических операций? Какие операции включает
в себя данная группа и их особенности при работе с числами?
21. Как в языке Python 3 ведут себя арифметические операции при
использовании их со строками?
22. Как ведут себя значения булевского типа при использовании их в
арифметических выражениях?
23. Что произойдёт, если вы присвоите строковой переменой целочисленное
значение (или наоборот)?
24. С помощью какой функции можно определить тип значения переменной?
25. Какие существуют функции конвертации (преобразования) значения одного
типа данных в значение другого типа?

14 | We hope you enjoy working with Python!