Найти - Пользователи
Полная версия: Графический исполнитель "Робот"
Начало » Python для новичков » Графический исполнитель "Робот"
1 2 3 4 5 None 28 29 30 31
py.user.next
sdl5
Есть Задача №21: task_4_11.
    move_right()
move_down()
for i in range(1, 13 + 1):
for _ in range(i):
fill_cell()
move_right()
for _ in range(i):
move_left()
move_down()

    move_right()
move_down()
n = 0
while not wall_is_beneath():
n += 1
for _ in range(n):
fill_cell()
move_right()
for _ in range(n):
move_left()
move_down()
Lucker
Добрый день. я так же смотрю лекции и прохожу практические задания. но столкнулся с Задача №24: task_2_1 (робот, задача с крестом). даже не знаю, как к ней подступится. прошу помощи или с помощью чего можно решить. премного благодарен за уделенное время
py.user.next
Lucker
прохожу практические задания. но столкнулся с Задача №24: task_2_1 (робот, задача с крестом). даже не знаю, как к ней подступится
  
def make_cross():
    move_right()
    fill_cell()
    move_down()
    fill_cell()
    move_right()
    fill_cell()
    move_left()
    move_down()
    fill_cell()
    move_up()
    move_left()
    fill_cell()
    move_up()
 
 
@task
def task_2_1():
    move_right()
    move_down()
    make_cross()
Lucker
py.user.next
благодарю, теперь понятно и с остальными
Lucker
опять прошу помощи, Задача №27: task_7_5. Закрасить клетки с увеличивающимся интервалом. Расстояние до стены не известно. пока имею такой вид кода:
n=0
move_right()
while not wall_is_on_the_right():
fill_cell()
if cell_is_filled():
n+=1
move_right(n)
Но боюсь тут вообще нужно воспользоваться циклом “for”, совсем голову сломал…
и сразу еще вопрос, как сделать, чтобы отступы были видны в сообщении?
py.user.next
Lucker
опять прошу помощи, Задача №27: task_7_5.
  
@task
def task_7_5():
    move_right()
    fill_cell()
    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()

Lucker
как сделать, чтобы отступы были видны
[code python][/code]
Lucker
это снова я, извините за беспокойство. я совсем недавно (чуть больше недели) начал осваивать с нуля программирование. может задачки и простые, но что-то запнулся на последней из этой практики. Задача №32: task_8_18. Закрасить отмеченные клетки. В регистр ax записать количество клеток, которые были закрашены ещё до того, как робот начал двигаться. Количество и размеры коридоров не известны.

2 вариант: с таким кодом все проходится, но проблема с регистром AX. ума не приложу что с этим делать.

 def up():
    if cell_is_filled():
        if not wall_is_above():
            move_up()
            x+=1
    else:
        fill_cell()
        if not wall_is_above():
            move_up()
    if wall_is_above():
        while not wall_is_beneath():
            move_down()
    
@task(delay=0.01)
def task_8_18():
    x=0
    
    while not wall_is_on_the_right():
        if wall_is_above() and wall_is_beneath():
            fill_cell()
            move_right()
        else:
            move_up()
            up()
 def up():
    while not wall_is_above():
        if cell_is_filled():
            if not wall_is_above():
                move_up()
            
        else:
            fill_cell()
            if not wall_is_above():
                move_up()
    if wall_is_above():
        if cell_is_filled():
            move_down()
        else:
            fill_cell()
        while wall_is_on_the_left():
            move_down()
            if not wall_is_on_the_right():
                move_right()
@task(delay=0.05)
def task_8_18():
    
    
    while not wall_is_on_the_right():
        if wall_is_above() and wall_is_beneath():
            fill_cell()
            move_right()
        else:
            move_up()
            up()
py.user.next
Lucker
но что-то запнулся на последней из этой практики. Задача №32: task_8_18. Закрасить отмеченные клетки. В регистр ax записать количество клеток, которые были закрашены ещё до того, как робот начал двигаться. Количество и размеры коридоров не известны.

  
def walk_upstairs():
    n = 0
    while not wall_is_above():
        move_up()
        if cell_is_filled():
            n += 1
        else:
            fill_cell()
    while not wall_is_beneath():
        move_down()
    return n
  
@task
def task_8_18():
    n = 0
    while not wall_is_on_the_right():
        if cell_is_filled():
            n += 1
        if wall_is_above():
            if not cell_is_filled():
                fill_cell()
        else:
            n += walk_upstairs()
        move_right()
    mov('ax', n)
 

Тут применён возврат значения из функции. В этом курсе такие возможности не описываются, но в реале всё делается именно так. Если же по курсу брать, то регистр доступен во всех процедурах и из него можно брать значение (брать, наращивать и класть обратно). Но тут в курсе не указано, как брать значение регистра, хотя pyrob может его брать (если внутри пакета покопаться) через get_register_value(r). Короче, это всё частности; главное алгоритм составить, применив декомпозицию на подпрограммы, потому что регистр потом не пригодится, а вот навык декомпозиции (раскладывания на составные части) алгоритма потом всегда будет нужен.
Lucker
py.user.next
если Вам не трудно, могли бы прокомментировать алгоритм, потому что функцию я написал такую же, но Ваш алгоритм не совсем понимаю. в частности:
if cell_is_filled():
n+=1
else:
n+=walk_upstairs()

и спасибо за ответы. очень помогает)
py.user.next
Тут два разных счётчика: n магистральный (для магистрали) и n веточный (для ветки). Эти счётчики не зависят друг от друга, считаются по отдельности. Когда веточный n вычислен, он возвращается из функции в виде числа. То есть на выходе из функции мы получаем число изначально закрашенных клеток в ветке. И это число добавляется к магистральному n.

Когда ты проходишь одну ветку, в магистральном n находится сумма количества изначально закрашенных клеток на магистрали и количества изначально закрашенных клеток в пройденной ветке. Он их отдельно вычислил и сложил при выходе из ветки.

Вот это выражение
  
n += walk_upstairs()

Можно записать так
  
n_in_branch = walk_upstairs()
n += n_in_branch
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB