Conversation
Финальная задачка [Спринт 5: Удали узел](https://contest.yandex.ru/contest/24810/problems/B/) не проходит по этому шаблону через Make. В шаблоне написано: # ! change LOCAL to False before submitting ! # set LOCAL to True for local testing Но по факту всё наоборот: когда LOCAL= True, то тесты проходят, а когда False, то нет. Ошибка на той строчке, где типы: ``` def remove(root, key) -> Optional[Node]: NameError: name 'Node' is not defined ``` И они как раз были добавлены недавно. Yandex-Practicum@9f74a84 Видимо класс Node определяется уже после кода студента, поэтому он ещё не доступен на этой строчке. Предлагаю добавить строчку `from __future__ import annotations` или добавить кавычки к `Optional['Node']`. Оба эти варианта работают. Я выбрал кавычки. Также думаю, что для упрощения можно вообще не делать переключатель LOCAL, так как класс Node всё равно переопределится при запуске через Make, и это работает. Также код приведен к PEP8: snake_case переменных и правильное количество пропущенных строк.
|
|
||
| from typing import Optional | ||
|
|
||
| LOCAL = True |
There was a problem hiding this comment.
Привет! Предлагаю это менять иначе -- вынести объявление ноды в отдельный модуль и подключать его везде при тестировании на сервере. Я бы не хотела, чтобы объявление ноды из студенческого кода прорастало в проверку, так как это открывает большую дорогу для поломок, хаков и всего остального. Я сделаю фикс для этого. За обнаружение проблемы спасибо, но пр мержить не будем
There was a problem hiding this comment.
Так уже и есть. Объявление ноды при проверке подключается ПОСЛЕ кода студента, и оно перезапишет тот класс, который есть у студента, так что хаков не будет. ПР только для упрощения жизни студента, чтобы ему не надо было делать бесполезную работу, переключая LOCAL туда-сюда. На самом деле это ни на что не влияет.
There was a problem hiding this comment.
я поменяла сейчас с отдельным импортом ноды, все заработало, можешь глянуть https://contest.yandex.ru/contest/24810/run-report/81197781/
В какой-то момент я захочу добавить в каждую ноду секрет или еще какое значение, и жизнь станет сложнее для редактирования задачи. Короче я прям хочу, чтоб использовалось объявление класса из кода, который не доступен студенту)
Финальная задачка Спринт 5: Удали узел не проходит по этому шаблону через Make.
В шаблоне написано:
Но по факту всё наоборот: когда
LOCAL= True, то тесты проходят, а когдаFalse, то нет.Ошибка на той строчке, где типы:
И они как раз были добавлены недавно.
Видимо класс
Nodeопределяется уже после кода студента, поэтому он ещё не доступен на этой строчке.Предлагаю добавить строчку
from __future__ import annotationsили добавить кавычки кOptional['Node']. Оба эти варианта работают. Я выбрал кавычки. IDE нормально работают с типизацией классами в кавычках, распознают их именно как классы.Также думаю, что для упрощения можно вообще не делать переключатель LOCAL, так как класс Node всё равно переопределится при запуске через Make, и это работает.
Также код приведен к PEP8: snake_case переменных и правильное количество пропущенных строк.