Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 11, 2022 18:41:20

pokemon
Зарегистрирован: 2022-08-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

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

py.user.next
Здравствуйте можете объяснить логику ? решения. на 30 задаче (task_9_3)этой) застрял. не могу понять никак.. читаю ваш код но не могу понять(ход и действия кода) как это вы закрашиваете поле «треугольниками».
остальные задачи решил. они полегче больше на простую логику.. а не математическую )
через ====== это ваше же упрощение . но что то я туго понимаю(
 [/code#!/usr/bin/python3
 
from pyrob.api import *
 
 
def draw_cycle(side_length):
    i = 0
    while i < side_length - 1:
        if i > 0:
            fill_cell()
            move_up()
        else:
            move_up()
        i += 1
    i = 0
    while i < side_length - 1:
        if i > 0:
            fill_cell()
            move_right()
        else:
            move_right()
        i += 1
    i = 0
    while i < side_length - 1:
        if i > 0:
            fill_cell()
            move_down()
        else:
            move_down()
        i += 1
    i = 0
    while i < side_length - 1:
        if i > 0:
            fill_cell()
            move_left()
        else:
            move_left()
        i += 1
 
 
@task(delay=0.05)
def task_9_3():
    side_length = 1
    while not wall_is_beneath():
        move_down()
        side_length += 1
    while side_length > 1:
        draw_cycle(side_length)
        move_right()
        move_up()
        side_length -= 2
    while not wall_is_beneath():
        move_down()
    while not wall_is_on_the_left():
        move_left()
 
 
if __name__ == '__main__':
    run_tasks()
===================================================================
  
def draw_cycle(side_length):
    for move_func in (move_up,
                      move_right,
                      move_down,
                      move_left):
        for i in range(side_length - 1):
            if i > 0:
                fill_cell()
            move_func()]

Отредактировано pokemon (Сен. 11, 2022 18:44:36)

Офлайн

#2 Сен. 12, 2022 01:16:08

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

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

pokemon
Здравствуйте можете объяснить логику ? решения. на 30 задаче (task_9_3)этой) застрял. не могу понять никак.. читаю ваш код но не могу понять(ход и действия кода) как это вы закрашиваете поле «треугольниками».

Задача 30.
Здесь писал решение.
Здесь писал объяснение решения.

Там же в объяснении я написал, почему я не стал брать диагонали в качестве решения.



Офлайн

#3 Апрель 5, 2023 22:46:09

Vangeli
Зарегистрирован: 2023-04-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Всем доброго времени суток

Отредактировано Vangeli (Апрель 5, 2023 22:49:14)

Офлайн

#4 Апрель 5, 2023 22:46:21

Vangeli
Зарегистрирован: 2023-04-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Всем доброго времени суток

Решил решить какую-то часть задач по роботу с помощью флагов по наводке человека из форума. Решил 8,9,11,12, но ни как не могу решить с помощью флагов №10 task_8_3. Буду благодарен, если кто-то сможет объяснить логику

 from pyrob.api import *
@task
def task_8_3():
    x = True
    while x==True:
        if wall_is_above() or wall_is_beneath()==False:
            fill_cell()
        if wall_is_on_the_right()==False:
            move_rights()
        else:
            x = False
if __name__ == '__main__':
   run_tasks()
   

Основная проблема в том, что оно просто отказывается идти вправо. Выделяет как положено

Рабочий код ниже:

 from pyrob.api import *
@task
def task_8_3():
    pass
    for i in range(1):
        while not wall_is_on_the_right():
                move_right()
                if wall_is_above() or wall_is_beneath():
                    fill_cell()
        while not wall_is_on_the_left():
            move_left()
            print(not wall_is_on_the_left())
            if wall_is_above() or wall_is_beneath():
                    fill_cell()
        while not wall_is_on_the_right():
            move_right()
if __name__ == '__main__':
    run_tasks()
   

Отредактировано Vangeli (Апрель 5, 2023 22:52:27)

Офлайн

#5 Апрель 6, 2023 02:18:09

