Tolyachiy
Май 26, 2020 20:39:30
Здравствуйте! Подскажите пожалуйста, как исправить ошибку? Упражнение №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
Zoe_mainer
Май 29, 2020 15:09:50
Кто-нибудь может, пожалуйста, дать ссылку на объяснение или объяснить, как работают переменные-счетчики, например, в этом коде?
Что-то застрял на этом. Не могу понять…
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. Смещаемся вправо, закрашиваем клетку.
И так далее…
py.user.next
Май 29, 2020 20:18:53
Zoe_mainer
Кто-нибудь может, пожалуйста, дать ссылку на объяснение или объяснить, как работают переменные-счетчики, например, в этом коде?
Задача 27 (7.5)
Здесь блок-схема на UML (диаграмма деятельности) и ссылка на сам код.
sergiogromov
Июнь 9, 2020 03:12:50
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()
Все тесты где последняя клетка должна быть закрашена не проходят.
py.user.next
Июнь 9, 2020 05:03:57
sergiogromov
Никак не могу понять в чем загвоздка. (Задача №9: task_8_2)
Здесь делал.
sergiogromov
Никак не могу понять в чем загвоздка.
Тебе нужно на последней клетки всё сделать, а ты на последней клетке сразу выходишь, потому что она последняя.
sergiogromov
Июнь 9, 2020 12:39:45
py.user.next
Блин не понимаю. В каком месте ошибка?
Спасибо за помощь.
sergiogromov
Июнь 9, 2020 12:43:47
py.user.next
Всё, исправил. Добавил после цикла проверку на необходимость закрашивания и заработало.
Спасибо.
Nikita_PyCharm
Июль 1, 2020 15:28:08
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()