Recursive and Iterative Drawing in Python with Turtle

Homework 2

DrawStar(S, N)

Recursion to draw snowflake

python def DrawStar(S, N): """ Recursion to draw snowflake """ if N == 1: pass else: turtle.forward(S/3) DrawStar(S/3, N-1) turtle.forward(-S/3) turtle.left(60) turtle.forward(S/3) DrawStar(S/3, N-1) turtle.forward(-S/3) turtle.left(60) turtle.forward(S/3) DrawStar(S/3, N-1) turtle.forward(-S/3) turtle.left(120) turtle.forward(S/3) DrawStar(S/3, N-1) turtle.forward(-S/3) turtle.left(60) turtle.forward(S/3) DrawStar(S/3, N-1) turtle.forward(-S/3) turtle.left(60)

DrawBase(S, N)

Recursion to draw base of snowflake

python def DrawBase(S, N): """ Recursion to draw base of snowflake """ if N == 0: pass else: turtle.forward(S) DrawStar(S, N) turtle.forward(-S) turtle.left(60) turtle.forward(S) DrawStar(S, N) turtle.forward(-S) turtle.left(60) turtle.forward(S) DrawStar(S, N) turtle.forward(-S) turtle.left(60) turtle.forward(S) DrawStar(S, N) turtle.forward(-S) turtle.left(60) turtle.forward(S) DrawStar(S, N) turtle.forward(-S) turtle.left(60) turtle.forward(S) DrawStar(S, N) turtle.forward(-S) turtle.left(60)

main(S, N)

Main function to run the program and set the turtle speed

python def main(S, N): """ Main function to run the program and set the turtle speed """ turtle.speed('fastest') DrawBase(S, N)""" Calls the main function and asks the user to input the size and depth """ main(int(input('Enter size ')), int(input('Enter depth '))) input('Press enter to finish...')

Homework 3

countWords(textFileName)

python def countWords(textFileName): openfile = open(textFileName, "r") openfile.read() openfile.seek(0) words = 0 for line in openfile: for char in line.strip(): if char == " ": words += 1 words += 1 return words

main()

python def main(): n = countWords(input("Please enter the file name")) print("The number of words in the file is:: " + str(n))main()

Lab 2

init()

This function puts the turtle in the correct starting position and sets it to the fastest speed

  • Pre-Conditions: Turtle starts facing to the right.
  • Post Conditions: Turtle ends facing down.

python def init(): """ This function puts the turtle in the correct starting position and sets it to the fastest speed Pre-Conditions: Turtle starts facing to the right. Post Conditions: Turtle ends facing down. """ turtle.speed('fastest') turtle.right(90)

drawhalfsquare(depth, length)

This function draws half of a square

  • Pre-Conditions: Turtle is facing down
  • Post-Conditions: Turtle is facing up

python def drawhalfsquare(depth, length): """ This function draws half of a square Pre-Conditions: Turtle is facing down Post-Conditions:Turtle is facing up """ turtle.forward(length/2) turtle.left(90) turtle.forward(length) turtle.left(90) turtle.forward(length/2)

inner(depth, length)

This function is a recursion that draws the inner squares

  • Pre-Conditions: The turtle is facing up after the bottom half of of the square is drawn
  • Post-Conditions: The turtle is facing up in the same spot where it started

python def inner(depth, length): """ This function is a recursion that draws the inner squares Pre-Conditions: The turtle is facing up after the bottom half of of the square is drawn Post-Conditions: The turtle is facing up in the same spot where it started """ if depth == 0: pass elif depth >= 1: Color(depth) turtle.left(45) turtle.forward(length/(2*math.sqrt(2))) turtle.left(90) turtle.forward((length/(2*math.sqrt(2)))/2) inner(depth-1, length/(2*math.sqrt(2))) Color(depth) drawhalfsquare(depth, length/(2*math.sqrt(2))) inner(depth-1, length/(2*math.sqrt(2))) Color(depth) turtle.forward((length/(2*math.sqrt(2)))/2) turtle.left(45)

Color(depth)

This function finds out which color needs to be used

python def Color(depth): """ This function finds out which color needs to be used """ if depth % 2 == 0: turtle.color('blue') else: turtle.color('green')

drawsquares(depth, length)

This is a recursion that draws the squares

  • Pre-Conditions: Side of the square facing up
  • Post-Conditions: Same as pre-condition

python def drawsquares(depth, length): """ This is a recursion that draws the squares Pre-Conditions:Side of the square facing up Post-Conditions: Same as pre-condition """ if depth == 0: pass else: Color(depth) drawhalfsquare(depth, length) inner(depth-1, length) Color(depth) drawhalfsquare(depth, length) inner(depth-1, length) Color(depth)

main(depth, length)

This function runs the program

python def main(depth, length): """ This function runs the program """ init() drawsquares(depth, length) input('Please press enter to exit...')main(int(input('Input depth ')), 300)

Lab 3

outsidebox()

Keeps the turtle inside the boundaries

python def outsidebox(): """ Keeps the turtle inside the boundaries """ x, y = turtle.position() if x > 160: turtle.back(35) turtle.right(180) elif x < -160: turtle.back(35) turtle.right(180) if y > 160: turtle.back(35) turtle.right(180) elif y < -160: turtle.back(35) turtle.right(180)

randomdistance()

Randomly decides the distance between triangles

python def randomdistance(): """ Randomly decides the distance between triangles """ d = random.randint(0, MAX_DISTANCE()) turtle.forward(d)

drawfiguresrec(n)

Recursive function to draw arrows

python def drawfiguresrec(n): """ Recursive function to draw arrows """ if n == 0: return 0 elif n >= 0: randomcolor() a = arrow() randomturn() turtle.up() randomdistance() outsidebox() turtle.down() return (a + drawfiguresrec(n-1))

drawfiguresite(n)

Iterative function to draw arrows

python def drawfiguresite(n): """ Iterative function to draw arrows """ a = 0 while n > 0: randomcolor() len = random.randint(0, MAX_SIZE()) turtle.begin_fill() turtle.forward(len) turtle.left(120) turtle.forward(len) turtle.left(120) turtle.forward(len) turtle.left(120) turtle.end_fill() randomturn() turtle.up() randomdistance() outsidebox() turtle.down() a = ((math.sqrt(3)/2)*len + a) n = n - 1 print('The total area is ', a)

numcheck(n)

Checks to see if the iterations are in a valid range

python def numcheck(n): """ Checks to see if the iterations are in a valid range """ if n < 0: print("The number you entered is not in the valid range [0,500]") n = int(input('Enter iterations ')) numcheck(n) elif n > 500: print("The number you entered is not in the valid range [0,500]") n = int(input('Enter iterations ')) numcheck(n) else: pass

main(n)

Main function to run the recursive and iterative

python def main(n): """ Main function to run the recursive and iterative """ numcheck(n) init() BOUNDING_BOX() print("The total area is", (drawfiguresrec(n))) input('Press enter to draw using the iterative function') turtle.reset() init() n = int(input('Enter iterations ')) BOUNDING_BOX() drawfiguresite(n) input('Please press enter to exit...')main(int(input('Enter iterations ')))