Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2020 16:53:46

Mike.Nek
Зарегистрирован: 2020-04-13
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Salavatulin
Здравствуйте уважаемые. Вопрос по обсуждаемой тут практике “исполнитель робот”. Прочитал всё ветку не нашёл подсказки.Задача №16, task_8_22. Не могу понять почему робот не поворачивает в тупике. Хотя условие вроде явно прописано.
move_right и move_left пропущены () в 9 и 12 строках

Офлайн

#2 Апрель 13, 2020 19:46:17

Salavatulin
Зарегистрирован: 2020-04-13
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Mike.Nek
Как глупо( Спасибо большое. Сколько раз уже из-за таких мелочей кучу времени тратил впустую.

Офлайн

#3 Апрель 13, 2020 21:10:54

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

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

Задача №26: task_2_4
Подсказка:
Возьмите функции cross() и row_cross(n) из предыдущей задачи.
Напишите функцию rect_cross(n, m), которая закрашивает m рядов по n крестов в ряд.
Используя эту функцию закрасьте клетки, как на рисунке.
На выходе должно получиться rect_cross(10, 5) примерно
Я использовал один параметр. С двумя никак не доходит до меня. Я не понимаю как задействовать второй параметр. Использовать метод присвоения к переменой? Вот мое решение:

 from pyrob.api import *
import time
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()
def row_cross(n):
    while n > 0:
        make_cross()
        move_right()
        move_right()
        if wall_is_on_the_right():
            move_left()
            move_left()
        else:
            move_right()
            move_right()
        n -= 1
def rect_cross(m):
    row_cross(10)
    move_left(36)
    while m > 0:
        move_down(4)
        row_cross(10)
        move_left(36)
        m -= 1
@task(delay=0.02)
def task_2_4():
    rect_cross(4)
if __name__ == '__main__':
    run_tasks()

Офлайн

#4 Апрель 13, 2020 21:26:27

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

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

Mike.Nek
Задача №9: task_8_2
Mike.Nek
Вот мой вариант:
  
#!/usr/bin/python3
from pyrob.api import *
@task
def task_8_2():
    x=True
    while x==True:
        if wall_is_above()==False:
            fill_cell()
        if wall_is_on_the_right()==False:
            move_right()
        else:
            x=False
if __name__ == '__main__':
    run_tasks()
Ты использовал переменную-флаг, а они разрешены там с задачи №27 только.



Офлайн

#5 Апрель 13, 2020 21:36:56

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

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

riomenx
Задача №26: task_2_4
riomenx
Я использовал один параметр. С двумя никак не доходит до меня.

Задача

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

программа закрасить ряд крестов <вх:n:Z+>
цикл пока n > 0 выполнять
закрасить крест
шагнуть вправо
шагнуть вправо
если справа_есть_стена то
шагнуть влево
шагнуть влево
иначе
шагнуть вправо
шагнуть вправо
конец если
n.уменьшить на 1
конец цикла
конец программы

программа закрасить прямоугольник крестов <вх:n:Z+,вх:m:Z+>
цикл пока m > 0 выполнять
закрасить ряд крестов <вх:n>
цикл пока слева_нет_стены выполнять
шагнуть влево
конец цикла
шагнуть вниз
шагнуть вниз
если снизу_есть_стена то
шагнуть вверх
шагнуть вверх
иначе
шагнуть вниз
шагнуть вниз
конец если
m.уменьшить на 1
конец цикла
конец программы

закрасить прямоугольник крестов <вх:10,вх:5>

[guest@localhost pyrob]$ python3 task_26.py 
INFO:pyrob:Starting task task_2_4
INFO:pyrob:Task task_2_4 finished: +
INFO:pyrob:Total: 1/1
[guest@localhost pyrob]$



Отредактировано py.user.next (Апрель 13, 2020 21:44:40)

Офлайн

#6 Апрель 14, 2020 19:05:48

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

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

py.user.next
Все довольно просто и понятно. А вот по поводу следующих задач. Использование переменных-флагов и переменных-счётчиков в каких лекциях упоминается. Что то я не припомню. Если где то упоминается,то ткните пожалуйста

Офлайн

#7 Апрель 14, 2020 23:51:44

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

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

riomenx
спользование переменных-флагов и переменных-счётчиков в каких лекциях упоминается. Что то я не припомню. Если где то упоминается,то ткните пожалуйста
Флаг - это древнее понятие.

флаг 1
флаг 2
флаг 3

Сам я с флагами познакомился плотно при чтении книги K&R2 (книга по языку C). Во всех материалах говорится, что флаг - это переменная с двоичным значением, которое может быть равно только 0 или 1 (оно же False или True). Но, как оказалось потом, есть ещё “флаги”, которые могут принимать тысячи значений. И их значения обозначаются числами, а числа обозначаются именами в словесной форме.

переменная состояния



Офлайн

#8 Апрель 15, 2020 11:11:02

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

А роги у этого понятия растут отсюда



Офлайн

#9 Апрель 29, 2020 02:30:41

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

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

Задача 18
def task_8_28():
if not wall_is_above():
while not wall_is_above():
move_up()
if wall_is_above():
while not wall_is_on_the_left():
move_left()


elif wall_is_above() and wall_is_on_the_left():
while wall_is_above():
move_right()
else:
if not wall_is_above():
while not wall_is_above():
move_up()
if wall_is_above():
while not wall_is_on_the_left():
move_left()


elif wall_is_above() and wall_is_on_the_right():
while wall_is_above():
move_left()
else:
if not wall_is_above():
while not wall_is_above():
move_up()
if wall_is_above():
while not wall_is_on_the_left():
move_left()



elif wall_is_above():
while wall_is_above():
move_right()
if wall_is_on_the_right():
while wall_is_above():
move_left()
else:
if not wall_is_above():
while not wall_is_above():
move_up()
if wall_is_above():
while not wall_is_on_the_left():
move_left()
if __name__ == ‘__main__’:
run_tasks()


Уверен, что можно было сделать код короче, может кто знает как?

Прикреплённый файлы:
attachment 1.JPG (44,5 KБ)

Офлайн

#10 Апрель 29, 2020 05:13:34

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

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

PythonSun
Задача 18
PythonSun
Уверен, что можно было сделать код короче, может кто знает как?
Здесь делал.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version