Форум сайта python.su
А я сделал через рекурсию, при том в теле удобней использовать for с автовычислением.
@task(delay=0.01) def task_9_3(): def far3(a,b): # шапка рекурсии выполняется только в перый раз if b == 0: # в первой рекурсии проверят количество клеток на линии. while wall_is_on_the_right() == False: move_right() a += 1 # в параметр "а" записывает кол_во клеток на линии else: move_left(a-1) # возвращается на начальную позицию. # тело рекурсии if a > b: b += 2 # с каждим циклом рекурсии количество пустых клеток на линии увеличивается на 2. for i in range(a - b): # верхний move_right() fill_cell() move_right() # смещение до угла for i in range(a - b): # правый move_down() fill_cell() move_down() # смещение до угла for i in range(a - b): # нижний move_left() fill_cell() move_left() # смещение до угла for i in range(a - b): # левый move_up() fill_cell() move_right() # смещение в право для точки начала следующей рекурсии. far3(a, b) # рекурсия a = длина стороны, b = количество пустых клеток на линии. # порковка на точку если все линии на всех плоскостях пройдены while wall_is_beneath() == False: # вниз до стены move_down() else: while wall_is_on_the_left() == False: # влево до стены move_left() far3(1,0) if __name__ == '__main__': run_tasks()
Отредактировано Nikita_PyCharm (Июль 20, 2020 18:39:16)
Прикреплённый файлы:
task_30.py (2,0 KБ)
Офлайн
py.user.next
Тут два разных счётчика: n магистральный (для магистрали) и n веточный (для ветки). Эти счётчики не зависят друг от друга, считаются по отдельности. Когда веточный n вычислен, он возвращается из функции в виде числа. То есть на выходе из функции мы получаем число изначально закрашенных клеток в ветке. И это число добавляется к магистральному n.Когда ты проходишь одну ветку, в магистральном n находится сумма количества изначально закрашенных клеток на магистрали и количества изначально закрашенных клеток в пройденной ветке. Он их отдельно вычислил и сложил при выходе из ветки.Вот это выражение
Офлайн
Nikita_PyCharm
По Задаче 32py.user.nextЭто лишнее действие поскольку в задании не предполагаются закрашенные клетки на магистрали, достаточно посчитать закрашенные клетки в ветках.
Тут два разных счётчика: n магистральный (для магистрали) и n веточный (для ветки).
Закрасить отмеченные клетки.
В регистр ax записать количество клеток, которые были закрашены ещё до того,
как робот начал двигаться. Количество и размеры коридоров не известны.
Отредактировано py.user.next (Июль 6, 2020 18:01:46)
Офлайн
Здравствуйте. Не могу решить задачу 5 task5_2.
Вот что получилось:
from pyrob.api import * x = 0 @task def task_5_2(): while wall_is_beneath(): x += 1 for i in range(x): move_right() if __name__ == '__main__': run_tasks()
Отредактировано FishHook (Июль 8, 2020 11:41:09)
Офлайн
grottnnЗадача
Здравствуйте. Не могу решить задачу 5 task5_2.
цикл пока снизу_есть_стена выполнять
шагнуть вправо
конец цикла
[guest@localhost pyrob]$ python3 task_5.py
INFO:pyrob:Starting task task_5_2
INFO:pyrob:Task task_5_2 finished: +
INFO:pyrob:Total: 1/1
[guest@localhost pyrob]$
Офлайн
Спасибо. Оказалось проще чем думал.
Задача: 7.
def task_5_4():
while not wall_is_beneath():
move_down()
while wall_is_beneath():
move_right()
move_down()
move_left()
while wall_is_above():
move_left()
if __name__ == ‘__main__’:
run_tasks()
Здесь похоже надо посчитать шаги на право над стеной, чтобы сделать столько же на лево под ней. Не знаю как это сделать.
Офлайн
grottnnЗадача
Задача: 7.
цикл пока снизу_нет_стены выполнять
шагнуть вниз
конец цикла
цикл пока снизу_есть_стена выполнять
шагнуть вправо
конец цикла
шагнуть вниз
цикл пока слева_нет_стены выполнять
шагнуть влево
конец цикла
[guest@localhost pyrob]$ python3 task_7.py
INFO:pyrob:Starting task task_5_4
INFO:pyrob:Task task_5_4 finished: +
INFO:pyrob:Total: 1/1
[guest@localhost pyrob]$
grottnnТам задачи все разбиты по темам. Надо читать тему задачи и выполнять задачу в соответствии с ней. Тема задач 5 и 7 - “Циклы с условием”. Никаких переменных там нет.
Здесь похоже надо посчитать шаги на право над стеной
Офлайн
Привет.
Учусь программировать на Python.
Помогите решить задачу:
Задача №8: task_5_7. Выйти из коридора. Есть проёмы сверху или снизу.
Прикреплённый файлы:
Screenshot_20200720_175146.png (17,7 KБ)
Офлайн
xperiaТам всё очень просто пишешь цикл с двумя условиями через or
Привет. Учусь программировать на Python. Помогите решить задачу: Задача №8: task_5_7. Выйти из коридора. Есть проёмы сверху или снизу.
def task_5_7(): while wall_is_above() or wall_is_beneath(): move_right()
Отредактировано Nikita_PyCharm (Июль 20, 2020 18:42:04)
Прикреплённый файлы:
task_8.py (182 байта)
Офлайн
Nikita_PyCharmБольшое спасибо. Получилось. Я делал так же, только добавлял оператор not и программа работала криво.
Офлайн