Practicing Python | Think Python: Case study: interface design – Exercise 4.3

Below are my solutions for the exercises 4.3


Code

# Think Python: Exercise 4.3
import turtle
import math
'''
Write a function called square that takes a parameter named t, which is a turtle. It
should use the turtle to draw a square.
'''
'''
Write a function call that passes bob as an argument to square, and then run the
program again.
'''


def square(t):
    if(isinstance(t, turtle.Turtle) == False):
        return
    t.showturtle()
    for i in range(4):
        t.fd(100)
        t.lt(90)
    return


'''
Add another parameter, named length, to square. Modify the body so length of the
sides is length, and then modify the function call to provide a second argument. Run
the program again. Test your program with a range of values for length.
'''


def square(t, length):
    if(isinstance(t, turtle.Turtle) == False):
        return
    t.showturtle()
    for i in range(4):
        t.fd(length)
        t.lt(90)
    return


'''
Make a copy of square and change the name to polygon. Add another parameter
named n and modify the body so it draws an n-sided regular polygon. Hint: The
exterior angles of an n-sided regular polygon are 360/n degrees.
'''


def polygon(t, length, n, m=None):
    if(isinstance(t, turtle.Turtle) == False):
        return
    if(m is None):
        m = n
    t.showturtle()
    for i in range(1, m + 1):
        t.fd(length)
        t.lt(360 / n)
    turtle.mainloop()
    return


'''
Write a function called circle that takes a turtle, t, and radius, r, as parameters and
that draws an approximate circle by calling polygon with an appropriate length and
number of sides. Test your function with a range of values of r.
Hint: figure out the circumference of the circle and make sure that length * n =
circumference.
'''


def circle(t, radius, angle=360):
    if(float(radius) == "NaN"):
        return
    circumference = 2 * math.pi * radius
    length = circumference / angle
    n = 360
    polygon(t, length, n, angle)


# last exercise 4 today
'''
Make a more general version of circle called arc that takes an additional parameter
angle, which determines what fraction of a circle to draw. angle is in units of degrees,
so when angle=360, arc should draw a complete circle.
'''


def arc(t, radius, angle=360):
    circle(t, radius, angle)


arc(turtle.Turtle(), 50, 180)