Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2020, 08:31   #1
Kvark82
Пользователь
 
Регистрация: 18.06.2020
Сообщений: 37
По умолчанию Python Практика №2 от МФТИ - Дойти до стены. Расстояние до стены не известно.

Вот задание:
Дойти до стены. Расстояние до стены не известно.
Вот как я его решаю.
Код:
#!/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().
Но я не вижу, где определены эти функции?


http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html

Добавлю команды робота для ясности:
Цитата:
Команды робота
Команда Описание
move_left(n=1) Пройти n клеток влево (по умолчанию n = 1)
move_right(n=1) Пройти n клеток вправо (по умолчанию n = 1)
move_up(n=1) Пройти n клеток вверх (по умолчанию n = 1)
move_down(n=1) Пройти n клеток вниз (по умолчанию n = 1)
wall_is_above() если сверху стена, возвращает True, иначе — False
wall_is_beneath() если снизу стена, возвращает True, иначе — False
wall_is_on_the_left() если слева стена, возвращает True, иначе — False
wall_is_on_the_right() если справа стена, возвращает True, иначе — False
fill_cell() Закрасить текущую клетку
cell_is_filled() Возвращает True, если текущая клетка закрашена
mov(r, v) Поместить значение v в регистр r
Следующая задачка тоже непонятна:
С трёх сторон стены. Выйти в свободную сторону. Положение выхода не известно.
Вот что я написал:
Код:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_3_3():
    if wall_is_on_the_right() and wall_is_on_the_beneath() and wall_is_on_the_left():
        move_up(2)
    elif wall_is_on_the_right() and wall_is_on_the_above() and wall_is_on_the_left():
        move_down(2)
    elif wall_is_on_the_right() and wall_is_on_the_above() and wall_is_on_the_beneath():
        move_left(2)
    elif wall_is_on_the_left() and wall_is_on_the_above() and wall_is_on_the_beneath():
        move_right(2)


if __name__ == '__main__':
    run_tasks()
То есть, если стены с трех сторон, то иди в ту сторону, где стены нет.

Вот что выдает:
Код:
C:\Users\Пользователь\PycharmProjects\project1\venv\Scripts\python.exe C:/Users/Пользователь/Desktop/Пайтон/robot-tasks-master/task_4.py
INFO:pyrob:Starting task task_3_3
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_4.py", line 8, in task_3_3
    if wall_is_on_the_right() and wall_is_on_the_beneath() and wall_is_on_the_left():
NameError: name 'wall_is_on_the_beneath' is not defined
ERROR:pyrob:Test #1 failed for task task_3_3
INFO:pyrob:Task task_3_3 finished: -
INFO:pyrob:Total: 0/1

Process finished with exit code 0
...
Цитата:
Как запустить Робота
Скачайте и разархивируйте файлы Робота в любое место в своей домашней папке.

Увидеть условие первой задачи можно, запустив в этой папке из консоли

python3 task_1.py
Решение пишется прямо в файл task_1.py, который можно открыть любым текстовым редактором (например, gedit или PyCharm).

Для быстрой самопроверки ваших решений в этой папке есть файл all_tasks.py, который запустит все программы подряд и проверит их корректность.
Разобрался))

Последний раз редактировалось BDA; 18.06.2020 в 19:50.
Kvark82 вне форума Ответить с цитированием
Старый 18.06.2020, 12:09   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от Kvark82 Посмотреть сообщение
Разобрался))
где решение? )
Alar вне форума Ответить с цитированием
Старый 18.06.2020, 12:31   #3
Kvark82
Пользователь
 
Регистрация: 18.06.2020
Сообщений: 37
По умолчанию

Код:
#!/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()

А куда второй вопрос дели?

Вот к шестой задачке решение:

Код:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_5_3():
    while wall_is_beneath() == False:
        move_right()
    while wall_is_beneath() == True:
        move_right()


if __name__ == '__main__':
    run_tasks()
