Python is language built around clarity, expressiveness, and all around general utility. It is often recommended as a language for beginners, but is equally useful to experienced developers in creating scripts, gluing together large systems, building web sites, and analyzing data.
To get started, watch the Python slidecast (~45 minutes) introducing the Python programming language. The slidecast describes the following language features using short, interactive code samples:
- Syntax on slide 4 (~3 minutes)
- Rich Types on slide 5 (~2 minutes)
- Classical Inheritence on slide 6 (~5 minutes)
- Generators on slide 7 (~3 minutes)
- Comprehensions on slide 8 (~6 minutes)
- Keyword Arguments on slide 9 (~4 minutes)
- Variadic Functions on slide 10 (~3 minutes)
- Working with Python on slide 13 (~9 minutes)
Now Watch the Python Ecosystem slidecast (~45 minutes) which sows how to find and install libraries that can save you time in building more advanced Python applications. The slidecast includes demos of the following:
If time permits, review these additional pages:
- Skim the Python Wikipedia article (~10 minutes).
- Read Python Enhacement Proposal (PEP) #20: The Zen of Python (5 minutes).
- Read The Basics at learnpython.org and try a few of the exercises (~30 minutes).
- Read the pip package manager Wikipedia article (5 minutes).
- Read the virtualenv front page (~10 minutes).
You will need to complete the Setting Up instructions before you proceed with these exercises. Once you are set up, SSH into tottbox using the
vagrant ssh command from the setup instructions. Then tackle the problems below. Document what you find in a gist and share it with the TotT community later.
7.3.1. Guess a number¶
Write a Python guessing game that picks a random, secret number between 1 and 100, lets the user take up to 5 guesses, and states if the secret number is equal to, higher, lower than a guess. Read input from stdin and print to stdout.
7.3.2. Run python -m¶
Run the following command at the prompt.
python -m SimpleHTTPServer
What does it output? What is SimpleHTTPServer? Where does it live? What does the
-m command line flag do? Document what you discover.
7.3.3. Compare pip and npm¶
npm similar? Different? What about
virtualenv? Write down your observations.
7.3.4. Resize images¶
Pillow is an image manipulation library for Python.
Create a virtualenv and use
pip to install Pillow. Write a Python script that uses Pillow to resize all of the images in a directory. Let the user specify the name of the input directory, name of the output directory, and desired width or height of the resulting images on the command line. Maintain the aspect ratio of each image processed. (Hint: Look into the
argparse packages for Python to help with command line parsing.)
7.3.5. Bottle it up¶
Bottle is a web microframework for Python. (It’s a single .py file!)
pip to install Bottle into the same virtualenv you created for the image resize utility. Then define a web service API for your image resize utility. Support upload of images in common formats and specification of the desired width or height while maintaining aspect. For example, I might access your completed service using
curl like so:
curl -X POST -d @myimage.png http://example.com/resize?width=250 --header "Content-Type:image/png"
7.3.6. Show HackerNews¶
HackerNews is a social new web site for geeks. The site has a web API for hackers to, well, hack.
pip to install the thekarangoel/HackerNewsAPI, a Python library simplifying access to the HN API. Use it to write a command line tool that can print the top N front page items or newly posted items where the user can specify N.
Add more options to your command line tool as it suits your fancy (e.g., show comments for a given news story and pipe to less for navigation.)
7.3.7. Spoon the Web soup¶
BeautifulSoup makes it easy to parse messy HTML markup. It’s very useful in screen scraping applications.
Find a public web page of interest to you that provides no clean web API (e.g., http://durhamnc.gov/Pages/NNList.aspx). Using BeautifulSoup, scrape the page for notices. Compare what you extract on the current run to the last run, and notify the user of any differences.
Think about how you might make your site checker run on an interval and notify the user of changes unobstrusively.
7.3.8. Mechanize the web¶
Mechanize library using
pip. What does it do? How might it be useful? Build something using it. (Hint: A CLI for your favorite search engine?)
7.3.9. Explore PyPI¶
The Python Package Index (PyPI) is host to quite a few libraries. Browse through it. Get a feel for what exists. Pick one or more libraries that interests. Write an example application demonstrating what they do. Write up a little blog post explaining how to use it. Share it with the world.
If you want to try your hand at something larger than an exercise, consider one of the following.
7.4.1. Create The Daily Dose¶
Create a web application that generates spoken summaries of select web sites for users to download for offline listening, say during a commute, while working out, on a bike ride, etc. Allow users to pick what sites they would like included in their summary and in what order.
Don’t worry about user customization initially. Offer each visiting user the list of sources, allow him or her to pick and order, generate the summary (perhaps cached on an interval), and offer a link to download it.
Choose a web framework, text-to-speech library, and new sources to support. (Hint: HackerNews please.) Also consider if a text summarizer like sumy would help, depending on the types of sites and pages you choose to summarize.