Форум сайта python.su
Помогите решить:
Задача №17: task_8_27
Перейти на вторую закрашенную клетку. Клетка может быть как справа, так и слева.
Прикреплённый файлы:
Screenshot_20200721_192033.png (16,8 KБ)
Офлайн
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)
Офлайн
Офлайн
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()
Офлайн
помоните, пожалуйста, с решением задачи 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()
Офлайн
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)
Офлайн
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()
Офлайн
0ppaПсевдокод существует для того, чтобы с него можно было на любой язык этот код переписать, не только на Python. В разных языках такой вид циклов записывается по-разному. Где-то он записывается как while, где-то он записывается как do, где-то он записывается как for, а где-то ещё как-нибудь. То же самое с концовками циклов - где-то они есть, где-то их нет. Вот для того, чтобы не писать одно, другое или третье, выбирается общая форма для цикла и записывается единым образом. А дальше, в зависимости от своего языка, на котором ты там пишешь, ты переводишь на него вот этот псевдокод, который получил от кого-то, и пишешь цикл там, как это принято там делать. Таким образом один псевдокод можно передать многим программистам на разных языках, а они уже все правильно каждый на своём языке его запишет. Это одна из функций псевдокода. Другая функция псевдокода - обеспечить лёгкость записи кода. Во-первых, ты можешь не писать в псевдокоде символы, обязательные во всяких языках для того, чтобы там всё запускалось и компилировалось, а во-вторых, ты можешь в псевдокод напрямую вставлять математические и физические формулы в их естественном виде вплоть до картинок или ссылок на документы, которые лежат где-нибудь в Интернете, что в обычных языках ты себе позволить точно не можешь. Поэтому псевдокод ты должен знать. Это специальный инструмент для программиста, как дебаггер, как среда разработки, как статические анализаторы кода.
Не могу понять псевдокод …
Что такое “цикл выполнять”?
0ppaЭто просто бесконечный цикл.
Что такое “цикл выполнять”?
while True: pass
while (1) {
}
for (;;) {
}
for {
}
Отредактировано py.user.next (Сен. 13, 2020 22:57:25)
Офлайн
0ppaА я тут решил эту задачу, на питоне она у меня написана и всё работает. Тебе нужно просто псевдокод, который там написан в сообщении, перевести на питон. А код на питоне я не выкладываю, чтобы человек просто не зря писал и составлял эти задания. Он там мучился, формировал эти задачи, а я такой умный сейчас возьму и выложу все решения. Весь его труд на смарку.
Читаю форум, и все что смог впитать, сделал так (с комментариями иначе запутаться можно …):
Отредактировано py.user.next (Сен. 13, 2020 23:06:25)
Офлайн
py.user.nextЯсно, спасибо. Будем разбираться.
Офлайн