Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 12, 2018 03:29:41

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

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

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



Отредактировано py.user.next (Авг. 1, 2019 01:30:37)

Офлайн

#2 Окт. 1, 2018 19:07:35

Lucker
Зарегистрирован: 2018-10-01
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Добрый день. я так же смотрю лекции и прохожу практические задания. но столкнулся с Задача №24: task_2_1 (робот, задача с крестом). даже не знаю, как к ней подступится. прошу помощи или с помощью чего можно решить. премного благодарен за уделенное время

Офлайн

#3 Окт. 2, 2018 03:31:49

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

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

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



Офлайн

#4 Окт. 2, 2018 08:25:07

Lucker
Зарегистрирован: 2018-10-01
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

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

py.user.next
благодарю, теперь понятно и с остальными

Офлайн

#5 Окт. 2, 2018 13:31:55

Lucker
Зарегистрирован: 2018-10-01
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

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

опять прошу помощи, Задача №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”, совсем голову сломал…
и сразу еще вопрос, как сделать, чтобы отступы были видны в сообщении?

Отредактировано Lucker (Окт. 2, 2018 13:35:41)

Офлайн

#6 Окт. 2, 2018 15:11:48

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

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

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]



Отредактировано py.user.next (Ноя. 10, 2019 23:36:01)

Офлайн

#7 Окт. 2, 2018 20:57:22

Lucker
Зарегистрирован: 2018-10-01
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

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

это снова я, извините за беспокойство. я совсем недавно (чуть больше недели) начал осваивать с нуля программирование. может задачки и простые, но что-то запнулся на последней из этой практики. Задача №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()

Отредактировано Lucker (Окт. 2, 2018 23:50:16)

Офлайн

#8 Окт. 3, 2018 01:02:29

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

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

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). Короче, это всё частности; главное алгоритм составить, применив декомпозицию на подпрограммы, потому что регистр потом не пригодится, а вот навык декомпозиции (раскладывания на составные части) алгоритма потом всегда будет нужен.



Отредактировано py.user.next (Ноя. 16, 2019 06:30:38)

Офлайн

#9 Окт. 3, 2018 02:23:22

Lucker
Зарегистрирован: 2018-10-01
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

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

py.user.next
если Вам не трудно, могли бы прокомментировать алгоритм, потому что функцию я написал такую же, но Ваш алгоритм не совсем понимаю. в частности:
if cell_is_filled():
n+=1
else:
n+=walk_upstairs()

и спасибо за ответы. очень помогает)

Офлайн

#10 Окт. 3, 2018 04:57:18

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

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

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

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

Вот это выражение

  
n += walk_upstairs()

Можно записать так
  
n_in_branch = walk_upstairs()
n += n_in_branch



Отредактировано py.user.next (Окт. 3, 2018 05:02:06)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version