Найти - Пользователи
Полная версия: Графический исполнитель "Робот"
Начало » Python для новичков » Графический исполнитель "Робот"
1 2 3 4 None 13 14 15 16 17 18 19 20 None 28 29 30 31
riomenx
Практика: Робот-http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html
Условные действия на каждой итерации цикла
Задача №9: task_8_2
Закрасить клетки. Расстояние до стены не известно.
Решением этой задачи является клетки без верха,которые необходимо закрасить.Есть более простой вариант решения У меня получилось вот так:
 from pyrob.api import *
import time
@task
def task_8_2():
    while not wall_is_on_the_right():
        move_right()
        if not wall_is_above() and wall_is_beneath():
            fill_cell()
    while not wall_is_on_the_left():
        move_left()
        if not wall_is_above() and wall_is_beneath():
            fill_cell()
    while not wall_is_on_the_right():
        move_right()
        if not wall_is_above() and wall_is_beneath():
            fill_cell()
if __name__ == '__main__':
    run_tasks()
py.user.next
Romanteg
Добрый вечер. Не могли бы уточнить, допустимо ли такое решение?
Задача 32

  
@task(delay=0.01)
def task_8_18():
    y = 0
    x = 0
    for c in range(50):
        if wall_is_on_the_right() and not wall_is_beneath() and not wall_is_above() and not wall_is_on_the_left(): break
...

Romanteg
Т.е. сперва считаю клеточки, которые необходимо закрасить по Х, затем по Y.
Задание там другое. Надо посчитать жёлтые клетки, которые были на доске изначально. Те жёлтые клетки, которые появились на доске после их закрашивания, считать не надо.

Romanteg
Может только через функцию работает?
Можно и без функции написать код, который с функцией сделан. Но функция там используется, потому что подпрограммы уже пройдены до 32-ой задачи, а функция - это разновидность подпрограммы (есть функции и процедуры, в древних языках типа Паскаля их разделяли синтаксически, сейчас перестали).

В общем, поковыряйся в этой задаче, будет полезно для опыта. Тем более она искусственная и поэтому такая удобная. Дикие задачи, если ты за них возьмёшься, тебе так помогать не будут своей удобностью. Поэтому опыт ты нарабатываешь на учебных задачах, чтобы дикие задачи потом можно было ломать через колено, сами они обычно не поддаются.
py.user.next
riomenx
Задача №9: task_8_2
riomenx
Есть более простой вариант решения У меня получилось вот так:
Здесь делал.
F.Dorohov
py.user.next
количество_заполненных = 0
цикл пока справа_нет_стены выполнять
если клетка_заполнена то
количество_заполненных.увеличить на 1
иначе
количество_заполненных = 0
конец если
если количество_заполненных = 3 то
выход из цикла
конец если
шагнуть вправо
конец цикла

Здравствуйте, задача так и не зашла.
Понимаю что счетчик не обнуляется, если клетка не закрашена. Но как это реализовать так и не нашел.
py.user.next
F.Dorohov
Понимаю что счетчик не обнуляется
Он не обнуляется потому, что в питоне операции = и == явлются разными.
= - это операция присваивания (в x записать число 1)
== - это операция сравнения (равно ли x числу 1)
F.Dorohov
py.user.next
Спасибо! Теперь все ясно.
riomenx
Как решить задачу №25: task_2_2 с использованием параметра n функции row_cross
Есть подсказка: “”“Возьмите функцию cross() из предыдущей задачи.
Напишите функцию row_cross(n), которая закрашивает n крестов в ряд.
Используя эту функцию закрасьте клетки, как на рисунке.”“”
На выходе как я понял должно получиться:
move_down()
row_cross(5)
Я не использовал никаких параметров и решил с помощью цикла:
 from pyrob.api import *
def make_cross():
    move_right()
    fill_cell()
    move_down()
    fill_cell()
    move_right()
    fill_cell()
    move_left()
    move_down()
    fill_cell()
    move_up()
    move_left()
    fill_cell()
    move_up()
def row_cross():
    make_cross()
    for i in range(4):
        move_right(4)
        make_cross()
@task
def task_2_2():
    move_down()
    row_cross()
if __name__ == '__main__':
    run_tasks()
py.user.next
riomenx
Как решить задачу №25: task_2_2 с использованием параметра n функции row_cross

Задача

программа закрасить крест
шагнуть вправо
закрасить ячейку
шагнуть вниз
закрасить ячейку
шагнуть вправо
закрасить ячейку
шагнуть влево
шагнуть вниз
закрасить ячейку
шагнуть вверх
шагнуть влево
закрасить ячейку
шагнуть вверх
конец программы

программа закрасить ряд крестов <вх:n:Z+>
цикл пока n > 0 выполнять
закрасить крест
шагнуть вправо
шагнуть вправо
если справа_есть_стена то
шагнуть влево
шагнуть влево
иначе
шагнуть вправо
шагнуть вправо
конец если
n.уменьшить на 1
конец цикла
конец программы

шагнуть вниз
закрасить ряд крестов <вх:5>
[guest@localhost pyrob]$ python3 task_25.py 
INFO:pyrob:Starting task task_2_2
INFO:pyrob:Task task_2_2 finished: +
INFO:pyrob:Total: 1/1
[guest@localhost pyrob]$

riomenx
Я не использовал никаких параметров и решил с помощью цикла:
А в следующей задаче нужно десять крестов в ряде закрашивать. Если функцию правильно пишешь, то в следующей заадаче можешь её взять уже готовую из этой задачи. Если функцию пишешь как удобно, то в следующей задаче нужно будет писать новую функцию.

Нужно написать такую функцию, которая может закрасить и пять крестов, и десять крестов, и сто крестов, и миллион крестов. Вот для этого и нужна параметризация. При изменении условий задачи или при появлении новых похожих задач можно будет брать готовые функции, а не писать функции снова.

В данном случае мы взяли готовую функцию “закрасить крест” из 24-ой задачи; мы не писали эту функцию снова, а просто скопировали её. В 26-ой задаче делаем то же самое, только копируем уже две функции и пишем немного кода на их основе, меняя только значение параметра при вызове функции с пятёрки на десятку.
Mike.Nek
riomenx
Практика: Робот-http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.htmlУсловные действия на каждой итерации циклаЗадача №9: task_8_2Закрасить клетки. Расстояние до стены не известно.Решением этой задачи является клетки без верха,которые необходимо закрасить.Есть более простой вариант решения У меня получилось вот так:

Вот мой вариант:
 #!/usr/bin/python3
from pyrob.api import *
@task
def task_8_2():
    x=True
    while x==True:
        if wall_is_above()==False:
            fill_cell()
        if wall_is_on_the_right()==False:
            move_right()
        else:
            x=False
if __name__ == '__main__':
    run_tasks()
Salavatulin
Здравствуйте уважаемые. Вопрос по обсуждаемой тут практике “исполнитель робот”. Прочитал всё ветку не нашёл подсказки.
Задача №16, task_8_22. Не могу понять почему робот не поворачивает в тупике. Хотя условие вроде явно прописано.

 #!/usr/bin/python3
from pyrob.api import *
@task
def task_8_22():
    while wall_is_on_the_right() and wall_is_on_the_left():
        move_up()
    if wall_is_on_the_left():
        while not wall_is_on_the_right():
            move_right
    elif wall_is_on_the_right():
        while not wall_is_on_the_left():
            move_left
if __name__ == '__main__':
    run_tasks()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB