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