mirror of
https://github.com/python/cpython.git
synced 2024-11-24 08:52:25 +01:00
c8b45a385a
* gh-118673: Remove shebang and executable bits from stdlib modules. * Removed shebangs and exe bits on turtledemo scripts. The setting was inappropriate for '__main__' and inconsistent across the other modules. The scripts can still be executed directly by invoking with the desired interpreter.
119 lines
2.4 KiB
Python
119 lines
2.4 KiB
Python
""" turtle-example-suite:
|
|
|
|
xtx_lindenmayer_indian.py
|
|
|
|
Each morning women in Tamil Nadu, in southern
|
|
India, place designs, created by using rice
|
|
flour and known as kolam on the thresholds of
|
|
their homes.
|
|
|
|
These can be described by Lindenmayer systems,
|
|
which can easily be implemented with turtle
|
|
graphics and Python.
|
|
|
|
Two examples are shown here:
|
|
(1) the snake kolam
|
|
(2) anklets of Krishna
|
|
|
|
Taken from Marcia Ascher: Mathematics
|
|
Elsewhere, An Exploration of Ideas Across
|
|
Cultures
|
|
|
|
"""
|
|
################################
|
|
# Mini Lindenmayer tool
|
|
###############################
|
|
|
|
from turtle import *
|
|
|
|
def replace( seq, replacementRules, n ):
|
|
for i in range(n):
|
|
newseq = ""
|
|
for element in seq:
|
|
newseq = newseq + replacementRules.get(element,element)
|
|
seq = newseq
|
|
return seq
|
|
|
|
def draw( commands, rules ):
|
|
for b in commands:
|
|
try:
|
|
rules[b]()
|
|
except TypeError:
|
|
try:
|
|
draw(rules[b], rules)
|
|
except:
|
|
pass
|
|
|
|
|
|
def main():
|
|
################################
|
|
# Example 1: Snake kolam
|
|
################################
|
|
|
|
|
|
def r():
|
|
right(45)
|
|
|
|
def l():
|
|
left(45)
|
|
|
|
def f():
|
|
forward(7.5)
|
|
|
|
snake_rules = {"-":r, "+":l, "f":f, "b":"f+f+f--f--f+f+f"}
|
|
snake_replacementRules = {"b": "b+f+b--f--b+f+b"}
|
|
snake_start = "b--f--b--f"
|
|
|
|
drawing = replace(snake_start, snake_replacementRules, 3)
|
|
|
|
reset()
|
|
speed(3)
|
|
tracer(1,0)
|
|
ht()
|
|
up()
|
|
backward(195)
|
|
down()
|
|
draw(drawing, snake_rules)
|
|
|
|
from time import sleep
|
|
sleep(3)
|
|
|
|
################################
|
|
# Example 2: Anklets of Krishna
|
|
################################
|
|
|
|
def A():
|
|
color("red")
|
|
circle(10,90)
|
|
|
|
def B():
|
|
from math import sqrt
|
|
color("black")
|
|
l = 5/sqrt(2)
|
|
forward(l)
|
|
circle(l, 270)
|
|
forward(l)
|
|
|
|
def F():
|
|
color("green")
|
|
forward(10)
|
|
|
|
krishna_rules = {"a":A, "b":B, "f":F}
|
|
krishna_replacementRules = {"a" : "afbfa", "b" : "afbfbfbfa" }
|
|
krishna_start = "fbfbfbfb"
|
|
|
|
reset()
|
|
speed(0)
|
|
tracer(3,0)
|
|
ht()
|
|
left(45)
|
|
drawing = replace(krishna_start, krishna_replacementRules, 3)
|
|
draw(drawing, krishna_rules)
|
|
tracer(1)
|
|
return "Done!"
|
|
|
|
if __name__=='__main__':
|
|
msg = main()
|
|
print(msg)
|
|
mainloop()
|