This task is part of project06 which is due at 23:00 EST on 2023-03-09.

You have the option to work with a partner on this task if you wish. Working with a partner requires more work to coordinate schedules, but if you work together and make sure that you are both understanding the code you write, you will make progress faster and learn more.

You can download the starter code for this task using this link.

You can submit this task using this link.

Put all of your work for this task into the file
`circles.py`

(you will create this file from scratch)

**This project is very similar the scales task which uses
wavesynth to generate audio instead of turtle to make pictures. You
only have to do one of the two (but you must do audioToolkit).**

In this task you will define the following functions:

`concentricCircles`

`multicolorCircles`

`circleDesign`

Your `circles.py`

file should begin with this header, which you should
paste into the file and fill out (as usual, each function you write must
be documented):

```
"""
Authors:
Consulted:
Date:
Purpose: CS 111 circles task: draws concentric circles in alternating
colors.
"""
```

`turtle`

and `turtleBeads`

by putting the
following lines at the beginning of your code (import `turtleBeads`

first
so that the `beLoud`

print statements will work correctly):
```
from turtleBeads import *
from turtle import *
```

`concentricCircles`

In this subtask, your goal is to generate pictures like those shown in
these examples for `concentricCircles`

,
consisting of multiple concentric circles of alternating colors that form
a bullseye pattern.

Define the `concentricCircles`

function such that:

- It draws a series of concentric circles, where the first parameter specifies the radius of the outermost circle, and the second parameter specifies the number of circles to draw.
- The third and fourth parameters specify an outer color and an other color, respectively. The outer color is used for the largest (i.e., outermost) circle, and then every other circle in from the edge alternates between that color and the 'other' color.
- The difference between the radii of subsequent circles is always the same, and this difference is also equal to the radius of the smallest circle. Put another way: the distance between the inside and outside of each ring is the same.

- Read the rules above carefully, to determine how to calculate the radius of the largest and smallest circles, as well as every radius in between.
- The "outer" color is always used to color the outermost circle.
- You must use either a
`for`

loop or a`while`

loop to draw the circles. - The order in which the circles are drawn matters, because whatever is drawn later covers stuff drawn earlier.
- For this function, we recommend that you create an iteration table (see the lecture on list processing patterns) to plan out your strategy for solving it.
- You
**must**use the`turtleBeads`

`drawDot`

function (reference for`drawDot`

) to draw your circles, rather than using the`turtle`

`circle`

function or the`turtleBeads`

`drawCircle`

function, because we will grade based on whether your calls to`drawDot`

are correct.`drawDot`

works just like`drawCircle`

, except that it is much faster, the circle it draws is always filled in, and it uses the pen color, not the fill color (this also means you don't need to call`begin_fill`

and`end_fill`

).

You can test your `concentricCircles`

function by executing the example
code in the shell. We recommend using `noTrace`

beforehand and
`showPicture`

afterwards to speed things up. We have also supplied a
`test_circles.py`

file which draws four circles and uses `optimism`

to
check that the printed output is correct.

`multicolorCircles`

For this part, you will create a `multicolorCircles`

function which uses a
(possibly nested) loop to draw concentric circles using an arbitrary
number of colors. These
`multicolorCircles`

examples show how it
should work.

`multicolorCircles`

must accept 3 parameters:

- A base radius, which will be the radius of the smallest circle, and which is also the difference between the radii of each pair of successively larger circles.
- A list of strings indicating colors to use in succession, starting from the outermost circle.
- A positive integer specifying the number of cycles to complete, where a single cycle involves using each color from the list of colors once.

- Because each cycle uses every color from the list, the total number of circles will be equal to the length of the colors list times the number of cycles. You may assume that the cycles argument will always be an integer, which implies that every multicolored circle pattern will have one or more complete copies of the color cycle, never partial copies.
- Whereas for
`concentricCircles`

you were given the outermost radius as an argument, in`multicolorCircles`

you are given the innermost radius. This value is also the difference between the radii of each successive circle, so for example, if the value was 10 and there were 3 circles, their radii would be 10, 20, and 30. - You may use either a single loop or two nested loops to solve this
problem. There are multiple viable approaches. The
`*`

operator for lists is one approach, and using the`%`

operator in an index loop is another possibility. - Aw with
`concentricCircles`

, you**must**use the`turtleBeads`

`drawDot`

function to draw your circles, rather than using the`turtle`

`circle`

function or the`turtleBeads`

`drawCircle`

function, because we will grade based on whether your calls to`drawDot`

are correct.

`circleDesign`

