Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 4, 2021 08:36:53

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

Вызов для людей знающих питон лучше меня

Привет всем, ребят. Рад быть частью этого сообщества, хотя я дикий чайник в питоне. Есть такая программа, на нее как видите затрачено много строчек кода. Как это дело можно оптимизировать? Не секу как лихо закрученную траекторию в циклы запустить, и возможно ли?
import turtle

turtle.shape('arrow')

turtle.left(90)
turtle.forward(60)

turtle.right(90)
turtle.forward(60)

turtle.left(90)
turtle.forward(60)

turtle.right(90)
turtle.forward(60)

turtle.right(90)
turtle.forward(60)

turtle.left(90)
turtle.forward(60)

turtle.right(90)
turtle.forward(60)

turtle.right(90)
turtle.forward(180)

turtle.penup()
turtle.right(135)
turtle.forward(110)
turtle.pendown()

turtle.color('red')
turtle.width(7)
turtle.forward(15)
turtle.right(136)
turtle.forward(25)

turtle.color('black')
turtle.penup()
turtle.right(60)
turtle.forward(60)
turtle.pendown()

turtle.color('blue')
turtle.right(25)
turtle.backward(15)
turtle.left(90)
turtle.forward(12)
turtle.right(90)
turtle.forward(12)
turtle.left(90)
turtle.forward(12)
turtle.left(90)
turtle.forward(12)

turtle.color('black')
turtle.penup()
turtle.left(15)
turtle.forward(75)
turtle.pendown()

turtle.color('yellow')
turtle.width(5)
turtle.right(15)
turtle.forward(15)
turtle.right(100)
turtle.forward(12)
turtle.right(75)
turtle.forward(15)
turtle.backward(15)
turtle.left(70)
turtle.forward(12)
turtle.right(70)
turtle.forward(7)

turtle.done()

Офлайн

#2 Апрель 4, 2021 10:04:43

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Вызов для людей знающих питон лучше меня

artem0167
в циклы запустить
В циклы можно все что угодно запустить.
 # бессмысленный цикл
for i in range(1):
    turtle.left(90)
    turtle.forward(60)
artem0167
Как это дело можно оптимизировать?
Т.е. уменьшить количество текста? По сути вы хотите сжать данные о кривой. Тогда читайте https://ru.wikipedia.org/wiki/Сжатие_без_потерь
Например переобозначение длинных команд короткими именами уже существенно сократит код. Начало вашего кода будет выглятеть так:
 def f():
    turtle.forward(60)
def l():
    turtle.left(90)
    f()
def r():
    turtle.right(90)
    f()
for i in [l,r,l,r,r,l,l,r,r,f]:
    i()
По сути это аля Хафмановская компрессия.
Дальше вы можете чтото типа RLE затеять. https://ru.wikipedia.org/wiki/Кодирование_длин_серий Ну и так далее.

Но!!! Обычно все в обратном порядке проходит. Люди не жмут хаотическую последовательность команд. Человет начинает писать программу имея в голове простую идею, которую можно выразить парой фраз. Цель в том чтобы не превратить эту простую идею в кучу дерьмового кода. Например если случайно заполняете плоскость используете random. Нужны самоподобные структуры, используете фрактальные алгоитмы, рекурсию, и т.п.

https://towardsdatascience.com/creating-fractals-with-python-d2b663786da6



Отредактировано doza_and (Апрель 4, 2021 10:13:25)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version