Практика №2 от МФТИ.

Kvark

Новичок
Пользователь
Июн 13, 2020
10
0
1
Вот задание:
Дойти до стены. Расстояние до стены не известно.
Вот как я его решаю.
Python:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_3_1():
    for x in range (10):
        move_right()
        wall_is_on_the_right()



if __name__ == '__main__':
    run_tasks()



Вот что мне выдает:

C:\Users\Пользователь\PycharmProjects\project1\venv\Scripts\python.exe C:/Users/Пользователь/Desktop/Пайтон/robot-tasks-master/task_3.py
INFO:pyrob:Starting task task_3_1
ERROR:pyrob:Caught exception
Traceback (most recent call last):
File "C:\Users\Пользователь\Desktop\Пайтон\robot-tasks-master\pyrob\__init__.py", line 46, in wrapper
f()
File "C:/Users/Пользователь/Desktop/Пайтон/robot-tasks-master/task_3.py", line 9, in task_3_1
move_right()
File "C:\Users\Пользователь\Desktop\Пайтон\robot-tasks-master\pyrob\utils.py", line 16, in wrapper
ret = f(*args, **kwargs)
File "C:\Users\Пользователь\Desktop\Пайтон\robot-tasks-master\pyrob\utils.py", line 71, in wrapper
return f(*args, **kwargs)
File "C:\Users\Пользователь\Desktop\Пайтон\robot-tasks-master\pyrob\core.py", line 232, in move_right
repeat(n, step_right)
File "C:\Users\Пользователь\Desktop\Пайтон\robot-tasks-master\pyrob\utils.py", line 79, in repeat
f(*args, **kwargs)
File "C:\Users\Пользователь\Desktop\Пайтон\robot-tasks-master\pyrob\utils.py", line 16, in wrapper
ret = f(*args, **kwargs)
File "C:\Users\Пользователь\Desktop\Пайтон\robot-tasks-master\pyrob\utils.py", line 61, in wrapper
return f(*args, **kwargs)
File "C:\Users\Пользователь\Desktop\Пайтон\robot-tasks-master\pyrob\core.py", line 200, in step_right
raise RobotCrashed()
pyrob.core.RobotCrashed
ERROR:pyrob:Test #1 failed for task task_3_1
INFO:pyrob:Task task_3_1 finished: -
INFO:pyrob:Total: 0/1

Process finished with exit code 0

Вопрос: что за Error?
Что-то неправильно?
Что?


Далее.
Сточка:
#!/usr/bin/python3
Указывает просто путь, откуда мы вызываем Питон? Но почему он закомментирован?

Строчка @task
Что означает?

Строчка
def task_3_1(): - определение функции. Но где мы вызываем эту функцию?

Строчки
if __name__ == '__main__':
run_tasks()

Как читается?: Если __name__ равна __main__, то вызываем функцию run_tasks().
Но я не вижу, где определены эти функции?
 

Kvark

Новичок
Пользователь
Июн 13, 2020
10
0
1
Вот ссылка на саму практику.
 

Kvark

Новичок
Пользователь
Июн 13, 2020
10
0
1
Есть предложение для модераторов: сделайте отдельный подраздел для практики от МФТИ. Я думаю, много людей пытаются выполнять оттуда задания, и было бы здорово, если бы был отдельный подраздел, в котором были бы темы, названные в соответствии с номером практики и задания.
 

woshibide

Новичок
Пользователь
Июн 9, 2020
8
3
3
Ответ на твой первый вопрос:
Подозреваю что твоё решение врезается в стену, попробуй проверять после каждого шага дошёл ли ты до стены и остановиться когда дойдёшь. Сейчас твой код идёт на таран все 10 шагов независимо от информации которую он получает от функции wall_is_on_the_right(). Я бы даже попробовал с циклом while, потому что wall_is_on_the_right() возвращает удобное для этого цикла значение.

Ответ на все остальные вопросы:
Чтобы понимать что тут происходит когда запускаешь написанный код надо:
а) выучить magic methods. Прям так и гугли: python magic methods. Это знание ответит на твой последний вопрос.
б) быть знакомым с ООП в питоне. Это ответит тебе почему тут закомментирован путь и что за @task
в) внимательно перечитать инструкции, особенно про проверку выполнения задач.
г) терпение чтобы учить что то новое :)
 

Kvark

Новичок
Пользователь
Июн 13, 2020
10
0
1
Ответ на твой первый вопрос:
Подозреваю что твоё решение врезается в стену, попробуй проверять после каждого шага дошёл ли ты до стены и остановиться когда дойдёшь. Сейчас твой код идёт на таран все 10 шагов независимо от информации которую он получает от функции wall_is_on_the_right(). Я бы даже попробовал с циклом while, потому что wall_is_on_the_right() возвращает удобное для этого цикла значение.

Ответ на все остальные вопросы:
Чтобы понимать что тут происходит когда запускаешь написанный код надо:
а) выучить magic methods. Прям так и гугли: python magic methods. Это знание ответит на твой последний вопрос.
б) быть знакомым с ООП в питоне. Это ответит тебе почему тут закомментирован путь и что за @task
в) внимательно перечитать инструкции, особенно про проверку выполнения задач.
г) терпение чтобы учить что то новое :)
Вы откуда ответы таскаете?))
Мне на соседнем форуме слово-в слово тоже ответили.
 

Kvark

Новичок
Пользователь
Июн 13, 2020
10
0
1
Я с Вайлом и решил ее:
Python:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_3_1():
    while  wall_is_on_the_right() == False:
        move_right()



if __name__ == '__main__':
    run_tasks()
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Сточка:
#!/usr/bin/python3
Указывает просто путь, откуда мы вызываем Питон? Но почему он закомментирован?
Это shebang. Вот тут про него можно почитать: ссылка
Строчка @task
Что означает?
@task это декоратор. Означает что функция им обернута task_3_1 = task(task_3_1)
Строчка
def task_3_1(): - определение функции. Но где мы вызываем эту функцию?
У вас в начале кода есть импорт from pyrob.api import *, скорее всего функция определена там.
Строчки
if __name__ == '__main__':
run_tasks()
Как читается?: Если __name__ равна __main__, то вызываем функцию run_tasks().
Но я не вижу, где определены эти функции?
__main__ это имя модуля по умолчанию если он вызван самостоятельно, а не импортирован. Код выше служит для того чтобы в случае самостоятельного вызова модуля вызывалась функция run_tasks()
 

woshibide

Новичок
Пользователь
Июн 9, 2020
8
3
3
Вы откуда ответы таскаете?))
Мне на соседнем форуме слово-в слово тоже ответили.
Чеее))))
Я сидел полчаса сочинял ответ, все самостоятельно хахах
Скинь ссылку
 

Форум IT Специалистов