Предлагаю эту темку посвятить обсуждению задач в практике МФТИ. Думаю, многие обращаются к ней.

А вот по пятой задачке вопрос, хотя программа отрабатывается.

Код:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_5_2():
    for n in range(10):
        if  wall_is_beneath() :
            move_right()


if __name__ == '__main__':
    run_tasks()
Правильно ли я понимаю, что строчка
if wall_is_beneath() :
читается так: пока wall_is_beneath() Истина, - делай?

Что тут правильней было While использовать - я уже понял.

Седьмая задачка:
Код:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_5_4():
    x=0
    while wall_is_beneath() == False:
        move_down()
    while wall_is_beneath() == True:
        move_right()
        x+=1
    move_down()
    move_left(x)

if __name__ == '__main__':
    run_tasks()
Восьмая задачка:
Код:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_5_7():
    while wall_is_beneath() or wall_is_above():
        move_right()



if __name__ == '__main__':
    run_tasks()
Вот вопросик:
Код:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_8_2():
    while wall_is_on_the_right()==False :
        if cell_is_filled()==False:
            move_right() and fill_cell()
        else:
            move_right()


if __name__ == '__main__':
    run_tasks()


Надо: Закрасить клетки. Расстояние до стены не известно. (Идет всегда слева направо).
Я говорю: иди до тех пор, пока не появиться стена справа и если клетка не закрашена, то закрашивай.
Он идет, но клетки не хочет закрашивать. В чем дело?

Вроде победил:
Код:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_8_2():
    while wall_is_on_the_right()==False :
        if wall_is_above() and wall_is_beneath()  == True:
            fill_cell()
            move_right()
        else:
            move_right()

if __name__ == '__main__':
    run_tasks()
В итоге выдает:
Цитата:
C:\Users\Пользователь\PycharmProjec ts\project1\venv\Scripts\python.exe C:/Users/Пользователь/Desktop/Пайтон/robot-tasks-master/task_9.py
INFOyrob:Starting task task_8_2
ERRORyrob:Test #1 failed for task task_8_2
INFOyrob:Task task_8_2 finished: -
INFOyrob:Total: 0/1

Process finished with exit code 0
Смущает только строка
ERRORyrob:Test #1 failed for task task_8_2.
Что за ошибка?
Хотя, раз выдает
Process finished with exit code 0
значит нет ошибки все-таки? Как правильно трактовать?

Последний раз редактировалось BDA; 18.06.2020 в 19:21.
Kvark82 вне форума Ответить с цитированием
Старый 18.06.2020, 13:53   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от Kvark82 Посмотреть сообщение
читается так: пока wall_is_beneath() Истина, - делай?
Читается "если wall_is_beneath() истина, то делай".
Цитата:
Сообщение от Kvark82 Посмотреть сообщение
значит нет ошибки все-таки? Как правильно трактовать?
Сказано, что первый тест не прошел для task_8_2. И что всего из 1 теста прошло удачно 0. А что процесс завершен с кодом 0, так это просто удачное завершение процесса. То есть тесты не проходит, но хотя бы не падает.
Лучше оформляйте вывод тоже тегом Code, чтобы не было замен на смайлики.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 18.06.2020, 14:10   #5
Kvark82
Пользователь
 
Регистрация: 18.06.2020
Сообщений: 37
По умолчанию

Десятая задачка:
Закрасить клетки. Расстояние до стены не известно.

Код:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_8_3():
    while wall_is_on_the_right() == False:
        if wall_is_above() == False and wall_is_beneath() == False:
            fill_cell()
            move_right()
        else:
            move_right()





if __name__ == '__main__':
    run_tasks()

Приглашаю подключиться всех новичков к совместному выполнению практики.
Еще раз укажу, где беру:
http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html
занимаюсь по лекциям и практике вот этого товарища.
https://www.youtube.com/watch?v=fgf5...OPgXzBL3ZTzybY

