Уведомления

Группа в Telegram: @pythonsu

#1 Июль 21, 2020 19:22:17

xperia
Зарегистрирован: 2020-07-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Помогите решить:
Задача №17: task_8_27
Перейти на вторую закрашенную клетку. Клетка может быть как справа, так и слева.

Прикреплённый файлы:
attachment Screenshot_20200721_192033.png (16,8 KБ)

Офлайн

#2 Июль 21, 2020 19:53:10

xperia
Зарегистрирован: 2020-07-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

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

xperia
Помогите решить:Задача №17: task_8_27Перейти на вторую закрашенную клетку. Клетка может быть как справа, так и слева.

Я решил вот так:
 @task
def task_8_27():
    while not cell_is_filled():
        move_up()
    if cell_is_filled():
        move_left() 
        if not cell_is_filled():
            move_right(2) 

Предложите лучший вариант

Офлайн

#3 Июль 22, 2020 03:02:20

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

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

xperia
Помогите решить:
Задача №17: task_8_27
Здесь делал.



Офлайн

#4 Авг. 18, 2020 02:22:54

0ppa
Зарегистрирован: 2020-08-12
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

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

xperia
тоже самое только с циклами как по условию:
 def task_8_27():
    while not cell_is_filled():
        move_up()
    move_right()
    if cell_is_filled()==False:
        move_left()
        while cell_is_filled()==True:
            move_left()
        move_right()   

Офлайн

#5 Сен. 11, 2020 16:36:20

f-a-v19
Зарегистрирован: 2020-09-11
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

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

