Форум сайта python.su
Здравствуйте! Подскажите пожалуйста, как исправить ошибку? Упражнение №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
Офлайн
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)
Офлайн
Кто-нибудь может, пожалуйста, дать ссылку на объяснение или объяснить, как работают переменные-счетчики, например, в этом коде?
Что-то застрял на этом. Не могу понять…
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)
Офлайн
Zoe_mainerЗадача 27 (7.5)
Кто-нибудь может, пожалуйста, дать ссылку на объяснение или объяснить, как работают переменные-счетчики, например, в этом коде?
Отредактировано py.user.next (Май 29, 2020 20:19:47)
Офлайн
py.user.nextБлагодарю.
Офлайн
py.user.nextПриветствую!
Офлайн
sergiogromovЗдесь делал.
Никак не могу понять в чем загвоздка. (Задача №9: task_8_2)
sergiogromovТебе нужно на последней клетки всё сделать, а ты на последней клетке сразу выходишь, потому что она последняя.
Никак не могу понять в чем загвоздка.
Отредактировано py.user.next (Июнь 9, 2020 05:07:12)
Офлайн
py.user.nextБлин не понимаю. В каком месте ошибка?
Офлайн
py.user.nextВсё, исправил. Добавил после цикла проверку на необходимость закрашивания и заработало.
Офлайн
IntarrСам проходил этот курс, вот моё решение 30 задачи через рекурсию.
Добрый день! выполняю задачку из этого курсаhttp://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html#o30-task-9-3Задача №30: task_9_3Закрасить поле «треугольниками». Размер поля не известен, но поле всегда квадратное с нечётным количество клеток по каждой стороне.написал такой код который работает и выполняет задачу:
@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)
Прикреплённый файлы:
task_30.py (2,0 KБ)
Офлайн