-
Notifications
You must be signed in to change notification settings - Fork 27
Volha Halynskaya #34
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
base: master
Are you sure you want to change the base?
Volha Halynskaya #34
Conversation
final_task/pycalc.py
Outdated
global quantity_arg | ||
quantity_arg = 0 | ||
if tokens_operator.__name__ == '<lambda>': | ||
quantity_arg = tokens_operator.__code__.co_argcount |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
У функции может быть переменное количество аргументов (*args, **kwargs
)
Это решение будет работать не всегда
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Переписала своё решение, убрала функцию с подсчетом параметров. Теперь их список передается непосредственно в момент анализа параметров внутри скобок, их может быть столько сколько нужно функции.
space_between_operator_error = "ERROR: You have to delete space(s) between the operator(s)." | ||
check = re.findall(r'(=\s+=)|(>\s+=)|(<\s+=)|(!\s+=)|(/\s+/)|(\w\s+\w)', check_expr) | ||
if check: | ||
return space_between_operator_error |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лучше использовать исключения
Убрала вызов *, разбила на подгруппы
Удалена избыточная функция, часть ручных проверок заменена на механизм исключений, заменено именование словаря
Переписала алгоритм сортировочной станции на функцию не использующую генератор. Убрала избыточный код подсчитывающий количество параметров функции, теперь не используется переменная arg_count, польская запись сама забирает то что считает нужным для вычисления из стека.
И хотя травис сработал корректно, для некоторых функций неверно рассчитывалось количество аргументов. Переделала, теперь алгоритм сортировочной станции считает количество переменных для функции и заносит его в стэк, а затем читает для определения понимания сколько операндов ему взять из стэка. Есть мысли как сделать еще проще польскую нотацию.
Переписала алгоритм обратной польской записи. Существенно упростила её, вырезала часть кода где шел анализ определения списка параметров. Теперь не используется функция с определением числа аргументов, теперь в момент сортировочной станции для всех функций идет числа параметров внутри скобок. Это сделано для подсчета *args , **kwargs
|
Спасибо за ревью! Всё будет учтено, а из ресурсов для практики мне очень понравился Sololearn. |
Знаю, знаю что криво написано. Но все тесты на локальном прошли, это просто попытка показать что работает. Теперь можно и логику переворачивать делая всё более красивым и правильным.