Vangeli
Зарегистрирован: 2023-04-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

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

py.user.next
#!/usr/bin/python3

Почему-то не сработало цитирование, в общем, это к обсуждению 17-й задачи (tasl_8_27)
 from pyrob.api import *
@task
def task_8_27():
    pass
    for i in range(1):
        while not cell_is_filled():
            move_up()
        if cell_is_filled():
            move_left()
        else:
            if not cell_is_filled():
                move_right(2)
if __name__ == '__main__':
    run_tasks()

Мне кажется, что подобная логика должна сработать, но почему-то else не отрабатывает. Можно было бы еще попробовать: как доходишь на закрашенную, то сделай шаг влево - если на закрашенной, то цикл закончен, иначе если на белой,то 2 шага вправо
и аналогично в обратную сторону.

Отредактировано Vangeli (Апрель 6, 2023 02:27:00)

Офлайн

#6 Апрель 6, 2023 03:00:23

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

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

Vangeli
но ни как не могу решить с помощью флагов №10 task_8_3
Здесь делал эту задачу.

Vangeli
Почему-то не сработало цитирование, в общем, это к обсуждению 17-й задачи (tasl_8_27)
Здесь делал эту задачу.

Обрати внимание, что эти коды записаны словесно, а не на питоне.

Сначала ты должен словесно написать весь алгоритм по пунктам.
1. Сделать то.
2. Сделать это.
3. Сделать третье.
4. И так далее.

Затем ты должен нарисовать блок-схему этого алгоритма.
Рисуешь картинки в виде “вот цикл”, “вот условие”, “вот действие” и так далее.
wiki. блок-схема

После этого ты должен записать псевдокод для этого алгоритма.
сделать первое
если икс равно трём, то
сделать второе
иначе
сделать третье
сделать четвёртое

И уже после этого ты можешь писать код на питоне в соответствии с этим псевдокодом.
  
do_first_action()
if x == 3:
    do_second_action()
else:
    do_third_action()
do_fourth_action()

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



Отредактировано py.user.next (Апрель 6, 2023 03:05:16)

Офлайн

#7 Апрель 6, 2023 09:51:58

Vangeli
Зарегистрирован: 2023-04-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Благодарю за ответ!
За блок-схемы отдельное спасибо, изучу надлежащим образом

Решение, которое ты предлагал для 17 задачи так никак и не сработало у меня, поэтому я сделал своё всё-таки. Я понял, почему у меня не срабатывало “иначе”. Напишу, может кому-то когда-то будет полезно:

ИНАЧЕ должно наступать при не выполнении условий ЕСЛИ (банально, не правда ли?). А фактически, из-за первого цикла на подъем вверх - мы всегда попадали на закрашенный квадратик, поэтому ИНАЧЕ там не срабатывало. Но выйти из этого квадратика в силу генерации уровня мы могли, поэтому и нужно было задать второе условие

 @task
def task_8_27():
    pass
    for i in range(1):
        while not cell_is_filled():
            move_up()
        if cell_is_filled():
            move_left()
            if not cell_is_filled():
                move_right(2)
if __name__ == '__main__':
    run_tasks()

Офлайн

#8 Апрель 6, 2023 13:25:37

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

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

Vangeli
Решение, которое ты предлагал для 17 задачи так никак и не сработало у меня

Здесь делал эту задачу.
Просто псевдокод переписан в код на питоне.
  
>>> from pyrob.api import *
>>> 
>>> 
>>> @task
... def task_8_27():
...     while not cell_is_filled():
...         move_up()
...     move_right()
...     if not cell_is_filled():
...         move_left()
...         move_left()
... 
>>> 
>>> if __name__ == '__main__':
...     run_tasks()
... 
INFO:pyrob:Starting task task_8_27
INFO:pyrob:Task task_8_27 finished: +
INFO:pyrob:Total: 1/1
True
>>>



Отредактировано py.user.next (Апрель 6, 2023 13:26:35)

Офлайн

#9 Апрель 7, 2023 02:09:34

