17db96d56Sopenharmony_ci.. _tut-informal:
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci**********************************
47db96d56Sopenharmony_ciAn Informal Introduction to Python
57db96d56Sopenharmony_ci**********************************
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ciIn the following examples, input and output are distinguished by the presence or
87db96d56Sopenharmony_ciabsence of prompts (:term:`>>>` and :term:`...`): to repeat the example, you must type
97db96d56Sopenharmony_cieverything after the prompt, when the prompt appears; lines that do not begin
107db96d56Sopenharmony_ciwith a prompt are output from the interpreter. Note that a secondary prompt on a
117db96d56Sopenharmony_ciline by itself in an example means you must type a blank line; this is used to
127db96d56Sopenharmony_ciend a multi-line command.
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci.. only:: html
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci   You can toggle the display of prompts and output by clicking on ``>>>``
177db96d56Sopenharmony_ci   in the upper-right corner of an example box.  If you hide the prompts
187db96d56Sopenharmony_ci   and output for an example, then you can easily copy and paste the input
197db96d56Sopenharmony_ci   lines into your interpreter.
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci.. index:: single: # (hash); comment
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ciMany of the examples in this manual, even those entered at the interactive
247db96d56Sopenharmony_ciprompt, include comments.  Comments in Python start with the hash character,
257db96d56Sopenharmony_ci``#``, and extend to the end of the physical line.  A comment may appear at the
267db96d56Sopenharmony_cistart of a line or following whitespace or code, but not within a string
277db96d56Sopenharmony_ciliteral.  A hash character within a string literal is just a hash character.
287db96d56Sopenharmony_ciSince comments are to clarify code and are not interpreted by Python, they may
297db96d56Sopenharmony_cibe omitted when typing in examples.
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ciSome examples::
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci   # this is the first comment
347db96d56Sopenharmony_ci   spam = 1  # and this is the second comment
357db96d56Sopenharmony_ci             # ... and now a third!
367db96d56Sopenharmony_ci   text = "# This is not a comment because it's inside quotes."
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci.. _tut-calculator:
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ciUsing Python as a Calculator
427db96d56Sopenharmony_ci============================
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ciLet's try some simple Python commands.  Start the interpreter and wait for the
457db96d56Sopenharmony_ciprimary prompt, ``>>>``.  (It shouldn't take long.)
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci.. _tut-numbers:
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ciNumbers
517db96d56Sopenharmony_ci-------
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ciThe interpreter acts as a simple calculator: you can type an expression at it
547db96d56Sopenharmony_ciand it will write the value.  Expression syntax is straightforward: the
557db96d56Sopenharmony_cioperators ``+``, ``-``, ``*`` and ``/`` work just like in most other languages
567db96d56Sopenharmony_ci(for example, Pascal or C); parentheses (``()``) can be used for grouping.
577db96d56Sopenharmony_ciFor example::
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci   >>> 2 + 2
607db96d56Sopenharmony_ci   4
617db96d56Sopenharmony_ci   >>> 50 - 5*6
627db96d56Sopenharmony_ci   20
637db96d56Sopenharmony_ci   >>> (50 - 5*6) / 4
647db96d56Sopenharmony_ci   5.0
657db96d56Sopenharmony_ci   >>> 8 / 5  # division always returns a floating point number
667db96d56Sopenharmony_ci   1.6
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ciThe integer numbers (e.g. ``2``, ``4``, ``20``) have type :class:`int`,
697db96d56Sopenharmony_cithe ones with a fractional part (e.g. ``5.0``, ``1.6``) have type
707db96d56Sopenharmony_ci:class:`float`.  We will see more about numeric types later in the tutorial.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ciDivision (``/``) always returns a float.  To do :term:`floor division` and
737db96d56Sopenharmony_ciget an integer result you can use the ``//`` operator; to calculate
747db96d56Sopenharmony_cithe remainder you can use ``%``::
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci   >>> 17 / 3  # classic division returns a float
777db96d56Sopenharmony_ci   5.666666666666667
787db96d56Sopenharmony_ci   >>>
797db96d56Sopenharmony_ci   >>> 17 // 3  # floor division discards the fractional part
807db96d56Sopenharmony_ci   5
817db96d56Sopenharmony_ci   >>> 17 % 3  # the % operator returns the remainder of the division
827db96d56Sopenharmony_ci   2
837db96d56Sopenharmony_ci   >>> 5 * 3 + 2  # floored quotient * divisor + remainder
847db96d56Sopenharmony_ci   17
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ciWith Python, it is possible to use the ``**`` operator to calculate powers [#]_::
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci   >>> 5 ** 2  # 5 squared
897db96d56Sopenharmony_ci   25
907db96d56Sopenharmony_ci   >>> 2 ** 7  # 2 to the power of 7
917db96d56Sopenharmony_ci   128
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ciThe equal sign (``=``) is used to assign a value to a variable. Afterwards, no
947db96d56Sopenharmony_ciresult is displayed before the next interactive prompt::
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci   >>> width = 20
977db96d56Sopenharmony_ci   >>> height = 5 * 9
987db96d56Sopenharmony_ci   >>> width * height
997db96d56Sopenharmony_ci   900
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ciIf a variable is not "defined" (assigned a value), trying to use it will
1027db96d56Sopenharmony_cigive you an error::
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci   >>> n  # try to access an undefined variable
1057db96d56Sopenharmony_ci   Traceback (most recent call last):
1067db96d56Sopenharmony_ci     File "<stdin>", line 1, in <module>
1077db96d56Sopenharmony_ci   NameError: name 'n' is not defined
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ciThere is full support for floating point; operators with mixed type operands
1107db96d56Sopenharmony_ciconvert the integer operand to floating point::
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci   >>> 4 * 3.75 - 1
1137db96d56Sopenharmony_ci   14.0
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ciIn interactive mode, the last printed expression is assigned to the variable
1167db96d56Sopenharmony_ci``_``.  This means that when you are using Python as a desk calculator, it is
1177db96d56Sopenharmony_cisomewhat easier to continue calculations, for example::
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci   >>> tax = 12.5 / 100
1207db96d56Sopenharmony_ci   >>> price = 100.50
1217db96d56Sopenharmony_ci   >>> price * tax
1227db96d56Sopenharmony_ci   12.5625
1237db96d56Sopenharmony_ci   >>> price + _
1247db96d56Sopenharmony_ci   113.0625
1257db96d56Sopenharmony_ci   >>> round(_, 2)
1267db96d56Sopenharmony_ci   113.06
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ciThis variable should be treated as read-only by the user.  Don't explicitly
1297db96d56Sopenharmony_ciassign a value to it --- you would create an independent local variable with the
1307db96d56Sopenharmony_cisame name masking the built-in variable with its magic behavior.
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ciIn addition to :class:`int` and :class:`float`, Python supports other types of
1337db96d56Sopenharmony_cinumbers, such as :class:`~decimal.Decimal` and :class:`~fractions.Fraction`.
1347db96d56Sopenharmony_ciPython also has built-in support for :ref:`complex numbers <typesnumeric>`,
1357db96d56Sopenharmony_ciand uses the ``j`` or ``J`` suffix to indicate the imaginary part
1367db96d56Sopenharmony_ci(e.g. ``3+5j``).
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci.. _tut-strings:
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ciStrings
1427db96d56Sopenharmony_ci-------
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ciBesides numbers, Python can also manipulate strings, which can be expressed
1457db96d56Sopenharmony_ciin several ways.  They can be enclosed in single quotes (``'...'``) or
1467db96d56Sopenharmony_cidouble quotes (``"..."``) with the same result [#]_.  ``\`` can be used
1477db96d56Sopenharmony_cito escape quotes::
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci   >>> 'spam eggs'  # single quotes
1507db96d56Sopenharmony_ci   'spam eggs'
1517db96d56Sopenharmony_ci   >>> 'doesn\'t'  # use \' to escape the single quote...
1527db96d56Sopenharmony_ci   "doesn't"
1537db96d56Sopenharmony_ci   >>> "doesn't"  # ...or use double quotes instead
1547db96d56Sopenharmony_ci   "doesn't"
1557db96d56Sopenharmony_ci   >>> '"Yes," they said.'
1567db96d56Sopenharmony_ci   '"Yes," they said.'
1577db96d56Sopenharmony_ci   >>> "\"Yes,\" they said."
1587db96d56Sopenharmony_ci   '"Yes," they said.'
1597db96d56Sopenharmony_ci   >>> '"Isn\'t," they said.'
1607db96d56Sopenharmony_ci   '"Isn\'t," they said.'
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ciIn the interactive interpreter, the output string is enclosed in quotes and
1637db96d56Sopenharmony_cispecial characters are escaped with backslashes.  While this might sometimes
1647db96d56Sopenharmony_cilook different from the input (the enclosing quotes could change), the two
1657db96d56Sopenharmony_cistrings are equivalent.  The string is enclosed in double quotes if
1667db96d56Sopenharmony_cithe string contains a single quote and no double quotes, otherwise it is
1677db96d56Sopenharmony_cienclosed in single quotes.  The :func:`print` function produces a more
1687db96d56Sopenharmony_cireadable output, by omitting the enclosing quotes and by printing escaped
1697db96d56Sopenharmony_ciand special characters::
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci   >>> '"Isn\'t," they said.'
1727db96d56Sopenharmony_ci   '"Isn\'t," they said.'
1737db96d56Sopenharmony_ci   >>> print('"Isn\'t," they said.')
1747db96d56Sopenharmony_ci   "Isn't," they said.
1757db96d56Sopenharmony_ci   >>> s = 'First line.\nSecond line.'  # \n means newline
1767db96d56Sopenharmony_ci   >>> s  # without print(), \n is included in the output
1777db96d56Sopenharmony_ci   'First line.\nSecond line.'
1787db96d56Sopenharmony_ci   >>> print(s)  # with print(), \n produces a new line
1797db96d56Sopenharmony_ci   First line.
1807db96d56Sopenharmony_ci   Second line.
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ciIf you don't want characters prefaced by ``\`` to be interpreted as
1837db96d56Sopenharmony_cispecial characters, you can use *raw strings* by adding an ``r`` before
1847db96d56Sopenharmony_cithe first quote::
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci   >>> print('C:\some\name')  # here \n means newline!
1877db96d56Sopenharmony_ci   C:\some
1887db96d56Sopenharmony_ci   ame
1897db96d56Sopenharmony_ci   >>> print(r'C:\some\name')  # note the r before the quote
1907db96d56Sopenharmony_ci   C:\some\name
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ciThere is one subtle aspect to raw strings: a raw string may not end in
1937db96d56Sopenharmony_cian odd number of ``\`` characters; see
1947db96d56Sopenharmony_ci:ref:`the FAQ entry <faq-programming-raw-string-backslash>` for more information
1957db96d56Sopenharmony_ciand workarounds.
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ciString literals can span multiple lines.  One way is using triple-quotes:
1987db96d56Sopenharmony_ci``"""..."""`` or ``'''...'''``.  End of lines are automatically
1997db96d56Sopenharmony_ciincluded in the string, but it's possible to prevent this by adding a ``\`` at
2007db96d56Sopenharmony_cithe end of the line.  The following example::
2017db96d56Sopenharmony_ci
2027db96d56Sopenharmony_ci   print("""\
2037db96d56Sopenharmony_ci   Usage: thingy [OPTIONS]
2047db96d56Sopenharmony_ci        -h                        Display this usage message
2057db96d56Sopenharmony_ci        -H hostname               Hostname to connect to
2067db96d56Sopenharmony_ci   """)
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ciproduces the following output (note that the initial newline is not included):
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci.. code-block:: text
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ci   Usage: thingy [OPTIONS]
2137db96d56Sopenharmony_ci        -h                        Display this usage message
2147db96d56Sopenharmony_ci        -H hostname               Hostname to connect to
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ciStrings can be concatenated (glued together) with the ``+`` operator, and
2177db96d56Sopenharmony_cirepeated with ``*``::
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci   >>> # 3 times 'un', followed by 'ium'
2207db96d56Sopenharmony_ci   >>> 3 * 'un' + 'ium'
2217db96d56Sopenharmony_ci   'unununium'
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ciTwo or more *string literals* (i.e. the ones enclosed between quotes) next
2247db96d56Sopenharmony_cito each other are automatically concatenated. ::
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci   >>> 'Py' 'thon'
2277db96d56Sopenharmony_ci   'Python'
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ciThis feature is particularly useful when you want to break long strings::
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci   >>> text = ('Put several strings within parentheses '
2327db96d56Sopenharmony_ci   ...         'to have them joined together.')
2337db96d56Sopenharmony_ci   >>> text
2347db96d56Sopenharmony_ci   'Put several strings within parentheses to have them joined together.'
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_ciThis only works with two literals though, not with variables or expressions::
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci   >>> prefix = 'Py'
2397db96d56Sopenharmony_ci   >>> prefix 'thon'  # can't concatenate a variable and a string literal
2407db96d56Sopenharmony_ci     File "<stdin>", line 1
2417db96d56Sopenharmony_ci       prefix 'thon'
2427db96d56Sopenharmony_ci              ^^^^^^
2437db96d56Sopenharmony_ci   SyntaxError: invalid syntax
2447db96d56Sopenharmony_ci   >>> ('un' * 3) 'ium'
2457db96d56Sopenharmony_ci     File "<stdin>", line 1
2467db96d56Sopenharmony_ci       ('un' * 3) 'ium'
2477db96d56Sopenharmony_ci                  ^^^^^
2487db96d56Sopenharmony_ci   SyntaxError: invalid syntax
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ciIf you want to concatenate variables or a variable and a literal, use ``+``::
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci   >>> prefix + 'thon'
2537db96d56Sopenharmony_ci   'Python'
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ciStrings can be *indexed* (subscripted), with the first character having index 0.
2567db96d56Sopenharmony_ciThere is no separate character type; a character is simply a string of size
2577db96d56Sopenharmony_cione::
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci   >>> word = 'Python'
2607db96d56Sopenharmony_ci   >>> word[0]  # character in position 0
2617db96d56Sopenharmony_ci   'P'
2627db96d56Sopenharmony_ci   >>> word[5]  # character in position 5
2637db96d56Sopenharmony_ci   'n'
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ciIndices may also be negative numbers, to start counting from the right::
2667db96d56Sopenharmony_ci
2677db96d56Sopenharmony_ci   >>> word[-1]  # last character
2687db96d56Sopenharmony_ci   'n'
2697db96d56Sopenharmony_ci   >>> word[-2]  # second-last character
2707db96d56Sopenharmony_ci   'o'
2717db96d56Sopenharmony_ci   >>> word[-6]
2727db96d56Sopenharmony_ci   'P'
2737db96d56Sopenharmony_ci
2747db96d56Sopenharmony_ciNote that since -0 is the same as 0, negative indices start from -1.
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ciIn addition to indexing, *slicing* is also supported.  While indexing is used
2777db96d56Sopenharmony_cito obtain individual characters, *slicing* allows you to obtain substring::
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci   >>> word[0:2]  # characters from position 0 (included) to 2 (excluded)
2807db96d56Sopenharmony_ci   'Py'
2817db96d56Sopenharmony_ci   >>> word[2:5]  # characters from position 2 (included) to 5 (excluded)
2827db96d56Sopenharmony_ci   'tho'
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ciSlice indices have useful defaults; an omitted first index defaults to zero, an
2857db96d56Sopenharmony_ciomitted second index defaults to the size of the string being sliced. ::
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci   >>> word[:2]   # character from the beginning to position 2 (excluded)
2887db96d56Sopenharmony_ci   'Py'
2897db96d56Sopenharmony_ci   >>> word[4:]   # characters from position 4 (included) to the end
2907db96d56Sopenharmony_ci   'on'
2917db96d56Sopenharmony_ci   >>> word[-2:]  # characters from the second-last (included) to the end
2927db96d56Sopenharmony_ci   'on'
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ciNote how the start is always included, and the end always excluded.  This
2957db96d56Sopenharmony_cimakes sure that ``s[:i] + s[i:]`` is always equal to ``s``::
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_ci   >>> word[:2] + word[2:]
2987db96d56Sopenharmony_ci   'Python'
2997db96d56Sopenharmony_ci   >>> word[:4] + word[4:]
3007db96d56Sopenharmony_ci   'Python'
3017db96d56Sopenharmony_ci
3027db96d56Sopenharmony_ciOne way to remember how slices work is to think of the indices as pointing
3037db96d56Sopenharmony_ci*between* characters, with the left edge of the first character numbered 0.
3047db96d56Sopenharmony_ciThen the right edge of the last character of a string of *n* characters has
3057db96d56Sopenharmony_ciindex *n*, for example::
3067db96d56Sopenharmony_ci
3077db96d56Sopenharmony_ci    +---+---+---+---+---+---+
3087db96d56Sopenharmony_ci    | P | y | t | h | o | n |
3097db96d56Sopenharmony_ci    +---+---+---+---+---+---+
3107db96d56Sopenharmony_ci    0   1   2   3   4   5   6
3117db96d56Sopenharmony_ci   -6  -5  -4  -3  -2  -1
3127db96d56Sopenharmony_ci
3137db96d56Sopenharmony_ciThe first row of numbers gives the position of the indices 0...6 in the string;
3147db96d56Sopenharmony_cithe second row gives the corresponding negative indices. The slice from *i* to
3157db96d56Sopenharmony_ci*j* consists of all characters between the edges labeled *i* and *j*,
3167db96d56Sopenharmony_cirespectively.
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ciFor non-negative indices, the length of a slice is the difference of the
3197db96d56Sopenharmony_ciindices, if both are within bounds.  For example, the length of ``word[1:3]`` is
3207db96d56Sopenharmony_ci2.
3217db96d56Sopenharmony_ci
3227db96d56Sopenharmony_ciAttempting to use an index that is too large will result in an error::
3237db96d56Sopenharmony_ci
3247db96d56Sopenharmony_ci   >>> word[42]  # the word only has 6 characters
3257db96d56Sopenharmony_ci   Traceback (most recent call last):
3267db96d56Sopenharmony_ci     File "<stdin>", line 1, in <module>
3277db96d56Sopenharmony_ci   IndexError: string index out of range
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ciHowever, out of range slice indexes are handled gracefully when used for
3307db96d56Sopenharmony_cislicing::
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci   >>> word[4:42]
3337db96d56Sopenharmony_ci   'on'
3347db96d56Sopenharmony_ci   >>> word[42:]
3357db96d56Sopenharmony_ci   ''
3367db96d56Sopenharmony_ci
3377db96d56Sopenharmony_ciPython strings cannot be changed --- they are :term:`immutable`.
3387db96d56Sopenharmony_ciTherefore, assigning to an indexed position in the string results in an error::
3397db96d56Sopenharmony_ci
3407db96d56Sopenharmony_ci   >>> word[0] = 'J'
3417db96d56Sopenharmony_ci   Traceback (most recent call last):
3427db96d56Sopenharmony_ci     File "<stdin>", line 1, in <module>
3437db96d56Sopenharmony_ci   TypeError: 'str' object does not support item assignment
3447db96d56Sopenharmony_ci   >>> word[2:] = 'py'
3457db96d56Sopenharmony_ci   Traceback (most recent call last):
3467db96d56Sopenharmony_ci     File "<stdin>", line 1, in <module>
3477db96d56Sopenharmony_ci   TypeError: 'str' object does not support item assignment
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ciIf you need a different string, you should create a new one::
3507db96d56Sopenharmony_ci
3517db96d56Sopenharmony_ci   >>> 'J' + word[1:]
3527db96d56Sopenharmony_ci   'Jython'
3537db96d56Sopenharmony_ci   >>> word[:2] + 'py'
3547db96d56Sopenharmony_ci   'Pypy'
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ciThe built-in function :func:`len` returns the length of a string::
3577db96d56Sopenharmony_ci
3587db96d56Sopenharmony_ci   >>> s = 'supercalifragilisticexpialidocious'
3597db96d56Sopenharmony_ci   >>> len(s)
3607db96d56Sopenharmony_ci   34
3617db96d56Sopenharmony_ci
3627db96d56Sopenharmony_ci
3637db96d56Sopenharmony_ci.. seealso::
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci   :ref:`textseq`
3667db96d56Sopenharmony_ci      Strings are examples of *sequence types*, and support the common
3677db96d56Sopenharmony_ci      operations supported by such types.
3687db96d56Sopenharmony_ci
3697db96d56Sopenharmony_ci   :ref:`string-methods`
3707db96d56Sopenharmony_ci      Strings support a large number of methods for
3717db96d56Sopenharmony_ci      basic transformations and searching.
3727db96d56Sopenharmony_ci
3737db96d56Sopenharmony_ci   :ref:`f-strings`
3747db96d56Sopenharmony_ci      String literals that have embedded expressions.
3757db96d56Sopenharmony_ci
3767db96d56Sopenharmony_ci   :ref:`formatstrings`
3777db96d56Sopenharmony_ci      Information about string formatting with :meth:`str.format`.
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ci   :ref:`old-string-formatting`
3807db96d56Sopenharmony_ci      The old formatting operations invoked when strings are
3817db96d56Sopenharmony_ci      the left operand of the ``%`` operator are described in more detail here.
3827db96d56Sopenharmony_ci
3837db96d56Sopenharmony_ci
3847db96d56Sopenharmony_ci.. _tut-lists:
3857db96d56Sopenharmony_ci
3867db96d56Sopenharmony_ciLists
3877db96d56Sopenharmony_ci-----
3887db96d56Sopenharmony_ci
3897db96d56Sopenharmony_ciPython knows a number of *compound* data types, used to group together other
3907db96d56Sopenharmony_civalues.  The most versatile is the *list*, which can be written as a list of
3917db96d56Sopenharmony_cicomma-separated values (items) between square brackets.  Lists might contain
3927db96d56Sopenharmony_ciitems of different types, but usually the items all have the same type. ::
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_ci   >>> squares = [1, 4, 9, 16, 25]
3957db96d56Sopenharmony_ci   >>> squares
3967db96d56Sopenharmony_ci   [1, 4, 9, 16, 25]
3977db96d56Sopenharmony_ci
3987db96d56Sopenharmony_ciLike strings (and all other built-in :term:`sequence` types), lists can be
3997db96d56Sopenharmony_ciindexed and sliced::
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci   >>> squares[0]  # indexing returns the item
4027db96d56Sopenharmony_ci   1
4037db96d56Sopenharmony_ci   >>> squares[-1]
4047db96d56Sopenharmony_ci   25
4057db96d56Sopenharmony_ci   >>> squares[-3:]  # slicing returns a new list
4067db96d56Sopenharmony_ci   [9, 16, 25]
4077db96d56Sopenharmony_ci
4087db96d56Sopenharmony_ciAll slice operations return a new list containing the requested elements.  This
4097db96d56Sopenharmony_cimeans that the following slice returns a
4107db96d56Sopenharmony_ci:ref:`shallow copy <shallow_vs_deep_copy>` of the list::
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci   >>> squares[:]
4137db96d56Sopenharmony_ci   [1, 4, 9, 16, 25]
4147db96d56Sopenharmony_ci
4157db96d56Sopenharmony_ciLists also support operations like concatenation::
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci   >>> squares + [36, 49, 64, 81, 100]
4187db96d56Sopenharmony_ci   [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ciUnlike strings, which are :term:`immutable`, lists are a :term:`mutable`
4217db96d56Sopenharmony_citype, i.e. it is possible to change their content::
4227db96d56Sopenharmony_ci
4237db96d56Sopenharmony_ci    >>> cubes = [1, 8, 27, 65, 125]  # something's wrong here
4247db96d56Sopenharmony_ci    >>> 4 ** 3  # the cube of 4 is 64, not 65!
4257db96d56Sopenharmony_ci    64
4267db96d56Sopenharmony_ci    >>> cubes[3] = 64  # replace the wrong value
4277db96d56Sopenharmony_ci    >>> cubes
4287db96d56Sopenharmony_ci    [1, 8, 27, 64, 125]
4297db96d56Sopenharmony_ci
4307db96d56Sopenharmony_ciYou can also add new items at the end of the list, by using
4317db96d56Sopenharmony_cithe :meth:`~list.append` *method* (we will see more about methods later)::
4327db96d56Sopenharmony_ci
4337db96d56Sopenharmony_ci   >>> cubes.append(216)  # add the cube of 6
4347db96d56Sopenharmony_ci   >>> cubes.append(7 ** 3)  # and the cube of 7
4357db96d56Sopenharmony_ci   >>> cubes
4367db96d56Sopenharmony_ci   [1, 8, 27, 64, 125, 216, 343]
4377db96d56Sopenharmony_ci
4387db96d56Sopenharmony_ciAssignment to slices is also possible, and this can even change the size of the
4397db96d56Sopenharmony_cilist or clear it entirely::
4407db96d56Sopenharmony_ci
4417db96d56Sopenharmony_ci   >>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
4427db96d56Sopenharmony_ci   >>> letters
4437db96d56Sopenharmony_ci   ['a', 'b', 'c', 'd', 'e', 'f', 'g']
4447db96d56Sopenharmony_ci   >>> # replace some values
4457db96d56Sopenharmony_ci   >>> letters[2:5] = ['C', 'D', 'E']
4467db96d56Sopenharmony_ci   >>> letters
4477db96d56Sopenharmony_ci   ['a', 'b', 'C', 'D', 'E', 'f', 'g']
4487db96d56Sopenharmony_ci   >>> # now remove them
4497db96d56Sopenharmony_ci   >>> letters[2:5] = []
4507db96d56Sopenharmony_ci   >>> letters
4517db96d56Sopenharmony_ci   ['a', 'b', 'f', 'g']
4527db96d56Sopenharmony_ci   >>> # clear the list by replacing all the elements with an empty list
4537db96d56Sopenharmony_ci   >>> letters[:] = []
4547db96d56Sopenharmony_ci   >>> letters
4557db96d56Sopenharmony_ci   []
4567db96d56Sopenharmony_ci
4577db96d56Sopenharmony_ciThe built-in function :func:`len` also applies to lists::
4587db96d56Sopenharmony_ci
4597db96d56Sopenharmony_ci   >>> letters = ['a', 'b', 'c', 'd']
4607db96d56Sopenharmony_ci   >>> len(letters)
4617db96d56Sopenharmony_ci   4
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ciIt is possible to nest lists (create lists containing other lists), for
4647db96d56Sopenharmony_ciexample::
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci   >>> a = ['a', 'b', 'c']
4677db96d56Sopenharmony_ci   >>> n = [1, 2, 3]
4687db96d56Sopenharmony_ci   >>> x = [a, n]
4697db96d56Sopenharmony_ci   >>> x
4707db96d56Sopenharmony_ci   [['a', 'b', 'c'], [1, 2, 3]]
4717db96d56Sopenharmony_ci   >>> x[0]
4727db96d56Sopenharmony_ci   ['a', 'b', 'c']
4737db96d56Sopenharmony_ci   >>> x[0][1]
4747db96d56Sopenharmony_ci   'b'
4757db96d56Sopenharmony_ci
4767db96d56Sopenharmony_ci.. _tut-firststeps:
4777db96d56Sopenharmony_ci
4787db96d56Sopenharmony_ciFirst Steps Towards Programming
4797db96d56Sopenharmony_ci===============================
4807db96d56Sopenharmony_ci
4817db96d56Sopenharmony_ciOf course, we can use Python for more complicated tasks than adding two and two
4827db96d56Sopenharmony_citogether.  For instance, we can write an initial sub-sequence of the
4837db96d56Sopenharmony_ci`Fibonacci series <https://en.wikipedia.org/wiki/Fibonacci_number>`_
4847db96d56Sopenharmony_cias follows::
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci   >>> # Fibonacci series:
4877db96d56Sopenharmony_ci   ... # the sum of two elements defines the next
4887db96d56Sopenharmony_ci   ... a, b = 0, 1
4897db96d56Sopenharmony_ci   >>> while a < 10:
4907db96d56Sopenharmony_ci   ...     print(a)
4917db96d56Sopenharmony_ci   ...     a, b = b, a+b
4927db96d56Sopenharmony_ci   ...
4937db96d56Sopenharmony_ci   0
4947db96d56Sopenharmony_ci   1
4957db96d56Sopenharmony_ci   1
4967db96d56Sopenharmony_ci   2
4977db96d56Sopenharmony_ci   3
4987db96d56Sopenharmony_ci   5
4997db96d56Sopenharmony_ci   8
5007db96d56Sopenharmony_ci
5017db96d56Sopenharmony_ciThis example introduces several new features.
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci* The first line contains a *multiple assignment*: the variables ``a`` and ``b``
5047db96d56Sopenharmony_ci  simultaneously get the new values 0 and 1.  On the last line this is used again,
5057db96d56Sopenharmony_ci  demonstrating that the expressions on the right-hand side are all evaluated
5067db96d56Sopenharmony_ci  first before any of the assignments take place.  The right-hand side expressions
5077db96d56Sopenharmony_ci  are evaluated  from the left to the right.
5087db96d56Sopenharmony_ci
5097db96d56Sopenharmony_ci* The :keyword:`while` loop executes as long as the condition (here: ``a < 10``)
5107db96d56Sopenharmony_ci  remains true.  In Python, like in C, any non-zero integer value is true; zero is
5117db96d56Sopenharmony_ci  false.  The condition may also be a string or list value, in fact any sequence;
5127db96d56Sopenharmony_ci  anything with a non-zero length is true, empty sequences are false.  The test
5137db96d56Sopenharmony_ci  used in the example is a simple comparison.  The standard comparison operators
5147db96d56Sopenharmony_ci  are written the same as in C: ``<`` (less than), ``>`` (greater than), ``==``
5157db96d56Sopenharmony_ci  (equal to), ``<=`` (less than or equal to), ``>=`` (greater than or equal to)
5167db96d56Sopenharmony_ci  and ``!=`` (not equal to).
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ci* The *body* of the loop is *indented*: indentation is Python's way of grouping
5197db96d56Sopenharmony_ci  statements.  At the interactive prompt, you have to type a tab or space(s) for
5207db96d56Sopenharmony_ci  each indented line.  In practice you will prepare more complicated input
5217db96d56Sopenharmony_ci  for Python with a text editor; all decent text editors have an auto-indent
5227db96d56Sopenharmony_ci  facility.  When a compound statement is entered interactively, it must be
5237db96d56Sopenharmony_ci  followed by a blank line to indicate completion (since the parser cannot
5247db96d56Sopenharmony_ci  guess when you have typed the last line).  Note that each line within a basic
5257db96d56Sopenharmony_ci  block must be indented by the same amount.
5267db96d56Sopenharmony_ci
5277db96d56Sopenharmony_ci* The :func:`print` function writes the value of the argument(s) it is given.
5287db96d56Sopenharmony_ci  It differs from just writing the expression you want to write (as we did
5297db96d56Sopenharmony_ci  earlier in the calculator examples) in the way it handles multiple arguments,
5307db96d56Sopenharmony_ci  floating point quantities, and strings.  Strings are printed without quotes,
5317db96d56Sopenharmony_ci  and a space is inserted between items, so you can format things nicely, like
5327db96d56Sopenharmony_ci  this::
5337db96d56Sopenharmony_ci
5347db96d56Sopenharmony_ci     >>> i = 256*256
5357db96d56Sopenharmony_ci     >>> print('The value of i is', i)
5367db96d56Sopenharmony_ci     The value of i is 65536
5377db96d56Sopenharmony_ci
5387db96d56Sopenharmony_ci  The keyword argument *end* can be used to avoid the newline after the output,
5397db96d56Sopenharmony_ci  or end the output with a different string::
5407db96d56Sopenharmony_ci
5417db96d56Sopenharmony_ci     >>> a, b = 0, 1
5427db96d56Sopenharmony_ci     >>> while a < 1000:
5437db96d56Sopenharmony_ci     ...     print(a, end=',')
5447db96d56Sopenharmony_ci     ...     a, b = b, a+b
5457db96d56Sopenharmony_ci     ...
5467db96d56Sopenharmony_ci     0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ci
5497db96d56Sopenharmony_ci.. rubric:: Footnotes
5507db96d56Sopenharmony_ci
5517db96d56Sopenharmony_ci.. [#] Since ``**`` has higher precedence than ``-``, ``-3**2`` will be
5527db96d56Sopenharmony_ci   interpreted as ``-(3**2)`` and thus result in ``-9``.  To avoid this
5537db96d56Sopenharmony_ci   and get ``9``, you can use ``(-3)**2``.
5547db96d56Sopenharmony_ci
5557db96d56Sopenharmony_ci.. [#] Unlike other languages, special characters such as ``\n`` have the
5567db96d56Sopenharmony_ci   same meaning with both single (``'...'``) and double (``"..."``) quotes.
5577db96d56Sopenharmony_ci   The only difference between the two is that within single quotes you don't
5587db96d56Sopenharmony_ci   need to escape ``"`` (but you have to escape ``\'``) and vice versa.
559