For this last part, get creative. Make a function named
`circleDesign`

with zero parameters
which uses `concentricCircles`

and/or
`multicolorCircles`

within some kind of loop, to
create a custom design. This example design
gives a taste of the kinds of things you could do.

The only requirements are that:

- Your function has no parameters.
- Your function doesn't crash or enter an infinite loop.
- It contains a loop, and inside of that loop it calls
`concentricCircles`

and/or`multicolorCircles`

.

You can have it draw whatever design you wish to create, we are not grading based on what gets drawn.

`concentricCircles`

examples

These examples show what should be drawn when `concentricCircles`

is called. Note that the turtle does not need to move from the starting position at all. Also note that the printed output rounds of the radii to make them easier to read, but the actual radii are not rounded; you should NOT use the 'round' function in your code.

In []:Prints`concentricCircles(60, 3, 'HotPink', 'LightSkyBlue1')`

A HotPink dot at (0, 0) with radius 60 A LightSkyBlue1 dot at (0, 0) with radius 40 A HotPink dot at (0, 0) with radius 20Image In []:Prints`concentricCircles(190, 4, 'LightSalmon2', 'Khaki1')`

A LightSalmon2 dot at (0, 0) with radius 190 A Khaki1 dot at (0, 0) with radius 142 A LightSalmon2 dot at (0, 0) with radius 95 A Khaki1 dot at (0, 0) with radius 48Image In []:Prints`concentricCircles(140, 7, 'Gold', 'DeepSkyBlue')`

A Gold dot at (0, 0) with radius 140 A DeepSkyBlue dot at (0, 0) with radius 120 A Gold dot at (0, 0) with radius 100 A DeepSkyBlue dot at (0, 0) with radius 80 A Gold dot at (0, 0) with radius 60 A DeepSkyBlue dot at (0, 0) with radius 40 A Gold dot at (0, 0) with radius 20Image

`multicolorCircles`

examples

These examples show what should be drawn when `multicolorCircles`

is called. Note that the turtle does not need to move from the starting position at all. Also note that the printed output rounds of the radii to make them easier to read, but the actual radii are not rounded; you should NOT use the 'round' function in your code.

In []:Prints`multicolorCircles(16, ['black', 'blue', 'red', 'yellow'], 1)`

A black dot at (0, 0) with radius 64 A blue dot at (0, 0) with radius 48 A red dot at (0, 0) with radius 32 A yellow dot at (0, 0) with radius 16Image In []:Prints`multicolorCircles( 12, ['red', 'orange', 'yellow', 'green', 'blue', 'navy', 'purple3'], 2 )`

A red dot at (0, 0) with radius 168 A orange dot at (0, 0) with radius 156 A yellow dot at (0, 0) with radius 144 A green dot at (0, 0) with radius 132 A blue dot at (0, 0) with radius 120 A navy dot at (0, 0) with radius 108 A purple3 dot at (0, 0) with radius 96 A red dot at (0, 0) with radius 84 A orange dot at (0, 0) with radius 72 A yellow dot at (0, 0) with radius 60 A green dot at (0, 0) with radius 48 A blue dot at (0, 0) with radius 36 A navy dot at (0, 0) with radius 24 A purple3 dot at (0, 0) with radius 12Image In []:Prints`multicolorCircles(4, ['Aquamarine2', 'Khaki2', 'LimeGreen'], 12)`

A Aquamarine2 dot at (0, 0) with radius 144 A Khaki2 dot at (0, 0) with radius 140 A LimeGreen dot at (0, 0) with radius 136 A Aquamarine2 dot at (0, 0) with radius 132 A Khaki2 dot at (0, 0) with radius 128 A LimeGreen dot at (0, 0) with radius 124 A Aquamarine2 dot at (0, 0) with radius 120 A Khaki2 dot at (0, 0) with radius 116 A LimeGreen dot at (0, 0) with radius 112 A Aquamarine2 dot at (0, 0) with radius 108 A Khaki2 dot at (0, 0) with radius 104 A LimeGreen dot at (0, 0) with radius 100 A Aquamarine2 dot at (0, 0) with radius 96 A Khaki2 dot at (0, 0) with radius 92 A LimeGreen dot at (0, 0) with radius 88 A Aquamarine2 dot at (0, 0) with radius 84 A Khaki2 dot at (0, 0) with radius 80 A LimeGreen dot at (0, 0) with radius 76 A Aquamarine2 dot at (0, 0) with radius 72 A Khaki2 dot at (0, 0) with radius 68 A LimeGreen dot at (0, 0) with radius 64 A Aquamarine2 dot at (0, 0) with radius 60 A Khaki2 dot at (0, 0) with radius 56 A LimeGreen dot at (0, 0) with radius 52 A Aquamarine2 dot at (0, 0) with radius 48 A Khaki2 dot at (0, 0) with radius 44 A LimeGreen dot at (0, 0) with radius 40 A Aquamarine2 dot at (0, 0) with radius 36 A Khaki2 dot at (0, 0) with radius 32 A LimeGreen dot at (0, 0) with radius 28 A Aquamarine2 dot at (0, 0) with radius 24 A Khaki2 dot at (0, 0) with radius 20 A LimeGreen dot at (0, 0) with radius 16 A Aquamarine2 dot at (0, 0) with radius 12 A Khaki2 dot at (0, 0) with radius 8 A LimeGreen dot at (0, 0) with radius 4Image

