Исполнитель "Робот". Задача про закрашивание клеток - рандомные несрабатывания кода
Всем привет. Программирование я изучаю буквально пару дней, поэтому очень прошу тапками не бросаться, в поиске подобного не нашел.
Задача: Закрасить клетки. Расстояние до стены неизвестно.
Это Оператор "Робот", думаю многие с ним встречались в самом начале пути. По каким-то причинам в последней клетке, где он должен остановиться, ибо условие while более не выполняется, он иногда все же крашится в стену. Иногда - ключевое слово. Проверочная программа выдает 5 рандомизированных условий одной и той же задачи и иногда мой код их проходит успешно, а иногда - нет - робот крашится в стену по неизвестным причинам. С чем связано - ума не приложу, голову сломал, plz help.
@task
def task_8_10():
while not wall_is_on_the_right():
if wall_is_above() and wall_is_beneath():
move_right()
if not wall_is_above() and wall_is_beneath():
move_up()
fill_cell()
move_down()
move_right()
if not wall_is_beneath() and wall_is_above():
move_down()
fill_cell()
move_up()
move_right()
if not wall_is_beneath() and not wall_is_above():
move_down()
fill_cell()
move_up(2)
fill_cell()
move_down()
move_right()
else:
if not wall_is_beneath() and not wall_is_above():
move_down()
fill_cell()
move_up(2)
fill_cell()
move_down()
if not wall_is_above() and wall_is_beneath():
move_up()
fill_cell()
move_down()
if not wall_is_beneath() and wall_is_above():
move_down()
fill_cell()
move_up()
Ответы (1 шт):
if wall_is_above() and wall_is_beneath():
Возможно ли это, чтобы одновременно стена была над и под?
if wall_is_above() and wall_is_beneath(): move_right() if not wall_is_above() and wall_is_beneath(): move_up() fill_cell() move_down() move_right() if not wall_is_beneath() and wall_is_above(): move_down() fill_cell() move_up() move_right() if not wall_is_beneath() and not wall_is_above(): move_down() fill_cell() move_up(2) fill_cell() move_down() move_right()
Может быть, что лучше бы было elif:
if wall_is_above() or wall_is_beneath():
move_right()
elif not wall_is_above() and wall_is_beneath():
move_up()
fill_cell()
move_down()
move_right()
elif not wall_is_beneath() and wall_is_above():
move_down()
fill_cell()
move_up()
move_right()
elif not wall_is_beneath() and not wall_is_above():
move_down()
fill_cell()
move_up(2)
fill_cell()
move_down()
move_right()
чтобы не делать в одном шаге цикла while более, чем нужно.