Уведомления

Группа в Telegram: @pythonsu

#1 Май 26, 2020 20:39:30

Tolyachiy
Зарегистрирован: 2020-05-26
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

Здравствуйте! Подскажите пожалуйста, как исправить ошибку? Упражнение №21 (task_4_11). Закрашивает только один, первый квадрат в строке. Заранее спасибо!

n = 1
move_down(), move_right()

for i in range (13):
fill_cell()
move_right(n)

cell_is_filled(), move_left(n), move_down()
n += 1

Офлайн

#2 Май 27, 2020 00:17:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

Tolyachiy
Упражнение №21 (task_4_11).
Задача

шагнуть вправо
шагнуть вниз
количество_клеток = 0
цикл пока снизу_нет_стены выполнять
количество_клеток.увеличить на 1
цикл количество_клеток раз выполнять
закрасить клетку
шагнуть вправо
конец цикла
цикл количество_клеток раз выполнять
шагнуть влево
конец цикла
шагнуть вниз
конец цикла

[guest@localhost pyrob]$ python3 task_21.py 
INFO:pyrob:Starting task task_4_11
INFO:pyrob:Task task_4_11 finished: +
INFO:pyrob:Total: 1/1
[guest@localhost pyrob]$



Отредактировано py.user.next (Май 27, 2020 00:18:34)

Офлайн

#3 Май 29, 2020 15:09:50

Zoe_mainer
Зарегистрирован: 2020-05-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

Кто-нибудь может, пожалуйста, дать ссылку на объяснение или объяснить, как работают переменные-счетчики, например, в этом коде?
Что-то застрял на этом. Не могу понять…

n = 0
nn = n
while not wall_is_on_the_right():
if n < nn:
n += 1
move_right()
else:
n = 0
nn += 1
move_right()
if not wall_is_on_the_right():
fill_cell()


Кажется, я сам понял. Поправьте, пожалуйста, если неправильно.
1) Мы входим в цикл со значениями n = 0 , nn = n = 0 .
2) Пошла первая итерация: n = 0, nn = 0. Проверяется условие n < nn . Оно не выполняется.
3) Переходим в else. Присваиваем n значение 0 ; nn = nn + 1 = 0 + 1 = 1 ; смещаемся вправо, закрашиваем клетку.
4) Заходим на следующую итерацию, но уже со значениями n = 0 , nn = 1 ; Проверяем if: 0 < 1 ; n = n +1 = 0 + 1 = 1 ; Смещаемся вправо.
5) Заходим на следующую итерацию. Уже со значениями n = 1 , nn = 1. Проверяем if. Не выполняется. Идем в else ; Опять n присваиваем значение 0 ; nn = nn +1 = 1 + 1 = 2. Смещаемся вправо, закрашиваем клетку.
6) Следующая итерация. Значения: n = 0, nn = 2. Выполняется if ; n = 0 + 1 = 1 . Сместились вправо.
7) Следующая итерация. Значения: n = 1, nn = 2. Выполняется if ; n = 1 + 1 = 2 . Сместились вправо.
8) Следующая итерация. Значения: n = 2, nn = 2 ; if не выполняется. Идем в else: опять присваиваем n значение 0. nn = nn +1 = 2 + 1 = 3. Смещаемся вправо, закрашиваем клетку.

И так далее…

Отредактировано Zoe_mainer (Май 29, 2020 15:26:09)

Офлайн

#4 Май 29, 2020 20:18:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

Zoe_mainer
Кто-нибудь может, пожалуйста, дать ссылку на объяснение или объяснить, как работают переменные-счетчики, например, в этом коде?
Задача 27 (7.5)
Здесь блок-схема на UML (диаграмма деятельности) и ссылка на сам код.



Отредактировано py.user.next (Май 29, 2020 20:19:47)

Офлайн

#5 Май 29, 2020 20:49:36

Zoe_mainer
Зарегистрирован: 2020-05-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

py.user.next
Благодарю.

Офлайн

#6 Июнь 9, 2020 03:12:50

sergiogromov
Зарегистрирован: 2020-06-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

py.user.next
Приветствую!

Никак не могу понять в чем загвоздка. (Задача №9: task_8_2)
def task_8_2():
while not wall_is_on_the_right():
if not wall_is_above():
fill_cell()
if not wall_is_on_the_right():
move_right()

Все тесты где последняя клетка должна быть закрашена не проходят.

Офлайн

#7 Июнь 9, 2020 05:03:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

sergiogromov
Никак не могу понять в чем загвоздка. (Задача №9: task_8_2)
Здесь делал.

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



Отредактировано py.user.next (Июнь 9, 2020 05:07:12)

Офлайн

#8 Июнь 9, 2020 12:39:45

sergiogromov
Зарегистрирован: 2020-06-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

py.user.next
Блин не понимаю. В каком месте ошибка?

Спасибо за помощь.

Офлайн

#9 Июнь 9, 2020 12:43:47

sergiogromov
Зарегистрирован: 2020-06-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

py.user.next
Всё, исправил. Добавил после цикла проверку на необходимость закрашивания и заработало.

Спасибо.

Офлайн

#10 Июль 1, 2020 15:28:08

Nikita_PyCharm
Зарегистрирован: 2020-07-01
Сообщения: 13
Репутация: +  1  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

Intarr
Добрый день! выполняю задачку из этого курсаhttp://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html#o30-task-9-3Задача №30: task_9_3Закрасить поле «треугольниками». Размер поля не известен, но поле всегда квадратное с нечётным количество клеток по каждой стороне.написал такой код который работает и выполняет задачу:
Сам проходил этот курс, вот моё решение 30 задачи через рекурсию.

    
@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()

Отредактировано FishHook (Июль 1, 2020 15:41:22)

Прикреплённый файлы:
attachment task_30.py (2,0 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version