`circleDesign`

example

This example shows one kind of design you could create out of concentric circles for the `circleDesign`

function. Note that the function must not have any parameters, but beyond testing that it doesn't crash, we don't care exactly what it draws, so you DO NOT have to create this exact pattern.

In []:Prints`circleDesign()`

A pattern of overlapping bullseyes arranged to look like scales. Each bullseye has 6 rings, colored red, orange, and yellow, and then again red, orange, and yellow, from the outermost to innermost. This creates a bright, almost glowing color to the whole image. The bullseyes are arranged in alternating rows of 6 or 7, where each bullseye touches the edge of the next along a row. The rows of 6 are offset by the radius of one bullseye to the right and above the rows of 7, and the rows of 7 are offset from each other so that their bullseyes touch at the top and bottom edges. Since higher-up rows are drawn on top of lower-down rows, except at the edges of the pattern each circle has its upper-left and upper-right parts covered by circles above it, while its lower half is completely visible, similar to how scales of a fish or reptile overlap.Image

Group goals:
unknown
All functions are documented
unknown
unknown
unknown
unknown
unknown
unknown
unknown
unknown
Define
unknown
Use any kind of loop
unknown
Call
unknown
Call
unknown
Define
unknown
Use any kind of loop
unknown
Call
unknown
Call
unknown
Define
unknown
Use any kind of loop
unknown
Call

Each function you define must include a non-empty documentation string as the very first thing in the function.

`concentricCircles`

must make the correct number of calls to `drawDot`

Your

`concentricCircles`

function must call `drawDot`

the correct number of times.`concentricCircles`

must make the correct function calls
Your

`concentricCircles`

function must call the `drawDot`

function in the correct order, with the correct arguments, while the correct position and pen_color values are set up`multicolorCircles`

must make the correct number of calls to `drawDot`

Your

`multicolorCircles`

function must call `drawDot`

the correct number of times.`multicolorCircles`

must make the correct function calls
Your

`multicolorCircles`

function must call the `drawDot`

function in the correct order, with the correct arguments, while the correct position and pen_color values are set up`circleDesign`

must not crash
Your

`circleDesign`

function must run without crashing.`concentricCircles`

must draw the correct image
The image drawn in the turtle window after

`concentricCircles`

is called must match the solution image.`multicolorCircles`

must draw the correct image
The image drawn in the turtle window after

`multicolorCircles`

is called must match the solution image.`concentricCircles`

with 4 parameters
Use

`def`

to define `concentricCircles`

with 4 parametersWithin the definition of

`concentricCircles`

with 4 parameters, use any kind of loop in at least one place.`color`

Within the loop within the definition of

`concentricCircles`

with 4 parameters, call `color`

, `pencolor`

, or `penColor`

in at least one place.`drawDot`

Within the loop within the definition of

`concentricCircles`

with 4 parameters, call `drawDot`

in at least one place.`multicolorCircles`

with 3 parameters
Use

`def`

to define `multicolorCircles`

with 3 parametersWithin the definition of

`multicolorCircles`

with 3 parameters, use any kind of loop in at least one place.`color`

Within the loop within the definition of

`multicolorCircles`

with 3 parameters, call `color`

, `pencolor`

, or `penColor`

in at least one place.`drawDot`

Within the loop within the definition of

`multicolorCircles`

with 3 parameters, call `drawDot`

in at least one place.`circleDesign`

with 0 parameters
Use

`def`

to define `circleDesign`

with 0 parametersWithin the definition of

`circleDesign`

with 0 parameters, use any kind of loop in at least one place.`concentricCircles`

Within the loop within the definition of

`circleDesign`

with 0 parameters, call `concentricCircles`

or `multicolorCircles`

in at least one place.