FIGlet, named after Frank, Ian, and Glen’s letters, is a program from the early 1990s for making large letters out of ordinary text, a form of ASCII art:
_ _ _ _ _ _
| (_) | _____ | |_| |__ (_)___
| | | |/ / _ \ | __| '_ \| / __|
| | | < __/ | |_| | | | \__ \
|_|_|_|\_\___| \__|_| |_|_|___/
Among the fonts supported by FIGlet are those at figlet.org/examples.html.
FIGlet has since been ported to Python as a module called pyfiglet.
In a file called figlet.py
, implement a program that:
- Expects zero or two command-line arguments:
- Zero if the user would like to output text in a random font.
- Two if the user would like to output text in a specific font, in
which case the first of the two should be
-f
or--font
, and the second of the two should be the name of the font.
- Prompts the user for a
str
of text. - Outputs that text in the desired font.
If the user provides two command-line arguments and the first is not
-f
or --font
or the second is not the name of a font, the program
should exit via sys.exit
with an error message.
Hints
-
You can install
pyfiglet
with:pip install pyfiglet
-
The documentation for pyfiglet isn’t very clear, but you can use the module as follows:
from pyfiglet import Figlet figlet = Figlet()
You can then get a
list
of available fonts with code like this:figlet.getFonts()
You can set the font with code like this, wherein
f
is the font’s name as astr
:figlet.setFont(font=f)
And you can output text in that font with code like this, wherein
s
is that text as astr
:print(figlet.renderText(s))
-
Note that the
random
module comes with quite a few functions, per docs.python.org/3/library/random.html.
- Log into cs50.dev using your GitHub account.
- Click inside the terminal window and execute
cd
. - Execute
wget https://cdn.cs50.net/2022/fall/labs/6/figlet.zip
followed by Enter in order to download a zip calledfiglet.zip
in your codespace. Take care not to overlook the space betweenwget
and the following URL, or any other character for that matter! - Now execute
unzip figlet.zip
to create a folder calledfiglet
. - You no longer need the ZIP file, so you can execute
rm figlet.zip
and respond with “y” followed by Enter at the prompt.
Here’s how to test your code manually:
- Run your program with
python figlet.py test
. Your program should exit viasys.exit
and print an error message:Invalid usage
- Run your program with
python figlet.py -a slant
. Your program should exit viasys.exit
and print an error message:Invalid usage
- Run your program with
python figlet.py -f invalid_font
. Your program should exit viasys.exit
and print an error message:Invalid usage
- Run your program with
python figlet.py -f slant
. TypeCS50
. Your program should print the following:___________ __________ / ____/ ___// ____/ __ \ / / \__ \/___ \/ / / / / /___ ___/ /___/ / /_/ / \____//____/_____/\____/
- Run your program with
python figlet.py -f rectangles
. TypeHello, world
. Your program should print the following:_____ _ _ _ _ | | |___| | |___ _ _ _ ___ ___| |_| | | | -_| | | . |_ | | | | . | _| | . | |__|__|___|_|_|___| | |_____|___|_| |_|___| |_|
- Run your program with
python figlet.py -f alphabet
. TypeMoo
. Your program should print the following:M M MM MM M M M ooo ooo M M o o o o M M ooo ooo
You can execute the below to check your code using check50
, a program
that CS50 will use to test your code when you submit. But be sure to
test it yourself as well!
check50 cs50/problems/2022/python/figlet
Green smilies mean your program has passed a test! Red frownies will
indicate your program output something unexpected. Visit the URL that
check50
outputs to see the input check50
handed to your program,
what output it expected, and what output your program actually gave.
No need to submit! This is a practice problem.