@extends('template')
@section('title')
Lab 4, Part 1: Predicates and Functions
@stop
@section('content')
# Lab 4, Part 2: Working with Strings
## How to take apart and put together strings 
It's useful to know how to extract parts of strings. First, let's set
up some string variables (you can type these directly into your
Canopy interactive window -- it's better to type than to copy and
paste because the indentation will generate errors). Or you can copy
them with your mouse and paste them into a file, and then run the
file.
```py
theTruth = 'CS111 rocks my world!'
name = 'Tina Turner'
line1 = 'What\'s love got to do with it' # note the backslash
```
Note: does it matter if you use single quotes (') or double quotes (") in pyt hon around strings? Short answer: no. [Click here for a long explanation.](https://docs.python.org/2/tutorial/introduction.html#strings)
Now, try out these python commands and see what you get:
```py
theTruth[0]
name[0]
name[1:5]
name[8:10]
```
Let's get a little bit tricker with our string examples:
```py
name[-1]
name[-3]
line1[::-1]
line1[len(line1)] # oops. Why error message?
```
Note that we use the built-in python function `len` in the examples above. Here is a list of all the [built-in python functions](https://docs.python.org/2/library/functions.html).
Here are some special python string operators (`in` and `not in`):
```py
'leia' in str2 ==> False
'our' in str2 ==> True
'yoda' not in str2 ==> True
```
---
## Table of some string operations
symbol |
operation |
example |
+ |
concatenation |
str1 = 'I am '
str2 = 'your father '
darth = str1 + str2
yoda = str2 + str1
|
* |
repetition |
'hee'*3 ==> 'heeheehee' |
[] |
slice |
str2[5]==> 'f' |
[:] |
range |
str2[2:5]==> 'ur ' |
in |
in |
'dad' in str2 ==> False
'at' in str2 ==> True |
not in |
not in |
str1 not in str2 ==> True
str1 not in darth ==> False |
## Write some simple string predicates
## Task 2A.
`endsWithA` returns True if the string ends with the letter a; False otherwise. *Hint:* `word[-1]` *gives the last letter of a word, e.g.* `rain[-1]` returns `n`.
Examples:
```py
endsWithA('Lyn') ==> False
endsWithA('Justin') ==> False
endsWithA('Justina') ==> True
endsWithA('Mia') ==> True
endsWithA('ANNA') ==> True
```
## Task 2B.
`hasPop` returns True if the string contains the substring 'pop'
; False otherwise.
Examples:
```py
hasPop('popcorn') ==> True
hasPop('lollipop') ==> True
hasPop('hippopotamus') ==> True
hasPop('poopy') ==> False
```
## Task 2C. Writing simple string functions
Add the functions below to your `lab04.py` file. You may, if you like,
use the built-in Python function `len(s)`, which returns the length of
a string `s`. Copy and paste the function definitions template below
into your `lab04.py` file. You'll need to fill in the missing code to
make sure that your code works correctly. Note
that each function should be just one line of code.
```py
def first(s):
"""returns the first letter of the given string
e.g. first("tahoe") => t"""
# ____________________
# replace the blank line above with your code
def last(s):
"""returns the last letter of the given string
e.g. last("tahoe") => e"""
# ____________________
# replace the blank line above with your code
def sameLength (s1, s2):
"""determines whether strings s1 and s2 have the same length
e.g. sameLength("tahoe","snow") => False
e.g. sameLength("cold","snow") => True"""
# ___________________
# replace the blank line above with your code
def average(a,b):
"""returns the average of two numbers
e.g. average(9,12) => 10.5"""
# ____________________
# replace the blank line above with your code
```
## Task 2D. Writing more complex predicates
In this task, you'll write the following three string predicates (include them in your `lab04.py` file):
1. **`isBookend(s)`**: A string is a bookend if it begins and ends with the same letter. For example, "neon" is a bookend and "cake" is not a bookend.
2. ** `siblings(s1,s2)`**: Two strings are siblings if
* they have the same length and
* they either begin or end with the same letter. For example, "Emily" and "Elise" and siblings; "Tucker" and "Oliver" are siblings, but "Sam" and "Scott" are not and "hi" and "hawaii" are not.
3. **`stringAverage(s1,s2,s3)`**: Checks to see if the middle string has a length that i s the average of the other two strings. For example, "bowling" has a length that is the average of the length of the strings "football" and "soccer".
Write the predicates one at a time, testing each one to convince yourself that it works before moving on to the next one.
@include('/labs/lab04/_toc')
@stop