помоните, пожалуйста, с решением задачи 23 (task_6_6()
пытаюсь так, но врезаюсь в стену в ряде случаев
def task_6_6():
while not wall_is_on_the_right():
if wall_is_above() or not wall_is_beneath():
move_right()

while not wall_is_above():
move_up()
fill_cell()
while not wall_is_beneath():
move_down()
move_right()
while not wall_is_above():
move_up()
fill_cell()
while not wall_is_beneath():
move_down()
while wall_is_beneath():
move_left()

if __name__ == ‘__main__’:
run_tasks()

Офлайн

#6 Сен. 12, 2020 00:11:00

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

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

f-a-v19
помоните, пожалуйста, с решением задачи 23 (task_6_6()
пытаюсь так, но врезаюсь в стену в ряде случаев
Задача

цикл пока справа_нет_стены выполнять
шагнуть вправо
если сверху_нет_стены то
цикл пока сверху_нет_стены выполнять
шагнуть вверх
закрасить клетку
конец цикла
цикл пока снизу_нет_стены выполнять
шагнуть вниз
конец цикла
конец если
конец цикла
цикл пока снизу_есть_стена выполнять
шагнуть влево
конец цикла
[guest@localhost pyrob]$ python3 task_23.py 
INFO:pyrob:Starting task task_6_6
INFO:pyrob:Task task_6_6 finished: +
INFO:pyrob:Total: 1/1
[guest@localhost pyrob]$



Отредактировано py.user.next (Сен. 12, 2020 00:11:58)

Офлайн

#7 Сен. 13, 2020 22:18:02

0ppa
Зарегистрирован: 2020-08-12
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

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

py.user.next
lapimax
Можете тогда объяснить, как тогда решить 20 задачу не прибегая к подпрограмме(как сделал я)?
Судя по названию раздела в заданиях, её нужно решить вложенным циклом без применения подпрограммы


Задача

шагнуть вправо
цикл выполнять
шагнуть вниз
если снизу_нет_стены то
шагнуть вверх
иначе
шагнуть вверх
выход из цикла
конец если
цикл пока справа_нет_стены выполнять
закрасить ячейку
шагнуть вправо
конец цикла
цикл пока слева_нет_стены выполнять
шагнуть влево
конец цикла
шагнуть вправо
шагнуть вниз
конец цикла


$ python3 task_20.py
INFO:pyrob:Starting task task_4_3
INFO:pyrob:Task task_4_3 finished: +
INFO:pyrob:Total: 1/1
$



lapimax
В 20 задании выделенные клетки ни к чему не привязаны

Есть поле вокруг и его границы. Эти границы можно использовать как логические знаки. Но до границы часто нужно сходить и вернуться обратно, чтобы сделать логический вывод по ней.



Отредактировано py.user.next (Март 19, 2020 23:44:36)
Не могу понять псевдокод …
Что такое “цикл выполнять”?
Я написал без него и понятное дело, что не работает
 def task_4_3():
    move_right(n=1)
    while not wall_is_beneath():
        move_down(n=2)
        if not wall_is_beneath():
            move_up(n=2)
        else:
             move_up(n=2)
    while not wall_is_on_the_right():
        fill_cell()
        move_right()
    while wall_is_on_the_left():
        move_left()
    move_right(n=1) 
    move_down(n=1)

Читаю форум, и все что смог впитать, сделал так (с комментариями иначе запутаться можно …):

 #!/usr/bin/python3
from pyrob.api import *
def cikl1():
    move_up(n=2)
    while not wall_is_on_the_right():
        move_right()
        if not wall_is_on_the_right():
            fill_cell()
        else:
            move_down(n=1)
            while not wall_is_on_the_left():
                move_left()
            if wall_is_on_the_left():
                move_right()
            break
        
def cikl2():
    move_up(n=2)
    while not wall_is_on_the_right():
        move_right()
        if not wall_is_on_the_right():
            fill_cell()
        else:
            move_down(n=1)
            while not wall_is_on_the_left():
                move_left()
                if not wall_is_on_the_left():
                   fill_cell()
            break
    
@task(delay=0.09)
def task_4_3():
#1 проверка первой строки, если поле из одной строки которую нужно закрасить (cikl1):
    move_down(n=2)
    if wall_is_beneath():
        cikl1()
        return
#2 иначе две строки и мы закрашиваем эти две строки (cikl2) 
    else:
        cikl2()
#3 теперь если нет третьей строки, завершаем программу
    while not wall_is_beneath():
        move_down(n=2)
        if wall_is_beneath():
            move_up()
            move_right()
            break
#4 иначе если есть третья то закрашиваем ее, идем в низ и потом влево не закрашивая, на финиш
#(тут один и тот же цикл (cikl1), что для одной единственной строки)
        else:
            move_up(n=1)
            move_down(n=2)
            if wall_is_beneath():
                cikl1()
                return
#5 повторяем цикл закрашивания двух клеток (cikl2), и так до тех пор пока не останется последняя, последнюю закрашивает предыдущий цикл.
            else:
                cikl2()
if __name__ == '__main__':
    run_tasks()

Как то так получилось, использовал все, что нашел в этой теме и что увидел в лекциях. Думаю посмотреть все лекции и старые и новые, они дополняют друг друга. А пока боюсь решать дальше, слишком сложно для меня становится. Что скажете? Можно ли мне как то помочь :d?

Офлайн

#8 Сен. 13, 2020 22:51:23

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

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

0ppa
Не могу понять псевдокод …
Что такое “цикл выполнять”?
Псевдокод существует для того, чтобы с него можно было на любой язык этот код переписать, не только на Python. В разных языках такой вид циклов записывается по-разному. Где-то он записывается как while, где-то он записывается как do, где-то он записывается как for, а где-то ещё как-нибудь. То же самое с концовками циклов - где-то они есть, где-то их нет. Вот для того, чтобы не писать одно, другое или третье, выбирается общая форма для цикла и записывается единым образом. А дальше, в зависимости от своего языка, на котором ты там пишешь, ты переводишь на него вот этот псевдокод, который получил от кого-то, и пишешь цикл там, как это принято там делать. Таким образом один псевдокод можно передать многим программистам на разных языках, а они уже все правильно каждый на своём языке его запишет. Это одна из функций псевдокода. Другая функция псевдокода - обеспечить лёгкость записи кода. Во-первых, ты можешь не писать в псевдокоде символы, обязательные во всяких языках для того, чтобы там всё запускалось и компилировалось, а во-вторых, ты можешь в псевдокод напрямую вставлять математические и физические формулы в их естественном виде вплоть до картинок или ссылок на документы, которые лежат где-нибудь в Интернете, что в обычных языках ты себе позволить точно не можешь. Поэтому псевдокод ты должен знать. Это специальный инструмент для программиста, как дебаггер, как среда разработки, как статические анализаторы кода.

Знаешь, вот бывает, что испанцу нужно пообщаться с бразильцем, а бразильцу нужно пообщаться с пакистанцем. Как ты думаешь, как они будут общаться? Они будут общаться на английском языке. Этому можно быстро научиться. Поэтому это так и происходит во всём мире. Вот с псевдокодом в программировании происходит то же самое. Тебе не нужно изучать Java, чтобы джависту объяснить, какую программы ты написал на Python. Ты просто ему псевдокод пишешь и он понимает. А джависту не нужно изучать Delphi, чтобы дельфисту объяснить, какую программу он написал на Java. Он просто ему псевдокод напишет и дельфист поймёт это на своём Delphi, как и что делать. Им не нужно изучать языки друг друга, чтобы общаться про программы.

0ppa
Что такое “цикл выполнять”?
Это просто бесконечный цикл.

В питоне это будет
  
while True:
    pass
В других языках это будет по-другому выглядеть.
На C и на C++ это будет (так как C++ своё ядро языка взял из C)
while (1) {
}
for (;;) {
}
На Go это будет
for {
}
И заметь, что эти все записи являются одним и тем же - бесконечным циклом, при этом они выглядят по-разному.



Отредактировано py.user.next (Сен. 13, 2020 22:57:25)

Офлайн

#9 Сен. 13, 2020 23:03:08

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

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

0ppa
Читаю форум, и все что смог впитать, сделал так (с комментариями иначе запутаться можно …):
А я тут решил эту задачу, на питоне она у меня написана и всё работает. Тебе нужно просто псевдокод, который там написан в сообщении, перевести на питон. А код на питоне я не выкладываю, чтобы человек просто не зря писал и составлял эти задания. Он там мучился, формировал эти задачи, а я такой умный сейчас возьму и выложу все решения. Весь его труд на смарку.



Отредактировано py.user.next (Сен. 13, 2020 23:06:25)

Офлайн

#10 Сен. 14, 2020 21:16:46

0ppa
Зарегистрирован: 2020-08-12
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

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

py.user.next
Ясно, спасибо. Будем разбираться.
На гитхабе в модуле pyrob'а есть папка с решениями всех заданий, но я сначала сам делаю, а потом смотрю как правильно. Но для этой задачи там простое и не интересное решение, просто for и range. Тут такое решение тоже обсуждалось. Но ваше решение мне нравится больше

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version