Vangeli
Зарегистрирован: 2023-04-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Хочу поделиться своим видением решения задачи №20 (task_4_3)

Заранее оговорюсь, что не смог найти решения для этой задачи, которое могло бы масштабироваться. Мне видится, что его здесь нет, если будут изменяться отступы закрашенных клеток от стен с любой стороны или же будет плавающая точка финала

 #!/usr/bin/python3
from pyrob.api import *
@task(delay=0.001)
def task_4_3():
    count = 0
    while not wall_is_beneath():
        move_down()
        count +=1
        print(count)
    move_up(count)
    while not count ==2:
        while not wall_is_on_the_right():
            move_right()
            if not wall_is_on_the_right():
                fill_cell()
        move_down()
        count -=1
        print(count)
        while not wall_is_on_the_left():
            move_left()
            if not wall_is_on_the_left():
                fill_cell()
            else:
                if wall_is_on_the_left():
                    move_down()
                    count -= 1
                    print(count)
        if count <= 2:
            break
    move_right()
if __name__ == '__main__':
    run_tasks()
[s][/s]

Офлайн

#10 Апрель 7, 2023 03:00:41

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

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

Vangeli
Заранее оговорюсь, что не смог найти решения для этой задачи, которое могло бы масштабироваться.
Здесь делал эту задачу.

Vangeli
Мне видится, что его здесь нет, если будут изменяться отступы закрашенных клеток от стен с любой стороны или же будет плавающая точка финала
Да ты усложняешь просто задачу. Понимаешь, там заданы рамки для каждой группы задач “вот сейчас типа используем циклы в условиях” или там “сейчас используем флаги” или там “а сейчас используем подпрограммы” и так далее. И вот надо в этих рамках действовать. Тогда у тебя будут прокачиваться навыки элементарные.

Если ты решил скалолазом стать и сразу полез на девятиэтажку, чтобы потренироваться подниматься на небоскрёбы в сотни этажей, то, скорее всего, ты просто сорвёшься где-нибудь на втором или третьем этаже, даже не достигнув девятого этажа. Просто сорвёшься потому, что ты новичок, который не научился даже на второй этаж залазить правильно и каждый раз всё неправильно делает. Начинать надо с малого и постепенно расти из этого уровня на следующий уровень. Нельзя сразу пытаться сделать финт ушами.

Vangeli
Заранее оговорюсь, что не смог найти решения для этой задачи, которое могло бы масштабироваться. Мне видится, что его здесь нет
Оно здесь есть, только ты его не видишь, так как у тебя отсутствует опыт программирования чего-то более сложного. Этот курс - это задачки для школьников. Вот и действуй в его рамках, как школьник. Не надо лезть в дебри, всё равно не вывезешь. Подрастёшь - полезешь дальше.

По крайней мере, у меня так было лет десять назад, даже больше. Я писал морской бой, мне казалось, я его напишу, но я столкнулся с тем, что не смог компьютеру мозг написать, чтобы он искал мои корабли как-то хотя бы немного умно. Это было для меня неподъёмной задачей. Я в итоге написал весь интерфейс и бросил его писать дальше, так и не понял, как написать этот перебор клеток, чтобы компьютер хоть как-то мог меня обыграть хоть раз. Сейчас я смотрю на это в ретроспективе и думаю, что правильно сделал тогда, что бросил, а не стал долбить до конца. Потому что мне тогда не хватало знаний даже приблизительно для того, чтобы реализовать эту серию алгоритмов, которая там нужна для этого. Мне тогда казалось, что там всё просто должно быть - два притопа три прихлопа - а сейчас я вижу, что там нужно десяток переключений на разные стратегии поиска, чтобы получить что-то вменяемое. Тогда бы я это не потянул, потому что не знал даже про эти основы работы с алгоритмами.

Надо планомерно выполнять маленькие задачки, читать книжки, тогда ты будешь расти. А если сразу всему учиться, то просто время потратишь и мотивацию загасишь, потому что не получается ничего.



Отредактировано py.user.next (Апрель 7, 2023 03:11:47)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version