Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
import turtle
def lsystem_no_color():
global lsystem_string
global lsystem_rules
global lsystem_length
global lsystem_angle
global lsystem_iterations
x_positions = []
y_positions = []
position_list = []
def push():
global position_list
position_list.append((turtle.position(), turtle.heading()))
def pull():
global position_list
position, heading = position_list.pop()
turtle.up()
turtle.goto(position)
turtle.setheading(heading)
turtle.down()
turtle.up()
for _ in range(lsystem_iterations):
result = ""
for letter in lsystem_string:
replacement = ""
for rule in lsystem_rules:
if letter == rule[0]:
replacement = rule[1]
if replacement == "":
result = result + letter
else:
result = result + replacement
lsystem_string = result
turtle.up()
turtle.tracer(False)
for letter in lsystem_string:
if letter == "F" or letter == "A" or letter == "B" or letter == "C" or
letter == "D" or letter == "E":
turtle.up()
turtle.forward(lsystem_length)
x_positions.append(turtle.xcor())
y_positions.append(turtle.ycor())
turtle.update()
x_positions.sort()
y_positions.sort()
length = x_positions[-1] - x_positions[0]
height = y_positions[-1] - y_positions[0]
x = 0 - ((x_positions[0] + x_positions[-1])/2)
y = 0 - ((y_positions[0] + y_positions[-1])/2)
turtle.up()
turtle.home()
else:
if length > height:
distance = lsystem_length * (500/length)
if length < height:
distance = lsystem_length * (500/height)
if length == height:
distance = lsystem_length * (500/height)
x_position = []
y_position = []
turtle.tracer(False)
for letter in lsystem_string:
if letter == "F" or letter == "A" or letter == "B" or letter == "C" or
letter == "D" or letter == "E":
turtle.up()
turtle.forward(distance)
else:
letter = int(letter)
turtle.pencolor(lsystem_colours[letter])
x_position.append(turtle.xcor())
y_position.append(turtle.ycor())
turtle.update()
x_position.sort()
y_position.sort()
length = x_position[-1] - x_position[0]
height = y_position[-1] - y_position[0]
x = 0 - ((x_position[0] + x_position[-1])/2)
y = 0 - ((y_position[0] + y_position[-1])/2)
turtle.up()
turtle.home()
turtle.goto(x,y)
turtle.down()
turtle.tracer(False)
for letter in lsystem_string:
if letter == "F" or letter == "A" or letter == "B" or letter == "C" or
letter == "D" or letter == "E":
turtle.forward(distance)
elif letter == "+":
turtle.left(lsystem_angle)
else:
letter = int(letter)
turtle.pencolor(lsystem_colours[letter])
turtle.update()
def lsystem_with_color():
global lsystem_string
global lsystem_rules
global lsystem_length
global lsystem_angle
global lsystem_iterations
global lsystem_colors
x_positions = []
y_positions = []
position_list = []
def push():
global position_list
position_list.append((turtle.position(), turtle.heading()))
def pull():
global position_list
position, heading = position_list.pop()
turtle.up()
turtle.goto(position)
turtle.setheading(heading)
turtle.down()
turtle.up()
for _ in range(lsystem_iterations):
result = ""
for letter in lsystem_string:
replacement = ""
for rule in lsystem_rules:
if letter == rule[0]:
replacement = rule[1]
if replacement == "":
result = result + letter
else:
result = result + replacement
lsystem_string = result
turtle.up()
turtle.tracer(False)
for letter in lsystem_string:
if letter == "F" or letter == "A" or letter == "B" or letter == "C" or
letter == "D" or letter == "E":
turtle.up()
turtle.forward(lsystem_length)
x_positions.append(turtle.xcor())
y_positions.append(turtle.ycor())
turtle.update()
x_positions.sort()
y_positions.sort()
length = x_positions[-1] - x_positions[0]
height = y_positions[-1] - y_positions[0]
x = 0 - ((x_positions[0] + x_positions[-1])/2)
y = 0 - ((y_positions[0] + y_positions[-1])/2)
turtle.up()
turtle.home()
else:
if length > height:
distance = lsystem_length * (500/length)
if length < height:
distance = lsystem_length * (500/height)
if length == height:
distance = lsystem_length * (500/height)
x_position = []
y_position = []
turtle.tracer(False)
for letter in lsystem_string:
if letter == "F" or letter == "A" or letter == "B" or letter == "C" or
letter == "D" or letter == "E":
turtle.up()
turtle.forward(distance)
else:
letter = int(letter)
turtle.pencolor(lsystem_colours[letter])
x_position.append(turtle.xcor())
y_position.append(turtle.ycor())
turtle.update()
x_position.sort()
y_position.sort()
length = x_position[-1] - x_position[0]
height = y_position[-1] - y_position[0]
x = 0 - ((x_position[0] + x_position[-1])/2)
y = 0 - ((y_position[0] + y_position[-1])/2)
turtle.up()
turtle.home()
turtle.goto(x,y)
turtle.down()
turtle.tracer(False)
for letter in lsystem_string:
if letter == "F" or letter == "A" or letter == "B" or letter == "C" or
letter == "D" or letter == "E":
turtle.forward(distance)
turtle.update()
else:
y = input("Please enter the y location: ")
x = int(x)
y = int(y)
turtle.up()
turtle.goto(x, y)
turtle.down()
else:
x = int(x)
y = input("Please enter the y location: ")
y = int(y)
turtle.goto(x, y) # Move the turtle and draw a line
else:
width = int(width)
length = input("Enter the length of the rectangle: ")
length = int(length)
direction = input("Rectangle to be drawn 'clockwise' of
'anticlockwise': ")
else:
radius = int(radius)
angle_of_rotation = input("What is the angle of the circle: ")
angle_of_rotation = int(angle_of_rotation)
direction = input("draw the circle \"anticlockwise\" or \"clockwise\":
")
else:
turtle.circle(radius, angle_of_rotation)
else:
lsystem_string = input("What is your initial string: ")
lsystem_angle = input("What is the angle: ")
lsystem_iterations = input("How many iterations do you want: ")
lsystem_iterations = int(lsystem_iterations)
number = input("How many rules do you have in total: ")
number = int(number)
lsystem_rules = []
for _ in range(number):
rule = []
rule.append(input("What do you want to replace the letter with: "))
rule.append(input("What is the rule for that letter: "))
lsystem_rules.append(rule)
if decision == "yes":
number1 = input("How many colours do you want to include: ")
number1 = int(number1)
lsystem_colours = []
for _ in range(number1):
colour = ""
lsystem_colours.append(input("What colour do you want to
include (one at a time)"))
lsystem_with_color()
if decision == "no":
lsystem_with_color()
#
# Please put your code here
#
turtle.done()