X Tutup
Skip to content

Latest commit

 

History

History
 
 

Gashlycrumb

https://www.youtube.com/playlist?list=PLhOuww6rJJNMxWy34-9jlD2ulZxaA7mxV

Write a program that prints the line from a file starting with a given letter:

$ ./gashlycrumb.py a
A is for Amy who fell down the stairs.

By default, the -f or --file should use the included gashlycrumb.txt file, but can be overridden:

$ ./gashlycrumb.py a -f alternate.txt
A is for Alfred, poisoned to death.

The structure of the file is such:

$ head alternate.txt
A is for Alfred, poisoned to death.
B is for Bertrand, consumed by meth.
C is for Cornell, who ate some glass.
D is for Donald, who died from gas.
E is for Edward, hanged by the neck.
F is for Freddy, crushed in a wreck.
G is for Geoffrey, who slit his wrist.
H is for Henry, who's neck got a twist.
I is for Ingrid, who tripped down a stair.
J is for Jered, who fell off a chair.

The program should accept one or more letters as positional arguments, printing each line or a message that the given argument is not present in the file:

$ ./gashlycrumb.py x 4 z -f alternate.txt
X is for Xavier, stuck through with a prong.
I do not know "4".
Z is for Zora, smothered by a fleece.

If given no arguments, it should print a brief usage:

$ ./gashlycrumb.py
usage: gashlycrumb.py [-h] [-f FILE] letter [letter ...]
gashlycrumb.py: error: the following arguments are required: letter

Or a longer usage for -h or --help:

$ ./gashlycrumb.py -h
usage: gashlycrumb.py [-h] [-f FILE] letter [letter ...]

Gashlycrumb

positional arguments:
  letter                Letter(s)

optional arguments:
  -h, --help            show this help message and exit
  -f FILE, --file FILE  Input file (default: gashlycrumb.txt)

The program should reject a bad --file argument:

$ ./gashlycrumb.py -f alskdf
usage: gashlycrumb.py [-h] [-f str] str [str ...]
gashlycrumb.py: error: argument -f/--file: can't open 'alskdf': \
[Errno 2] No such file or directory: 'alskdf'

Run the test suite to ensure your program is correct:

$ make test
pytest -xv test.py
============================= test session starts ==============================
...
collected 8 items

test.py::test_exists PASSED                                              [ 12%]
test.py::test_usage PASSED                                               [ 25%]
test.py::test_bad_file PASSED                                            [ 37%]
test.py::test_a PASSED                                                   [ 50%]
test.py::test_b_c PASSED                                                 [ 62%]
test.py::test_y PASSED                                                   [ 75%]
test.py::test_o_alternate PASSED                                         [ 87%]
test.py::test_bad_letter PASSED                                          [100%]

============================== 8 passed in 0.50s ===============================
X Tutup