Найти - Пользователи
Полная версия: Графический исполнитель "Робот"
Начало » Python для новичков » Графический исполнитель "Робот"
1 2 3 4 None 26 27 28 29 30 31
pokemon
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()]
py.user.next
pokemon
Здравствуйте можете объяснить логику ? решения. на 30 задаче (task_9_3)этой) застрял. не могу понять никак.. читаю ваш код но не могу понять(ход и действия кода) как это вы закрашиваете поле «треугольниками».

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

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

Решил решить какую-то часть задач по роботу с помощью флагов по наводке человека из форума. Решил 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
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 шага вправо
и аналогично в обратную сторону.
py.user.next
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()

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

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

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

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

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

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

Надо планомерно выполнять маленькие задачки, читать книжки, тогда ты будешь расти. А если сразу всему учиться, то просто время потратишь и мотивацию загасишь, потому что не получается ничего.
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