.. _tut-whatnow:

*********
What Now?
*********

Reading this tutorial has probably reinforced your interest in using Python ---
you should be eager to apply Python to solving your real-world problems. Where
should you go to learn more?

This tutorial is part of Python's documentation set.   Some other documents in
the set are:

* :ref:`library-index`:

  You should browse through this manual, which gives complete (though terse)
  reference material about types, functions, and the modules in the standard
  library.  The standard Python distribution includes a *lot* of additional code.
  There are modules to read Unix mailboxes, retrieve documents via HTTP, generate
  random numbers, parse command-line options, compress data,
  and many other tasks. Skimming through the Library Reference will give you an
  idea of what's available.

* :ref:`installing-index` explains how to install additional modules written
  by other Python users.

* :ref:`reference-index`: A detailed explanation of Python's syntax and
  semantics.  It's heavy reading, but is useful as a complete guide to the
  language itself.

More Python resources:

* https://www.python.org:  The major Python web site.  It contains code,
  documentation, and pointers to Python-related pages around the web.

* https://docs.python.org:  Fast access to Python's  documentation.

* https://pypi.org: The Python Package Index, previously also nicknamed
  the Cheese Shop [#]_, is an index of user-created Python modules that are available
  for download.  Once you begin releasing code, you can register it here so that
  others can find it.

* https://code.activestate.com/recipes/langs/python/: The Python Cookbook is a
  sizable collection of code examples, larger modules, and useful scripts.
  Particularly notable contributions are collected in a book also titled Python
  Cookbook (O'Reilly & Associates, ISBN 0-596-00797-3.)

* https://pyvideo.org collects links to Python-related videos from
  conferences and user-group meetings.

* https://scipy.org: The Scientific Python project includes modules for fast
  array computations and manipulations plus a host of packages for such
  things as linear algebra, Fourier transforms, non-linear solvers,
  random number distributions, statistical analysis and the like.

For Python-related questions and problem reports, you can post to the newsgroup
:newsgroup:`comp.lang.python`, or send them to the mailing list at
python-list@python.org.  The newsgroup and mailing list are gatewayed, so
messages posted to one will automatically be forwarded to the other.  There are
hundreds of postings a day, asking (and
answering) questions, suggesting new features, and announcing new modules.
Mailing list archives are available at https://mail.python.org/pipermail/.

Before posting, be sure to check the list of
:ref:`Frequently Asked Questions <faq-index>` (also called the FAQ).  The
FAQ answers many of the questions that come up again and again, and may
already contain the solution for your problem.

.. rubric:: Footnotes

.. [#] "Cheese Shop" is a Monty Python's sketch: a customer enters a cheese shop,
   but whatever cheese he asks for, the clerk says it's missing.

