Книга Изучаем Python
Скачать 4.68 Mb.
|
name.py name = "ada lovelace" print(name.title()) Сохраните файл с именем name .py и запустите его. Вывод программы должен вы- глядеть так: Ada Lovelace В этом примере в переменной name сохраняется строка, состоящая из букв нижнего регистра "ada lovelace" . За именем переменной в команде print() следует вызов метода title() . Метод представляет собой действие, которое Python выполняет с данными. Точка ( ) после name в конструкции name.title() приказывает Python применить метод title() к переменной name . За именем метода всегда следует пара круглых скобок, потому что методам для выполнения их работы часто требуется дополнительная информация. Эта информация указывается в скобках. Функции title() дополнительная информация не нужна, поэтому в круглых скобках ничего нет. Метод title() преобразует первый символ каждого слова в строке к верхнему регистру, тогда как все остальные символы выводятся в нижнем регистре. Напри- мер, данная возможность может быть полезна, если в вашей программе входные значения Ada , ADA и ada должны рассматриваться как одно и то же имя, и все они должны отображаться в виде Ada Для работы с регистром также существуют другие полезные методы. Например, все символы строки можно преобразовать к верхнему или нижнему регистру: name = "Ada Lovelace" print(name.upper()) print(name.lower()) Программа выводит следующий результат: ADA LOVELACE ada lovelace Метод lower() особенно полезен для хранения данных. Нередко программист не может рассчитывать на то, что пользователи введут все данные с точным со- Строки 37 блюдением регистра, поэтому строки перед сохранением преобразуются к нижнему регистру. Затем, когда потребуется вывести информацию, используется регистр, наиболее подходящий для каждой строки. Конкатенация Также часто возникает необходимость в объединении строк. Представьте, что имя и фамилия хранятся в разных переменных и вы хотите объединить их для вывода полного имени: first_name = "ada" last_name = "lovelace" full_name = first_name + " " + last_name print(full_name) Для объединения строк в Python используется знак «плюс» ( + ). В приве- денном примере полное имя строится объединением first_name , пробел и last_name : ada lovelace Такой способ объединения строк называется конкатенацией. Вы можете исполь- зовать конкатенацию для построения сложных сообщений с информацией, храня- щейся в переменных. Рассмотрим пример: first_name = "ada" last_name = "lovelace" full_name = first_name + " " + last_name print("Hello, " + full_name.title() + "!") Полное имя используется в точке для вывода приветственного сообщения, а метод title() обеспечивает правильное форматирование имени. Этот фрагмент возвращает простое, хорошо отформатированное сообщение: Hello, Ada Lovelace! Конкатенацией также можно воспользоваться для построения сообщения, которое затем сохраняется в переменной: first_name = "ada" last_name = "lovelace" full_name = first_name + " " + last_name message = "Hello, " + full_name.title() + "!" print(message) Этот код также выводит сообщение “Hello, Ada Lovelace!”, но сохранение тек- ста сообщения в переменной существенно упрощает завершающую команду печати . 38 Глава 2 • Переменные и простые типы данных Табуляции и разрывы строк В программировании термином «пропуск» (whitespace) называются такие непе- чатаемые символы, как пробелы, табуляции и символы конца строки. Пропуски структурируют текст, чтобы пользователю было удобнее читать его. Для включения в текст позиции табуляции используется комбинация символов \t , как в точке : >>> print("Python") Python >>> print("\tPython") Python Разрывы строк добавляются с помощью комбинации символов \n : >>> print("Languages:\nPython\nC\nJavaScript") Languages: Python C JavaScript Табуляции и разрывы строк могут сочетаться в тексте. Скажем, последователь- ность "\n\t" приказывает Python начать текст с новой строки, в начале которой располагается табуляция. Следующий пример демонстрирует вывод одного сообщения с разбиением на четыре строки: >>> print("Languages:\n\tPython\n\tC\n\tJavaScript") Languages: Python C JavaScript Разрывы строк и табуляции часто встречаются в двух следующих главах, когда наши программы начнут выводить относительно длинный текст. Удаление пропусков Лишние пропуски могут вызвать путаницу в программах. Для программиста стро- ки 'python' и 'python ' внешне неотличимы, но для программы это совершенно разные строки. Python видит лишний пробел в 'python ' и считает, что он действи- тельно важен — до тех пор, пока вы не сообщите о противоположном. Обращайте внимание на пропуски, потому что в программах часто приходится сравнивать строки, чтобы проверить на совпадение их содержимое. Типичный при- мер — проверка имен пользователей при входе на сайт. Лишние пропуски могут создавать путаницу и в более простых ситуациях. К счастью, Python позволяет легко удалить лишние пропуски из данных, введенных пользователем. Python может искать лишние пропуски у левого и правого края строки. Чтобы убедиться в том, что у правого края (в конце) строки нет пропусков, вызовите метод rstrip() Строки 39 >>> favorite_language = 'python ' >>> favorite_language 'python ' >>> favorite_language.rstrip() 'python' >>> favorite_language 'python ' Значение, хранящееся в переменной favorite_language в точке , содержит лиш- ние пропуски в конце строки. Когда вы приказываете Python вывести это значе- ние в терминальном сеансе, вы видите пробел в конце значения . Когда метод rstrip() работает с переменной favorite_language в точке , этот лишний пробел удаляется. Впрочем, удаление лишь временное: если снова запросить значение favorite_language , мы видим, что строка не отличается от исходной, включая лишний пропуск . Чтобы навсегда исключить пропуск из строки, следует записать усеченное значение обратно в переменную: >>> favorite_language = 'python ' >>> favorite_language = favorite_language.rstrip() >>> favorite_language 'python' Сначала пропуски удаляются в конце строки, а потом значение записывается в ис- ходную переменную . Операция изменения значения переменной с последующим его сохранением в исходной переменной часто выполняется в программировании. Так значение переменной может изменяться в ходе выполнения программы или в ответ на действия пользователя. Пропуски также можно удалить у левого края (в начале) строки при помощи ме- тода lstrip() , а метод strip() удаляет пропуски с обоих концов: >>> favorite_language = ' python ' >>> favorite_language.rstrip() ' python' >>> favorite_language.lstrip() 'python ' >>> favorite_language.strip() 'python' В этом примере исходное значение содержит пропуски в начале и в конце . Затем пропуски удаляются у правого края , у левого края и с обоих концов строки . Поэкспериментируйте с функциями удаления пропусков, это поможет вам осво- иться с работой со строками. На практике эти функции чаще всего применяются для «очистки» пользовательского ввода перед его сохранением в программе. Предотвращение синтаксических ошибок в строках Синтаксические ошибки встречаются в программах более или менее регулярно. Синтаксическая ошибка происходит тогда, когда Python не распознает часть вашей программы как действительный код Python. Например, если заключить апостроф 40 Глава 2 • Переменные и простые типы данных в одиночные кавычки, случится ошибка. Это происходит из-за того, что Python интерпретирует все символы от первой одиночной кавычки до апострофа как строку. После этого Python пытается интерпретировать остаток текста строки как код Python, что порождает ошибки. Разберемся, как же правильно использовать одиночные или двойные кавычки. Со- храните следующую программу в файле apostrophe .py и запустите ее: apostrophe.py message = "One of Python's strengths is its diverse community." print(message) Апостроф находится в строке, заключенной в двойные кавычки, так что у интер- претатора Python не возникает проблем с правильной интерпретацией следующей строки: One of Python's strengths is its diverse community. Однако при использовании одиночных кавычек Python не сможет определить, где должна заканчиваться строка: message = 'One of Python's strengths is its diverse community.' print(message) Программа выводит следующий результат: File "apostrophe.py", line 1 message = 'One of Python's strengths is its diverse community.' ^ SyntaxError: invalid syntax Из выходных данных видно, что ошибка происходит в позиции сразу же после второй одиночной кавычки. Эта синтаксическая ошибка указывает, что интерпрета- тор не распознает какую-то конструкцию как действительный код Python. Ошибки могут возникать по разным причинам; я буду выделять наиболее распространенные источники по мере того, как они будут встречаться нам. Синтаксические ошибки будут часто досаждать вам, пока вы учитесь писать пра- вильный код Python. Кроме того, ошибки этой категории также являются наиболее расплывчатыми и неконкретными, поэтому их особенно трудно находить и ис- правлять. Если вы зайдете в тупик из-за особенно коварной ошибки, обращайтесь к рекомендациям в приложении В. ПРИМЕЧАНИЕ Функция цветового выделения синтаксиса ускоряет выявление некоторых синтаксических ошибок прямо во время написания программы . Если вы увидите, что код Python выделяется как обычный текст (или обычный текст выделяется как код Python), скорее всего, в вашем файле где-то про- пущена кавычка . Вывод в Python 2 В Python 2 команда print имеет немного иной синтаксис: Числа 41 >>> python2.7 >>> print "Hello Python 2.7 world!" Hello Python 2.7 world! В Python 2 выводимый текст не обязательно заключать в круглые скобки. Фор- мально в Python 3 print является функцией, поэтому круглые скобки обязательны. Некоторые команды print в Python 2 содержат круглые скобки, однако их пове- дение несколько отличается от того, что вы видите в Python 3. Когда вы смотрите на код, написанный на Python 2, с большой вероятностью в одних командах print будут присутствовать круглые скобки, а в других круглых скобок не будет. УПРАЖНЕНИЯ Сохраните код каждого из следующих упражнений в отдельном файле с именем name_ cases .py . Если у вас возникнут проблемы, сделайте перерыв или обратитесь к рекоменда- циям в приложении В . 2-3 . Личное сообщение: сохраните имя пользователя в переменной и выведите сообщение, предназначенное для конкретного человека . Сообщение должно быть простым, например: “Hello Eric, would you like to learn some Python today?” 2-4 . Регистр символов в именах: сохраните имя пользователя в переменной и выведите его в нижнем регистре, в верхнем регистре и с капитализацией начальных букв каждого слова . 2-5 . Знаменитая цитата: найдите известное высказывание, которое вам понравилось . Вы- ведите текст цитаты с именем автора . Результат должен выглядеть примерно так (включая кавычки): Albert Einstein once said, "A person who never made a mistake never tried anything new." 2-6 . Знаменитая цитата 2: повторите упражнение 2-5, но на этот раз сохраните имя автора цитаты в переменной famous_person . Затем составьте сообщение и сохраните его в новой переменной с именем message . Выведите свое сообщение . 2-7 . Удаление пропусков: сохраните имя пользователя в переменной . Добавьте в начале и в конце имени несколько пропусков . Проследите за тем, чтобы каждая служебная после- довательность , “\t” и “\n”, встречалась по крайней мере один раз . Выведите имя, чтобы были видны пропуски в начале и конце строки . Затем выведите его снова с использованием каждой из функций удаления пропусков: lstrip(), rstrip() и strip() . Числа Числа очень часто применяются в программировании для ведения счета в играх, представления данных в визуализациях, хранения информации в веб-приложениях и т. д. В Python числовые данные делятся на несколько категорий по способу их использования. Для начала посмотрим, как Python работает с целыми числами, потому что с ними возникает меньше всего проблем. Целые числа В Python с целыми числами можно выполнять операции сложения ( + ), вычита- ния ( - ), умножения ( * ) и деления( / ). 42 Глава 2 • Переменные и простые типы данных >>> 2 + 3 5 >>> 3 - 2 1 >>> 2 * 3 6 >>> 3 / 2 1.5 В терминальном сеансе Python просто возвращает результат операции. Для пред- ставления операции возведения в степень в Python используется сдвоенный знак умножения: >>> 3 ** 2 9 >>> 3 ** 3 27 >>> 10 ** 6 1000000 В Python также существует определенный порядок операций, что позволяет ис- пользовать несколько операций в одном выражении. Круглые скобки используются для изменения порядка операций, чтобы выражение могло вычисляться в нужном порядке. Пример: >>> 2 + 3*4 14 >>> (2 + 3) * 4 20 Пробелы в этих примерах не влияют на то, как Python вычисляет выражения; они просто помогают быстрее найти приоритетные операции при чтении кода. Вещественные числа В Python числа, имеющие дробную часть, называются вещественными (или «чис- лами с плавающей точкой»). Обычно разработчик может просто пользоваться дробными значениями, не особенно задумываясь об их поведении. Просто введите нужные числа, а Python скорее всего сделает именно то, что вы от него хотите: >>> 0.1 + 0.1 0.2 >>> 0.2 + 0.2 0.4 >>> 2 * 0.1 0.2 >>> 2 * 0.2 0.4 Однако в некоторых ситуациях вдруг оказывается, что результат содержит неожи- данно большое количество разрядов в дробной части: >>> 0.2 + 0.1 0.30000000000000004 Числа 43 >>> 3 * 0.1 0.30000000000000004 Нечто подобное может произойти в любом языке; для беспокойства нет причин. Python пытается подобрать как можно более точное представление результата, что иногда бывает нелегко из-за особенностей внутреннего представления чисел в ком- пьютерах. Пока просто не обращайте внимания на «лишние» разряды; вы узнаете, как поступать в подобных ситуациях, когда эта проблема станет актуальной для вас в проектах части II. Предотвращение ошибок типов с использованием функции str() Часто значение переменной должно использоваться внутри сообщения. Допустим, вы хотите поздравить пользователя с днем рождения. И вы написали для этого следующий код: birthday.py age = 23 message = "Happy " + age + "rd Birthday!" print(message) Казалось бы, программа должна вывести простое приветствие: Happy 23rd birthday! Но, если запустить ее, появляется сообщение об ошибке: Traceback (most recent call last): File "birthday.py", line 2, in TypeError: Can't convert 'int' object to str implicitly На этот раз произошла ошибка типа. Это означает, что Python не понимает, какую информацию вы используете. В данном примере Python видит, что в точке ис- пользуется переменная с целочисленным значением ( int ), но не знает, как следует интерпретировать это значение. Дело в том, что переменная может представлять как число 23, так и пару отдельных символов 2 и 3. При таком использовании целых чисел в строках необходимо явно указать, что целое число должно использоваться как строка из символов. Для этого переменная передается функции str() , преоб- разующей не-строковые значения к строковому виду: age = 23 message = "Happy " + str(age) + "rd Birthday!" print(message) Теперь Python понимает, что вы хотите преобразовать числовое значение 23 в строку и вывести символы 2 и 3 в составе поздравления. Ожидаемый результат выводится без всяких ошибок: Happy 23rd Birthday! В большинстве случаев работа с числами в Python проходит достаточно тривиаль- но. Если вы получаете неожиданные результаты, проверьте, правильно ли Python интерпретирует числовые данные – как числовое значение или как строку. 44 Глава 2 • Переменные и простые типы данных Целые числа в Python 2 При делении целых чисел Python 2 возвращает несколько иной результат: >>> python2.7 >>> 3 / 2 1 Вместо 1.5 Python возвращает 1. Результатом деления целых чисел в Python 2 становится целое число с потерей остатка. Обратите внимание: результат не округ- ляется, просто остаток от деления пропадает. Чтобы избежать этого поведения в Python 2, проследите за тем, чтобы хотя бы одно из двух чисел было вещественным. В этом случае результат также будет вещественным: >>> 3 / 2 1 >>> 3.0 / 2 1.5 >>> 3 / 2.0 1.5 >>> 3.0 / 2.0 1.5 Такое поведение при делении часто приводит к недоразумениям, когда люди, при- выкшие работать с Python 3, начинают использовать Python 2, или наоборот. Если вы используете или пишете код, в котором смешиваются целые и вещественные числа, будьте внимательны. УПРАЖНЕНИЯ 2-8 . Число 8: напишите операции сложения, вычитания, умножения и деления, результатом которых является число 8 . Не забудьте заключить операции в команды print, чтобы прове- рить результат . Вы должны написать четыре строки кода, которые выглядят примерно так: print(5 + 3) Результатом должны быть четыре строки, в каждой из которых выводится число 8 . 2-9 . Любимое число: сохраните свое любимое число в переменной . Затем при помощи пе- ременной создайте сообщение для вывода этого числа . Выведите это сообщение . Комментарии Комментарии чрезвычайно полезны в любом языке программирования. До сих пор ваши программы состояли только из кода Python. По мере роста объема и сложности кода в программы следует добавлять комментарии, описывающие общий подход к решаемой задаче, — своего рода заметки, написанные на по- нятном языке. Как создаются комментарии? В языке Python признаком комментария является символ «решетка» ( # ). Интер- претатор Python игнорирует все символы, следующие в коде после # до конца строки. Пример: |