Форум сайта python.su
Всем привет, потратил два дня на 19 задачу Не мог решить вопрос когда с двух сторон нет выхода. В итоге все таки решил, делюсь своим примером, мб кому нибудь пригодиться, тк тут его не нашел.
Что бы немного напрячь мозг, написал код текстом по примеру py.user.next.
цикл пока слева_нет_стены выполнять
шагнуть влево
конец цикла
цикл пока сверху_нет_стены выполнять
шагнуть вверх
конец цикла
если снизу_стена то
цикл пока справа_нет_стены выполнять
шагнуть вправо
конец цикла
конец если
цикл пока сверху_нет_стены выполнять
шагнуть вверх
конец цикла
цикл пока слева_нет_стены выполнять
шагнуть влево
конец цикла
Отредактировано Caleivy (Сен. 17, 2020 11:04:44)
Офлайн
CaleivyЗдесь делал эту задачу.
Всем привет, потратил два дня на 19 задачу
CaleivyТы забыл вставить концовки везде. А представь, что пропадут отступы (движок форума их удалит или при перепосте кем-то куда-то они удалятся куда-нибудь). Вот концовки нужны как раз для того, чтобы при пропаже отступов можно было всё точно восстановить обратно, ну или хотя бы точно всё прочитать без восстановления.
Что бы немного напрячь мозг, написал код текстом по примеру py.user.next.
цикл пока слева_нет_стены выполнять
шагнуть влево
цикл пока сверху_нет_стены выполнять
шагнуть вверх
если снизу_нет_стены то
цикл пока справа_нет_стены выполнять
шагнуть вправо
цикл пока сверху_нет_стены выполнять
шагнуть вверх
цикл пока слева_нет_стены выполнять
шагнуть влево
Отредактировано py.user.next (Сен. 16, 2020 22:46:36)
Офлайн
py.user.nextПонял, спасибо за подсказку, исправил.
Попробуй восстанови обратно, когда только по отступам можно было сказать, вложенный ли цикл или не вложенный. Другое дело, если там концовки есть, тогда по ним ты можешь всё точно восстановить.
py.user.nextПоиск на данном форуме что-то вообще не работает. Что бы не искал, ничего не находит.
Здесь делал эту задачу.
Отредактировано Caleivy (Сен. 16, 2020 10:23:14)
Офлайн
py.user.nextПодскажи пожалуйста, как решил задачу №22, просмотрел все страницы данной ветки, так и не нашел.
def task_5_10(): if (wall_is_above() and wall_is_beneath() and wall_is_on_the_left() and wall_is_on_the_right()): fill_cell() while not wall_is_beneath(): while not wall_is_on_the_right(): fill_cell() move_right() fill_cell() while not wall_is_on_the_left(): move_left() move_down() while not wall_is_on_the_right(): fill_cell() move_right() fill_cell() while not wall_is_on_the_left(): move_left()
Отредактировано Caleivy (Сен. 16, 2020 13:25:22)
Офлайн
CaleivyЧитаю твой код, он с ошибками. Один цикл не закрыт в конце. Также отступы у тебя нарушены. Цикл ты закроешь сам, тут подсказки не нужны. А вот отступы нужно делать пробелами. В профессиональных кодах отступы делают табуляциями, так как они занимают один байт, но при этом их можно настроить на любую ширину отображения у себя в редакторе (на 2 пробела, на 4 пробела, на 8 пробелов). Но делается это только в суперпрофессиональных кодах, где ты точно знаешь, что люди там не тупые сидят. Если же у тебя речь идёт о диком коде, который может попасть и к тупарю какому-нибудь, который не знает, что табуляции только всё испортят, то ты делаешь не табуляции, а пробелы. Отступ в 4 пробела нормальный. Это не много и не мало, это не 2 и не 8. При этом в любом редакторе, в любой консоли, на любом сайте типа GitHub'а и других, эти четыре пробела будут отображаться одинаково. А вот табуляции там обычно скачут так, что цикл с двумя-тремя вложенностями уезжает за край экрана и этот код надо постоянно прокручивать влево и вправо, чтобы читать его построчно. Ты просто вставляешь небольшой код с табуляциями на сайт, а после отправки он показывается с этими табуляциями шириной в 8 пробелов. А нафиг тебе эти 8 пробелов смотреть, если ты и так видишь, что там отступ есть. То есть нет такой необходимости, а умность использования табуляций тут вообще ни при чём. Если код читается херово, то не очень-то он умно оформлен.
Понял, спасибо за подсказку, исправил.
CaleivyЗдесь делал эту задачу.
Подскажи пожалуйста, как решил задачу №22, просмотрел все страницы данной ветки, так и не нашел.
CaleivyПоиск на всех форумах не работает. Это происходит потому, что форумы не специализируются на поиске. На форумах ты обычно ищешь через google.com или yandex.ru, используя специальную конструкцию для поиска только по одному сайту. Есть там язык поисковых запросов, который у каждой поисковой системы свой. То есть не только по словам можно искать, можно сказать “ищи только на этом сайте” или “ищи только с таким словом в адресной строке” или “ищи только файл с расширением pdf”. Индексирование всяких мест - это слишком сложная фигня, чтобы разработчики форумских движков в ней хорошо соображали. Поэтому поиск на форумах делают, но найти им практически ничего нельзя, кроме самых общих и простых текстов.
Поиск на данном форуме что-то вообще не работает. Что бы не искал, ничего не находит.
Отредактировано py.user.next (Сен. 16, 2020 23:17:01)
Офлайн
py.user.nextНу там в конце просто цикл в цикле, поэтому конец поставил один. А насчет табуляции, во всех учебных материалах говорится именно про 4 пробела, поэтому всегда её и использую.
Читаю твой код, он с ошибками. Один цикл не закрыт в конце. Также отступы у тебя нарушены. Цикл ты закроешь сам, тут подсказки не нужны. А вот отступы нужно делать пробелами.
Офлайн
CaleivyУ каждого цикла должна быть концовка, даже если в нём вообще ничего нет. Потому что человек когда читает, он не знает, что ты там думал, знаешь ли ты, как писать, или не знаешь, как писать. Все циклы имеют одну форму - заголовок + тело + концовка.
Ну там в конце просто цикл в цикле, поэтому конец поставил один.
CaleivyЕсли ты перечитаешь свой псевдокод, то ты увидишь, что отступы у тебя вообще неправильно расставлены. А всё это происходит из-за того, что там до сих пор табуляция содержится. Поэтому ты не можешь сообразить, как его выровнять.
А насчет табуляции, во всех учебных материалах говорится именно про 4 пробела, поэтому всегда её и использую.
Отредактировано py.user.next (Сен. 17, 2020 01:57:04)
Офлайн
py.user.nextУвидел, почему то именно на форуме поставилось слишком много пробелов, там где у меня стоит 4, тут поставило 8, исправил.
У каждого цикла должна быть концовка, даже если в нём вообще ничего нет. Потому что человек когда читает, он не знает, что ты там думал, знаешь ли ты, как писать, или не знаешь, как писать. Все циклы имеют одну форму - заголовок + тело + концовка.
py.user.nextЯ только недавно начал изучать python, до этого с программированием не связывался, поэтому ошибки допустимы. Но критика это хорошо, в дальнейшем стараешься не допускать тех же ошибок.
Если ты перечитаешь свой псевдокод, то ты увидишь, что отступы у тебя вообще неправильно расставлены. А всё это происходит из-за того, что там до сих пор табуляция содержится. Поэтому ты не можешь сообразить, как его выровнять.
Офлайн
Caleivy и py.user.next, у меня почти тоже самое решение для 19 задачи (половину скопипастил поэтому):
цикл пока слева_нет_стены и сверху_есть_стена выполнять шагнуть влево конец цикла цикл пока справа_нет_стены и сверху_есть_стена выполнять шагнуть вправо конец цикла если сверху_нет_стены то цикл пока сверху_нет_стены выполнять шагнуть вверх конец цикла цикл пока слева_нет_стены выполнять шагнуть влево конец цикла конец если
Отредактировано 0ppa (Сен. 19, 2020 10:16:50)
Офлайн
0ppaЗдесь делал 18-ую задачу.
Только самое смешное, что я случайно сначала сделал 19 задачу, а потом только 18 и у меня так получилось, что решение 19 полностью подошло для 18 задачи
0ppaЗадачи в учебных курсах специально могут быть заготовлены так, чтобы показать учащемуся реюз кода и простимулировать его взять свою программу и поменять её немного, чтобы решить другую задачу, похожую на уже решённую. Это типа учебного приёма. В реальных же задачах (из реального, дикого мира) обычно всё зависит только от тебя, от твоего мастерства писать не привязанный ни к чему код. Для этого в ООП-языках (объектно-ориентированная парадигма) существуют интерфейсы, используется приём агрегации, используется полиморфизм. В СП-языках (структурная парадигма) обычно заморачиваются на ослаблении передаваемых данных. Чем проще данные, которые модули/подпрограммы передают друг другу, тем лучше. Чем свободнее условия, в которых может выполняться подпрограмма, тем лучше. Это залог реюза такого кода. Его всегда можно повернуть чуть ли не в противоположную сторону.
решение 19 полностью подошло для 18 задачи
[guest@localhost ~]$ echo "a aaa" | awk '{print "field1=" $1, "field2=" $2, "match=" ($2 ~ $1 "{"length($2)"}")}'
field1=a field2=aaa match=1
[guest@localhost ~]$ echo "a aaa" | awk '{print "field1=" $1, "field2=" $2, "match=" ($2 ~ $1 "{"length($2)+1"}")}'
field1=a field2=aaa match=0
[guest@localhost ~]$
$1 "{" length($2) "}" ->
"a" "{" length($2) "}" ->
"a" "{" length("aaa") "}" ->
"a" "{" 3 "}" ->
"a{" 3 "}" ->
"a{" "3" "}" ->
"a{3" "}" ->
"a{3}"
[guest@localhost ~]$ echo "a" | awk '{print length(11111)}'
5
[guest@localhost ~]$
[guest@localhost ~]$ echo "a" | awk '{print "in 11111 there are "length(11111)" digits"}'
in 11111 there are 5 digits
[guest@localhost ~]$
[guest@localhost ~]$ awk 'BEGIN {num = 11111; print "in " num " there are " length(num) " digits"}'
in 11111 there are 5 digits
[guest@localhost ~]$
[guest@localhost ~]$ awk 'BEGIN {num = 11111; print "in " num " there are " length(num) " digits" >"file_for_" num ".txt"}'
[guest@localhost ~]$ cat file_for_11111.txt
in 11111 there are 5 digits
[guest@localhost ~]$
Отредактировано py.user.next (Сен. 24, 2020 23:16:30)
Офлайн