Найти - Пользователи
Полная версия: Вызов для людей знающих питон лучше меня
Начало » Python для новичков » Вызов для людей знающих питон лучше меня
1
artem0167
Привет всем, ребят. Рад быть частью этого сообщества, хотя я дикий чайник в питоне. Есть такая программа, на нее как видите затрачено много строчек кода. Как это дело можно оптимизировать? Не секу как лихо закрученную траекторию в циклы запустить, и возможно ли?
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()
doza_and
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

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB