Исполнитель "Робот". Задача про закрашивание клеток - рандомные несрабатывания кода

Всем привет. Программирование я изучаю буквально пару дней, поэтому очень прошу тапками не бросаться, в поиске подобного не нашел. Задача: Закрасить клетки. Расстояние до стены неизвестно. Изображение задачи Это Оператор "Робот", думаю многие с ним встречались в самом начале пути. По каким-то причинам в последней клетке, где он должен остановиться, ибо условие 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 шт):

Автор решения: MarianD
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 более, чем нужно.

→ Ссылка