Форум сайта python.su
hm_dmitryВ данном цикле реализован метод итераций.
Вот этот первый fill_up_down() пишем для проверки первой клетки, верно ?
Метод итераций:
M - некоторое множество
P: M -> {да, нет} - предикат на M, отображающий M на да и нет
M \ P = {x прин. M: P(x) = нет} - множество элементов x прин. M, для которых P(x) = нет
Т: M \ P -> M - некоторое преобразование
Начиная с x0 прин. M, x1 = T(x0), x2 = T(x1), ..., xn = T(xn - 1), ...
Требуется найти элемент xi прин. M, такой что P(xi) = да.
hm_dmitryСначала мы делаем так:
Возможно ли все это дело вписать внутрь while ?
Отредактировано py.user.next (Фев. 20, 2019 12:46:42)
Офлайн
Добрый день. Решил освоить Python, столкнулся с задачей 5_10. Вроде решил, но выглядит как-то аляповато и не покидает ощущение, что можно решить проще.
n = 1 nn = 1 if not wall_is_on_the_right(): while not wall_is_on_the_right(): n += 1 move_right() if wall_is_on_the_right(): move_left(n-1) break if not wall_is_beneath(): while not wall_is_beneath(): nn += 1 move_down() if wall_is_beneath(): move_up(nn-1) break for i in range(nn): fill_cell() while not wall_is_on_the_right(): fill_cell() move_right() fill_cell() if i < nn-1: move_down() for i in range(n-1): move_left()
Офлайн
wergonhttps://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html#o22-task-5-10
Решил освоить Python, столкнулся с задачей 5_10. Вроде решил, но выглядит
закрасить ряд
цикл пока внизу свободно выполнять
шагнуть вниз
закрасить ряд
конец цикла
закрасить клетку
цикл пока справа свободно выполнять
шагнуть вправо
закрасить клетку
конец цикла
цикл пока слева свободно выполнять
шагнуть влево
конец цикла
Отредактировано py.user.next (Май 30, 2019 02:26:29)
Офлайн
py.user.nextЭто было первое, что пришло в голову, интересно было реализовать.
Тебе просто надо закрасить всё поле. Зачем тебе счётчики?
py.user.nextПолучилось, спасибо
Ты просто должен двигаться вправо и закрашивать каждую клетку, в которой оказываешься, пока не дойдёшь до стены.
Потом просто возвращаться обратно, пока не дойдёшь до стены.
Потом шагнуть вниз, если это возможно.
А потом повторить всё то же самое.
Отредактировано wergon (Май 30, 2019 12:30:29)
Офлайн
Intarr
Добрый день! выполняю задачку из этого курсаhttp://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html#o30-task-9-3Задача №30: task_9_3Закрасить поле «треугольниками». Размер поля не известен, но поле всегда квадратное с нечётным количество клеток по каждой стороне.написал такой код который работает и выполняет задачу:
#!/usr/bin/python3 from pyrob.api import * @task(delay=0.01) def task_9_3(): counter = count_rows() while counter > 1: filling_cells(counter) counter -= 2 parking() def filling_cells(counter): for i in range(counter-2): move_down() fill_cell() move_down() for i in range(counter-2): move_left() fill_cell() move_left() for i in range(counter-2): move_up() fill_cell() move_up() for i in range(counter-2): move_right() fill_cell() move_down() def parking(): while not wall_is_beneath(): move_down() while not wall_is_on_the_left(): move_left() def count_rows(): counter = 1 while not wall_is_on_the_right(): move_right() counter += 1 return counter if __name__ == '__main__': run_tasks()
Отредактировано IgorBurenko (Май 30, 2019 17:38:35)
Офлайн
Господа, возник вопрос, как правильно и коротко выполнить это задание, ибо я вижу, что нужно делать так.
Начало цикла
фор рендж по клеткам(27)
двигаться вправо()
красить()
двигаться вниз()
фор ренджи по клеткам(27)
двигаться влево()
красить()
Отредактировано NakiriEri (Май 31, 2019 20:24:26)
Офлайн
NakiriEriУ меня получилось вот так. Замысел в том, что мы 6 раз выполняем одни и те же команды, а именно закрашивание 27 клеток слева направо, шаг вниз и справа налево, шаг вниз.
Господа, возник вопрос, как правильно и коротко выполнить это задание, ибо я вижу, что нужно делать так. Начало цикла
for i in range(6): for j in range(27): move_right() fill_cell() move_down() for d in range(27): fill_cell() move_left() move_down() move_right()
Отредактировано wergon (Май 31, 2019 20:35:44)
Офлайн
IgorBurenkoМожно ещё выйти в центр и начать закрашивать оттуда наружу, всё время оказываясь в левом нижнем углу в конце процедуры. И делать это можно, пока слева нет стены.
я вот так решил.
#!/usr/bin/python3 from pyrob.api import * @task(delay=0.01) def task_9_3():
NakiriErihttps://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html#id51
Господа, возник вопрос, как правильно и коротко выполнить это задание, ибо я вижу, что нужно делать так.
Начало циклафор рендж по клеткам(27)
двигаться вправо()
красить()
Отредактировано py.user.next (Май 31, 2019 23:31:07)
Офлайн
py.user.nextНо у нас робот умеет только проверять есть ли стена перед движением, и возвращать булевое значение,
Тут нужно вообще без чисел обойтись
Офлайн
NakiriEriЯ написал в pyrob'е без цифр. Не выкладываю решение, так как выкладывание готовых решений учит меньше, чем выполнение заданий своими силами.
Но у нас робот умеет только проверять есть ли стена перед движением, и возвращать булевое значение,
а в данной задачи нужно сделать так, чтобы заканчивало красить когда до стены еще 1 клетка, т,е как имея данные команды без конкретных цифр реализовать данную программу.
программа ряд подходит для закраски : да/нет
шагнуть вниз
если внизу нет стены то
шагнуть вверх
ответ := да
иначе
шагнуть вверх
ответ := нет
конец если
конец программы
программа закрасить ряд
цикл пока справа нет стены выполнять
закрасить клетку
шагнуть вправо
конец цикла
цикл пока слева нет стены выполнять
шагнуть влево
конец цикла
шагнуть вправо
конец программы
шагнуть вправо
цикл пока ряд подходит для закраски выполнять
закрасить ряд
шагнуть вниз
конец цикла
Отредактировано py.user.next (Июнь 1, 2019 02:11:40)
Офлайн