From 8cf3cf2050ef729e9e0a9bad2b97c5dddd57a43c Mon Sep 17 00:00:00 2001 From: Ivan Kozin Date: Wed, 13 Dec 2023 14:20:57 +0300 Subject: [PATCH 1/6] Create calculator.py file --- calculator.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 calculator.py diff --git a/calculator.py b/calculator.py new file mode 100644 index 0000000..e69de29 From 6ab477dab83b9d51258c4f487b42a3aa4e3e337d Mon Sep 17 00:00:00 2001 From: Ivan Kozin Date: Wed, 13 Dec 2023 14:35:43 +0300 Subject: [PATCH 2/6] Add main function. Add OPERATION dictionary --- calculator.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/calculator.py b/calculator.py index e69de29..a320a60 100644 --- a/calculator.py +++ b/calculator.py @@ -0,0 +1,22 @@ +''' +It's a calculator tool. +''' + +OPERATIONS = { + '+' : addition(num1, num2), + '-' : subtraction, + '*' : multiplication, + '/' : division, + ':' : division +} + + +def main(): + input_ = input('Введите математическую операцию').split() + num1 = float(input_[0]) + num2 = float(input_[2]) + operator = input_[1] + result = 0 + + OPERATIONS[operator] + print(result) \ No newline at end of file From ad4c614e8505eb8f66ae6c43ecc8f0e505caaf0e Mon Sep 17 00:00:00 2001 From: Ivan Kozin Date: Wed, 13 Dec 2023 14:44:22 +0300 Subject: [PATCH 3/6] Add subtraction function. Modify main function --- calculator.py | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/calculator.py b/calculator.py index a320a60..287b8d7 100644 --- a/calculator.py +++ b/calculator.py @@ -1,22 +1,33 @@ -''' +""" It's a calculator tool. -''' +""" + + +def addition(num1, num2): + return num1 + num2 + + +def subtraction(num1, num2): + return num1 - num2 + OPERATIONS = { - '+' : addition(num1, num2), - '-' : subtraction, - '*' : multiplication, - '/' : division, - ':' : division -} + '+': addition, + '-': subtraction} + + +# '*' : multiplication, +# '/' : division, +# ':' : division def main(): - input_ = input('Введите математическую операцию').split() + input_ = input('Введите математическую операцию: \n').split() num1 = float(input_[0]) num2 = float(input_[2]) operator = input_[1] - result = 0 + result = OPERATIONS[operator](num1, num2) + print(result) + - OPERATIONS[operator] - print(result) \ No newline at end of file +main() From 70703643e38a1a79ae088650c5080bc6782b1a04 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Wed, 13 Dec 2023 14:56:24 +0300 Subject: [PATCH 4/6] Add multiplication function. --- calculator.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/calculator.py b/calculator.py index 287b8d7..243aa66 100644 --- a/calculator.py +++ b/calculator.py @@ -11,12 +11,14 @@ def subtraction(num1, num2): return num1 - num2 -OPERATIONS = { - '+': addition, - '-': subtraction} +def multiplication(num1, num2): + return num1 * num2 -# '*' : multiplication, +OPERATIONS = { + '+': addition, + '-': subtraction, + '*': multiplication} # '/' : division, # ':' : division From 3821a432e5bb601f9369e8be1aa30a58c9a13dbe Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Wed, 13 Dec 2023 15:14:30 +0300 Subject: [PATCH 5/6] Add division function. Add docstrings. --- calculator.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/calculator.py b/calculator.py index 243aa66..f534f87 100644 --- a/calculator.py +++ b/calculator.py @@ -4,31 +4,94 @@ def addition(num1, num2): + """ + Add two numbers. + + Args: + num1: The first number to add. + num2: The second number to add. + + Returns: + The sum of the two numbers. + """ + return num1 + num2 def subtraction(num1, num2): - return num1 - num2 + """ + Subtract two numbers. + Args: + num1: The first number to subtract. + num2: The second number to subtract. + + Returns: + The difference of the two numbers. + """ + + return num1 - num2 def multiplication(num1, num2): + """ + Multiply two numbers. + + Args: + num1: The first number to multiply. + num2: The second number to multiply. + + Returns: + The product of the two numbers. + """ + return num1 * num2 + +def division(num1, num2): + """ + Divide two numbers. + + Args: + num1: The dividend. + num2: The divisor. + + Returns: + The quotient of the two numbers. + """ + try: + return num1 / num2 + except ZeroDivisionError: + raise ZeroDivisionError("Ooops! calculator.py сan't divide by zero. We will definitely add this feature later") + + OPERATIONS = { '+': addition, '-': subtraction, - '*': multiplication} -# '/' : division, -# ':' : division + '*': multiplication, + '/': division, + ':': division +} def main(): + """ + Computes the result of a mathematical operation. + Input is a string containing a mathematical operation. + The operation must be in the format "number operator number". + Args: + No args. + Returns: + the result of the mathematical operation. + """ input_ = input('Введите математическую операцию: \n').split() num1 = float(input_[0]) num2 = float(input_[2]) operator = input_[1] - result = OPERATIONS[operator](num1, num2) + try: + result = OPERATIONS[operator](num1, num2) + except KeyError: + raise KeyError(f'Unexpected operator {operator}. Supported only +, -, /, :, *') print(result) From 66f76d3bc2277d498e46e3e8a77ab518f98c325d Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Wed, 13 Dec 2023 15:24:42 +0300 Subject: [PATCH 6/6] Update README.md. Modify main fucntion welcome world --- README.md | 71 +++++++++++++++++---------------------------------- calculator.py | 2 +- 2 files changed, 25 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 1664a01..510b474 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,26 @@ -# HW2_Git_and_python +# THE BEST CALCULATOR *This is the repo for the second homework of the BI Python 2023 course* -### Homework description -В качестве данного ДЗ вам будет необходимо познакомиться с командной работой через GitHub, а также освежить в памяти основые концепции языка Python, которые вы проходили во вступительном курсе. Прочтите внимательно все инструкции перед тем приступить к выполнению задания, при необоходимости задавайте вопросы в общем чате или личных сообщениях. Текст задания большой потому что подробный. Со временем подробностей в ДЗ будет меньше (хорошо ли это?). - -#### Основное задание - -В этом задании вам надо будет написать мини-программу `calculator.py`. Программа должна принимать на вход (через `input()`) строку с некоторым математическим выражением и печатать число - результат вычисления этого выражения. Гарантируется что выражение состоит из двух чисел (`int` или `float`) и математического оператора между ними (один из 4: `+ - * /`). Все указанные элементы разделены пробелами (пример: `5 - 3`). Реализуйте внутри скрипта 5 функций: `main` и 4 отдельные функции на каждый из типов математических операций. Функция `main` внутри себя должна принимать входное выражение, отдавать его на вычисление соответствующей функции, получать результат и печатать его на экран. Каждая из 4 функций лишь принимает определенное выражение от главной функции, вычисляет его и возвращает результат главной функции. - -**Tехническое требование к заданию.** - -Это задание будет выполняться в командах по 4-5 человек. Каждый из членов команды должен внести ***как минимум*** 1 функцию в скрипт `calculator.py`. Каждое внесение функции должно сопровождаться коммитом с осмысленным описанием коммита. Ниже приведена последовательность действий для успешного выполнения задания: - -1. Посмотрите состав своей команды здесь ([**ССЫЛКА**](https://plausible-cannon-091.notion.site/Teams-for-HW2-429f378d25db4723a2979cd5434efc95?pvs=4)). Самостоятельно выбирете тимлида в вашей команде. Распределите кто какую из 5-и функций будет писать. -2. Тимлид должен сделать форк данного репозитория (убедитесь что вы убрали галочку в пункте **`Copy the** master **branch only`)**. Тимлид **создает новую ветку** `HW2_`. После этого тимлид отправляет каждому ссылку на форкнутый репозиторий. -3. Каждый член команды делает свой собственный форк с репозитория тимлида. После этого клонирует свой собственный форк к себе на локальный компьютер. -4. Локально в этом репозитории пишет в скрипте его часть работы. Скрипт `calculator.py` должен лежать в папке `HW2_` и может быть либо создан тимлидом в пункте 2 (тогда члены команды пишут код в имеющемся файле), либо же каждый член команды создает локально данный файл независимо от коллег. Это на выбор команды. -5. Каждый член команды после завершения своей части работы коммитит свои локальные изменения с ************************осмысленным************************ сообщением коммита и делает push в свой удаленный репозиторий. На этом этапе вам может потребоваться сделать синхронизацию с репозиторием тимлида, если там уже произошли изменения (это во вкладке *sync fork* → *fetch*, см. скриншот в [Notion](https://plausible-cannon-091.notion.site/Python-course-8b1f0f28506543bcba2a74c9b411a6cb)) -6. После этого из персональных удаленных репозиториев делается *pull-request* в репозиторий тимлида **в ветку** `HW2_` чтобы собрать все куски кода воедино (это во вкладке *contribute* → *open pull request*, см. скриншот) -7. Тимлид (или любой другой член команды) дополняет общий репозиторий файлом `README.md` который содержит описание вашей мини-программы и состав команды разработчиков. -8. После завершения работы тимлид делает *pull-request* вашего командного репозитория обратно в репозиторий курса (в соответствующую ветку!) для проверки (также через *contribute*). - -return: прикрепите ссылку на pull-request тимлида в Google Class (можете сделать от лица каждого члена команды, но это не обязательно). - -#### Советы - -- Задание не требует написания большого или сложного кода на python, но является достаточно сложным с точки зрения синхронизации членов команды. Лучший способ сделать его - это устроить командный созвон в Zoom / Discord / Google meet / … и всем вместе выполнить его. Вы можете делать демонстрацию экрана тимлида чтобы все поняли что происходит или экранов коллег которым нужна помощь. -- В работе с Git всегда что-то может пойти не так. Существует несколько способов отмены изменений, которые стоит освоить в ходе учебы в ИБ. Тем не менее, первое время нет ничего плохого в том чтобы просто удалить всё и начать заново! -- Задание может вызывать трудности в работе с Git. Пока еще только начало сентября и скорее всего нет завалов по другим делам - я советую потратить лишнее время и разобраться в пробелах. - -#### Дополнительное задание - -1. Прикрепите в `README.md` файле скриншот созвона вашей команды. - -#### Разбалловка - -- За каждую из 5 функций с осмысленным сообщением коммита и своим автором - **1.6 балла** (итого 1.6 * 5 = 8) -- За наличие полноценного README - **1 балл** -- За правильную структуру форков как описано выше - **1 балл** -- За доп. задание - **1 доп. балл** - -Баллы начисляются всем членам команды одинаково. - -#### Предполагаемый **учебный результат** - -Это задание позволит получить реальный опыт работы с Git и GitHub в командных проектах. Далее этот навык окажется незаменимым. Также это задание позволит вам познакомиться с сокурсниками. - -Удачи! ✨✨ +## Installation +Copy and run: +```cmd +git clone git@github.com:ivandkoz/HW2_Git_and_python.git +cd HW2_Git_and_python +``` + +## Description +Our calculator can calculate addition, subtraction, multiplication, +division. Usage is pretty simple: just download repo and run `calculator.py`: +### USE SEPARATOR BETWEEN NUMBERS AND OPERATION SIGN +```cmd +python calculator.py +Enter a mathematical operation: +2 + 3 +5.0 +``` +## Private policy and contacts +This tool can be freely distributed and used. +
+If you have any suggestions for improving the tool or if you find a bug, please contact us by email. +
+Team leader: Ivan Kozin ivan.d.kozin@gmail.com \ No newline at end of file diff --git a/calculator.py b/calculator.py index f534f87..17d28bf 100644 --- a/calculator.py +++ b/calculator.py @@ -84,7 +84,7 @@ def main(): Returns: the result of the mathematical operation. """ - input_ = input('Введите математическую операцию: \n').split() + input_ = input('Enter a mathematical operation: \n').split() num1 = float(input_[0]) num2 = float(input_[2]) operator = input_[1]