Цитата:
Сообщение от BDA Посмотреть сообщение
Читается "если wall_is_beneath() истина, то делай".

Сказано, что первый тест не прошел для task_8_2. И что всего из 1 теста прошло удачно 0. А что процесс завершен с кодом 0, так это просто удачное завершение процесса. То есть тесты не проходит, но хотя бы не падает.
Лучше оформляйте вывод тоже тегом Code, чтобы не было замен на смайлики.
Но действия при этом отрабатываются как и нужно в задании.
Можно предположить, что сам тест неправильный?))
Как понять, что именно помешало тесту пройти?

Цитата:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
Заклепайте вот такую приблуду.
Это же форум программистов)))
Изображения
Тип файла: jpg Без имени.jpg (82.0 Кб, 2 просмотров)

Последний раз редактировалось BDA; 18.06.2020 в 19:22.
Kvark82 вне форума Ответить с цитированием
Старый 18.06.2020, 14:29   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Кстати, в описании как раз есть 4 состояния робота. И вы попали в "Состояние №2: задача не решена, завершение штатное". Ну если курс существует уже какое-то время, то надеяться на ошибки в тестах не стоит. Если судить по картинке, то нужно закрашивать те клетки, у которых нет стены сверху.

Это моя стандартная подпись, которая не относится к данной теме. Тег CODE и так понимает большинство языков.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 18.06.2020, 14:38   #7
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от Kvark82 Посмотреть сообщение
Заклепайте вот такую приблуду.
тег code сам определяет язык программирования.

Обычный посетитель форума, вообще не оформляет код никак, даже раздел для публикации выбрать не может.
Alar вне форума Ответить с цитированием
Старый 18.06.2020, 14:40   #8
Kvark82
Пользователь
 
Регистрация: 18.06.2020
Сообщений: 37
По умолчанию

11-я задачка. Решение:
Python

Цитата:
Сообщение от BDA Посмотреть сообщение
Кстати, в описании как раз есть 4 состояния робота. И вы попали в "Состояние №2: задача не решена, завершение штатное".
И чего теперь делать? В чем ошибка?
Kvark82 вне форума Ответить с цитированием
Старый 18.06.2020, 14:59   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от Kvark82 Посмотреть сообщение
И чего теперь делать? В чем ошибка?
Цитата:
Сообщение от BDA Посмотреть сообщение
Если судить по картинке, то нужно закрашивать те клетки, у которых нет стены сверху.
А в вашем решении не такие клетки закрашиваются.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 18.06.2020, 15:09   #10
Kvark82
Пользователь
 
Регистрация: 18.06.2020
Сообщений: 37
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
А в вашем решении не такие клетки закрашиваются.
Кажется я понял:
Цитата:
Как решать задачи для Робота
Для решения каждой задачи, если больше ничего не сказано, требуется выполнить условия:

закончить выполнение в клетке с чёрной точкой;
закрасить все бирюзовые клетки;
ни разу не врезаться в стену.
Я наоборот делал.

Десятую задачку исправил:
Код:
#!/usr/bin/python3

from pyrob.api import *


@task
def task_8_2():
    while wall_is_on_the_right()==False :
        if  (wall_is_beneath() == True and  wall_is_above() == False):
            fill_cell()
            move_right()
        else:
            move_right()

if __name__ == '__main__':
    run_tasks()

Последний раз редактировалось BDA; 18.06.2020 в 19:23.
Kvark82 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать непроходимые стены NIKOLAYY2 Общие вопросы Delphi 6 10.02.2015 14:51
Парсер для стены в ВК EndoCrinolog PHP 14 15.11.2012 02:44
API ВКонтакте - получить все записи стены MILLIONERR PHP 0 23.09.2012 16:52
GLScene проходимость сквозь стены beygul Помощь студентам 0 10.10.2011 19:12
C# Создание стены и флага(финиш)! ZaVyLoN Общие вопросы .NET 6 23.10.2010 17:23