Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.idea/*
21 changes: 21 additions & 0 deletions HW2_nekrasova/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Basic calculator
*This repo is for the 2nd homework of Python 2023 course*

### Calculator description
This branch (HW2_nekrasova) contains calculator.py script designed to operate with two numbers via one of the following basic mathematical functions: addition, subtraction, multiplication, division.
Right after start script waits for the user to enter a mathematical expression like '2 * 2'. Expression is then splitted by spaces and calculated corresponding to function according to the specified operator.
The script handles both int and float types of numbers. It also handles devision by 0.

### Installation
Calculator is a straight forward script that does not need any prerequisites apart from installed Python 3. To get started use your CLI and execute the following commandlet: `python3 calculator.py`.
After this the script is ready to recieve your mathematical expression.

### Development
This project is leaded by nekrasovadasha22 with contributions from the following people:
- grishchenkoira
- anisssum
- NSapozhnikov
- Komarov I.
Comment on lines +14 to +18

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

README малоинформативный. Не указан вклад каждого из членов команды, нет примеров использования программы: что она получает на вход и что выдает на выходе.
Здорово, что дана команда для вызова из терминала!


Feel free to report any bugs encountered to nekrasovadasha22.
![photo_2023-09-13_19-43-30](https://github.com/nekrasovadasha22/HW2_Git_and_python/assets/144455860/d11f2906-21e0-4eda-9849-b58d64b312c8)
62 changes: 62 additions & 0 deletions HW2_nekrasova/calculator.py

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не очень хорошо, что main() определяется до определения подфункций, вызываемых main(). Лучше соблюдать логику кода: сначала определение подфункций, а уже потом больших функций.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хорошая работа!
Основное задание - работа с гитом в команде - выполнено отлично; небольшие комментарии по стилю и логике кода, PEP8, отступам и неймингу переменных - это советы на будущее (в следующих дз на это будем обращать внимание).

Так что молодцы!

Итог:
Функции: 1.6 * 5 = 8
Ветки и пулл-реквесты: 1 балл
README: 0.5
Доп. балл за фото: 1

Итог: 10.5

Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
def main(expression: str):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ого, аннотация типов!👍

expression_array = expression.split(' ')

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
expression_array = expression.split(' ')
expression_array = expression.split()

Если хочется сделать сплит по пробельным символам, то советую такую конструкцию. В случае введения двойного пробела ваш вариант вставит " " в список, а предложенная - нет. 😌

array_of_operands = []

try:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Очень уместное и лаконичное использование конструкции try-except для определения типов👍

left_int = int(expression_array[0])
array_of_operands.append(left_int)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
array_of_operands.append(left_int)
nums.append(left_int)

Логичнее было бы назвать переменную списком чисел, т.к. операнд - это +, -, /, *, и т.п.

except:
left_float = float(expression_array[0])
array_of_operands.append(left_float)
Comment on lines +9 to +10

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
left_float = float(expression_array[0])
array_of_operands.append(left_float)
left_float = float(expression_array[0])
array_of_operands.append(left_float)

Куда потерялся пробел?😢



try:
right_int = int(expression_array[2])
array_of_operands.append(right_int)
except:
right_float = float(expression_array[2])
array_of_operands.append(right_float)
Comment on lines +17 to +18

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
right_float = float(expression_array[2])
array_of_operands.append(right_float)
right_float = float(expression_array[2])
array_of_operands.append(right_float)

Снова пробел...


answer = None

if expression_array[1] == '+':

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Уместнее было бы записать операнд в переменную и сравнивать её значение, но это так, перфекционизм

answer = add(array_of_operands)

elif expression_array[1] == '-':
answer = substruct(array_of_operands)

elif expression_array[1] == '*':
answer = multiple(array_of_operands)
elif expression_array[1] == '/':
answer = divide(array_of_operands)

print(answer)


def add(arr_of_operands: list):
return arr_of_operands[0]+arr_of_operands[1]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return arr_of_operands[0]+arr_of_operands[1]
return arr_of_operands[0] + arr_of_operands[1]

По PEP8 тут нужны пробелы)) Сейчас на оценку не влияет, но в будущем обращайте внимание)


def substruct(arr_of_operands: list):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def substruct(arr_of_operands: list):
def substract(arr_of_operands: list):

Нейминг😌

# substruct

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Такие комментарии лучше удалять из кода, если они не несут дополнительной информации 😌

return arr_of_operands[0]-arr_of_operands[1]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return arr_of_operands[0]-arr_of_operands[1]
return arr_of_operands[0] - arr_of_operands[1]



def multiple(arr_of_operands: list):
answer = arr_of_operands[0] * arr_of_operands[1]
return answer


def divide(arr_of_operands: list):
if arr_of_operands[1] != 0:
answer = arr_of_operands[0]/arr_of_operands[1]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
answer = arr_of_operands[0]/arr_of_operands[1]
answer = arr_of_operands[0] / arr_of_operands[1]

return answer
else:
answer = 'Деление на 0!'
Comment on lines +53 to +54

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хороший вариант сказать пользователю о делении на ноль!)

return answer




current_expression = input()
main(current_expression)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
main(current_expression)
if __name__ == "__main__":
current_expression = input()
main(current_expression)