In this assignment you’ll practice
You need to do some text processing and decide to write a few utility functions to get started.
Write a module named textutil
with the functions specified below.
doctest
The specification for each function is given as a docstring – which you should include in your code – and the types of arguments and return values are given using type hints documented in PEP 484 – Type Hints.
Because each function will have a docstring that includes usage examples formatted as Python interactive sessions, you can use doctest to test your code using this command line invocation:
python -m doctest -v textutil.py
def long_words(text, n):
"""Return the words in text that are longer than n.
Parameters:
text: str -- the text of interest
Return: Sequence[int] -- words in text that are longer than n
Usage Examples:
>>> long_words('I do not write good', 3)
['write', 'good']
"""
def num_long_words(text, n):
"""Return the number of words in text that are longer than n.
Parameters:
text: str -- the text of interest
Return: int -- the number of words in text that are longer than n
Usage Examples:
>>> num_long_words('I do not write good', 3)
2
"""
def count_if(sequence, predicate):
"""Count the number of elements in sequence that satisfy predicate function.
Parameters:
sequence: Sequence -- a sequence of elements of any type
predicate: Function: Any -> bool -- a function that takes a single parameter and returns a
bool
Usage Examples:
>>> count_if([0, 1, 2, 3, 4], lambda x: x % 2 == 0)
3
>>> count_if(['fe', 'fi', 'fo', 'fum'], lambda s: len(s) > 2)
1
"""
def word_counts(sentence_list):
"""Return a dictionary mapping words in normalized text to their
counts in the text.
Parameters:
sentence_list: List[str] - a list of sentences
Return: a Dict[str, int] whose keys are words and associated values are
the number of times the word appears in the sentences in sentence_list
Usage Examples: (Note technique for testing dict equality.)
>>> word_counts(["i dont even have any skills", "i have numchuk skills \
bow hunting skills computer hacking skills"]) == {'have': 2, 'numchuk': 1, \
'hacking': 1, 'i': 2, 'even': 1, 'computer': 1, 'any': 1, 'bow': 1,\
'hunting': 1, 'dont': 1, 'skills': 4}
True
"""
def make_tups(seq1, seq2):
"""Convert seq1 and seq2 to a list of tuples with corresponding elements of
seq1 and seq2.
Parameters:
seq1: Sequence[Any] -- a sequence of elements of any type
seq2: Sequence[Any] -- a sequence of elements of any type
Return: Sequence[(Any, Any)] - a sequence of 2-tuples where the ith tuples
contain the ith elements of seq1 and seq2. Length of returned list is
length of shortest input seq
Usage Examples:
>>> make_tups(['a', 'b', 'c', 'd'], [1, 2, 3])
[('a', 1), ('b', 2), ('c', 3)]
"""
In addition to running the doctests as described above, you can import your textutil
module in the Python REPL to test your functions as you write and modify them. For example, ssuming you’re in the same directory as your textutil.py
file:
Python 3.6.1 |Continuum Analytics, Inc.| (default, Jul 2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import hw1
>>> hw1.palindrome("a but tuba")
True
After you modify your module you’ll need to restart your Python REPL, or reload it using the importlib
module:
>>> import importlib as imp
>>> imp.reload(textutil)