At My Fingertips

Documentation

Ladybug

Abstraction

Have a look at these five graphics:

ladybirds

Yes, they are similar because they all are ladybugs. Each ladybug has two red wings, a black head, and a black body. Each wing consists of a red semicircle containing three black dots, and the head includes two eyes.

The difference is the angle between the wings.

Let's create a function to create a ladybug. The function takes the wing angle as a parameter.

def ladybug(wing_angle: float) -> Graphic:

Let's also make it possible to create a ladybug of an arbitrary size by adding another parameter for the diameter.

ladybug sizes

def ladybug(diameter: float, wing_angle: float) -> Graphic:

Decomposition

A ladybug is basically made up of four components: a head, a body, and two wings.

decomposed

Body

The simplest part is the body. It's simply a black circle.

Loading...

Head

The head can be further decomposed: it consists of the black circle and two eyes. Each eye consists of a black circle inside a white circle. Let's create separate functions to create the specific components.

The pupil diameter should be 0.6 of the eye diameter.

Loading...

The eye diameter should be 0.35 of the head diameter.

Loading...

Wing

Let's first focus on an individual wing:

wing

The dot diameter should be 0.35 times the wing radius.

Hint: Compose the dots by creating two rows: the top row contains two dots, and a dot-sized gap in-between, the bottom row contains a single dot.

Loading...

Now let's compose two wings, with a desired angle between them.

wings wings pin

The wing_angle specifies the rotation angle of an individual wing; the angle between the two wings is twice that.

Hint: Pin the top wing at its bottom left, and the bottom wing at its top left. Then rotate each wing by +/- the given angle. Then compose the two wings. Use compose for that, so the pinning position of the composition remains at the hinge between the two wings.

Loading...

Final Assembly

Let's compose the components into a complete ladybug!

Call the head, body, and wings functions to produce the corresponding parts. The ladybug diameter corresponds to the diameter of its body. The head diameter is half the ladybug diameter, and the wing radius is half the ladybug diameter, too.

Loading...

What You Learned

You practiced decomposition by breaking down the problem into multiple functions, and you practiced abstraction, because the functions have parameters and thus a function can produce an entire family of similar graphics.


This activity has been created by LuCE Research Lab and is licensed under CC BY-SA 4.0.

Ladybug

Logo of PyTamaro

PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI

Privacy PolicyPlatform Version e1c4550 (Sun, 23 Feb 2025 15:42:54 GMT)