Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Andrey Fesko #7

Open
wants to merge 20 commits into
base: master
Choose a base branch
from
Open

Conversation

AndreyFesko
Copy link

test

self.assertEqual(pycalc.main('222+222'), eval('222+222'))

def test_module_math_trigonometry(self):
self.assertEqual(pycalc.main('sin(90)'), eval('math.sin(90)'))
Copy link
Collaborator

Choose a reason for hiding this comment

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

Для каких целей тут используется eval? :)
Можно ведь просто написать math.sin(90) :)

Для проверки равенства чисел с плавающей точкой я бы использовал метод assertAlmostEqual: https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertAlmostEqual

потому что с такими числами могут возникать очень интересные и неожиданные вещи, например:

number = 0.1 + 0.1 + 0.1
print(number)  # 0.30000000000000004

Copy link
Author

Choose a reason for hiding this comment

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

Точно, проблемы чисел с плавающей.
P.S. Заранее благодарю за все последующие комментарии:)



def functions(a, func, b=None):
if func == 'sin':
Copy link
Collaborator

Choose a reason for hiding this comment

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

  1. вместо этого нужно сделать маппинг, где ключ -- это имя функции, значение -- сама функция. В текущей реализации есть огромное количество условий, которые фактически не нужны
  2. А что, если есть функции, которые принимают 3 аргумента? четыре? или например совсем могут принимать любое количество аргументов?

Copy link
Author

Choose a reason for hiding this comment

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

Да, конечно. Исправлю на args.



def constants_calculation(char):
if char == 'pi':
Copy link
Collaborator

Choose a reason for hiding this comment

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

  1. а куда пропала tau? :)
  2. Для констант советую сделать такой же маппинг, как и для функций

Copy link
Author

Choose a reason for hiding this comment

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

Oops. Если правильно понял, то проморгал из-за того, что tau была добавлена только в 3+ версии.

if char == '==':
return a == b
if char == '!=':
return a != b
Copy link
Collaborator

Choose a reason for hiding this comment

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

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



def comparison_calculation(a, b, char):
if char == '<':
Copy link
Collaborator

Choose a reason for hiding this comment

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

Советую посмотреть на модуль operator
Возможно он окажется полезным в этой ситуации

Copy link
Author

Choose a reason for hiding this comment

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

Более чем.

return tool.functions(object_type(result), array[0])


def brackets_calculation(array):
Copy link
Collaborator

Choose a reason for hiding this comment

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

Функции очень большие и очень сложные. Я бы даже сказал крайне сложные. Они делают много вещей одновременно и имеют большую зону ответственности. Советую провести декомпозицию

Copy link
Author

Choose a reason for hiding this comment

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

Согласен. Понимал когда писал. Исправлю.

@AndreyFesko AndreyFesko changed the title [WIP] Andrey Fesko Andrey Fesko May 10, 2019
@AndreyFesko
Copy link
Author

Последняя версия. С учетом потраченного времени на задание по Golang не реализовано дополнительное задание (--use-modules).

@AlexeiBuzuma
Copy link
Collaborator

  1. Основная проблема, которую я тут вижу, заключается в том, что код иногда достаточно тяжело читать. Некоторые функции все еще действительно большие. Их очень сложно держать в голове. Много маленьких функций читаются намного проще, чем несколько больших. Использование ООП возможно помогло бы упростить эту задачу.
  2. Названия глобальных переменных пишут большими буквами через нижнее подчеркивание. например SQR_BRACKETS
  3. Иногда встречаются магические числа, понять, что они значат крайне сложно. например len(array) == 3
  4. Для такого решения скорее всего должна существовать только одна (максимум две-три, и то с натяжкой) точка выхода из программы. В данном случае sys.exit вызывается в 13 местах
  5. в стандартной библиотеке пайтона есть модуль array. Поэтому использование такого имени немного запутывает.

@AndreyFesko
Copy link
Author

  1. Да, с этой проблемой постепенно справляюсь.
  2. Принял.
  3. Необходим комментарий или это значит что-то идет не так?
  4. Согласен, не нужны были именно выходы.
  5. Усвоил.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants