@extends('template')
@section('title')
Lab 4, Part 1: Predicates and Functions
@stop
@section('content')
# Lab 4, Part 1: Predicates and Functions
Predicates are functions that return a boolean value (True or False).
In this part of lab, you'll practice writing predicate functions.
Create a new file called `lab04.py`. Add your name and your partner's name at the top of the file in comments.
## Predicate practice: write a predicate for each of the following tasks.
## Task 1A.
Partner A
`isLegal` returns True if the provided age greater or equal to 21; False otherwise.
Examples:
```py
isLegal(19) ==> False
isLegal(25) ==> True
isLegal(21) ==> True
```
Invent your own test cases:
```py
# isLegal(??) ==> True
# isLegal(??) ==> False
# What happens when ?? is a string?
```
## Task 1B.
`isJustin` returns True if the provided name is Justin; False otherwise.
Examples:
```py
isJustin('Lyn') ==> False
isJustin('Justin') ==> True
isJustin('Bieber') ==> False
```
Invent your own test cases:
```py
# isJustin(??) ==> True
# isJustin(??) ==> False
# Does case matter with your function? Should it?
```
## Task 1C.
`notJustinAndLegal` returns True if the provided name is NOT Justin and the age is greater than or equal to 21; False otherwise. Hint: use the two predicates above in this one.
Examples:
```py
notJustinAndLegal('Lyn', 35) ==> True
notJustinAndLegal('Justin', 21) ==> False
notJustinAndLegal('Malia', 19) ==> False
```
Invent your own test cases:
```py
# notJustinAndLegal(??,??) ==> True
# notJustinAndLegal(??,??) ==> False
# Does order of inputs matter?
```
## Task 1D.
Partner B
`atLeastDouble` returns True if the second number is at least twice as large as the first number; False otherwise.
Examples:
```py
atLeastDouble(5,9) ==> False
atLeastDouble(5,10) ==> True
atLeastDouble(5,15) ==> True
```
Invent your own test cases:
```py
# atLeastDouble(??,??) ==> True
# atLeastDouble(??,??) ==> False
```
## Task 1E.
`inOrder` returns True if the three numbers are provided in strictly increasing order; False otherwise.
Examples:
```py
inOrder(1, 2, 3) ==> True
inOrder(1, 2, 2) ==> False # 2 is not greater than 2
inOrder(2, 4, 6) ==> True
inOrder(-3, -2, -1) ==> True
```
Invent your own test cases (more than one test case for True and False):
```py
# inOrder(??,??,??) ==> True
# inOrder(??,??,??) ==> True
# inOrder(??,??,??) ==> False
# inOrder(??,??,??) ==> False
# What if all numbers are the same?
```
## Task 1F.
`upOrDownOrder` returns True if the three numbers are provided in strictly increasing order or strictly decreasing order; False otherwise.
Examples:
```py
upOrDownOrder(1, 2, 3) ==> True
upOrDownOrder(1, 2, 2) ==> False # 2 is not greater than 2
upOrDownOrder(3, 2, 1) ==> True
upOrDownOrder(-3, 0, -1) ==> False
```
Invent your own test cases (more than one test case for True and False):
```py
# upOrDownOrder(??,??,??) ==> True
# upOrDownOrder(??,??,??) ==> True
# upOrDownOrder(??,??,??) ==> False
# upOrDownOrder(??,??,??) ==> False
```
## Task 1G.
Partner A
`isQuint` returns True if the provided residence hall is Beebe, Cazenove, Shafer, Munger or Pomeroy; otherwise returns False.
Examples:
```py
isQuint('Tower') ==> False
isQuint('Munger') ==> True
isQuint('Shafer') ==> True
isQuint('Cazenove') ==> True
isQuint('Stone') ==> False
```
Invent your own test cases (more than one test case for True and False):
```py
# isQuint(??) ==> True
# isQuint(??) ==> False
# What happens if ?? is a number?
# Does case matter here? Should it?
```
@include('/labs/lab04/_toc')
@stop