@extends('template')
@section('title')
Lab 3: Happy Owls
@stop
@section('content')
# Lab 3: Happy Owls
Let's practice some more with functions, parameters, and the bigger picture idea of abstraction.
Open `lab03/drawOwls.py` and examine the given strings:
```py
empty = ' '
lineA = ' {o,o}'
lineB = ' /)_) '
lineC = ' " " '
```
These strings, if printed, produce a simple [ASCII art](https://en.wikipedia.org/wiki/ASCII_art) owl.
## Owl x 1
Partner A
In the `drawOwls.py` file, write a function called `owl` that will print a single owl using the given strings.
```xml
>>> owl()
{o,o}
/)_)
" "
```
__Note: None of the following functions can use these strings again *except* for owlRow.__
## Owl x 2
Partner B
Write a second function called `owlPair` that prints two owls in a column like this:
```xml
>>> owlPair()
{o,o}
/)_)
" "
{o,o}
/)_)
" "
```
## Owl x 4
Write a third function called `owlQuad` that prints four owls in a column like this:
```xml
>>> owlQuad()
{o,o}
/)_)
" "
{o,o}
/)_)
" "
{o,o}
/)_)
" "
{o,o}
/)_)
" "
```
# Owls in rows
Partner A
Write a fourth function called `owlRow` that takes one parameter (`n`) and prints the specified number of owls in a row.
In this function, you __can__ (and will need to) use the predefined strings (eg `empty`, `lineA`, `lineB`, `lineC`) again.
Example 1.
```xml
>>> owlRow(2)
{o,o} {o,o}
/)_) /)_)
" " " "
```
Example 2.
```xml
>>> owlRow(3)
{o,o} {o,o} {o,o}
/)_) /)_) /)_)
" " " " " "
```
Example 3.
```xml
>>> owlRow(5)
{o,o} {o,o} {o,o} {o,o} {o,o}
/)_) /)_) /)_) /)_) /)_)
" " " " " " " " " "
```
@include('/labs/lab03/_toc')
@stop