Python: изучение с нуля # 2. Strings and Console Output

Автор: | 28/02/2013
 

PythonЭто продолжение курса по изучению языка программирования на Python. Начало — Python: изучение с нуля. Синтаксис.

Strings and Console Output

Часть 1. Strings

Часть 2. Строковые методы

Часть 3. Print

Часть 4. Продвинутый Print

Часть 5. Заключение

Закрепление знаний — время и дата

UPD: Продолжения перевода этого курса не будет, по крайней мере в обозримом будущем. Вместо него — в процессе перевода новый цикл, от tutorialspoint.comКурс Python с нуля

Часть 1. Strings

1. Шаг первый — строки (strings)

Ещё одним типом данных в Python являются строки (strings). Строки, по уже известной нам аналогии, можно назвать «обычными фразами английского языка», например — «Мы номер 1!».

Строковые литералы (string literal) — это строки, созданные путём ограничения каких-либо символов с помощью одинарных или двойных кавычек ( или « ).

Давайте назначим строку «Always look on the bright side of life!» значением переменной brian:

>>> brian=’Always look on the bright side of life!’
>>> brian
‘Always look on the bright side of life!’

2. Шаг второй — sings

Давайте немного потренируемся. Установим следующие значения для таких фраз:

caesar=»Graham»
praline=»John»
viking=»Teresa»

3. Шаг третий — выход!

Не расслабляйтесь. В строках нельзя использовать любые символы, но в некоторых случаях требуется использовать именно такие, запрещённые, символы. В результате, вам придётся либо убрать такие символы из строки, либо указать что они уникальны. Для этого используется символ обратного слеша .

В следующем примере в строке используется символ одиночного апострофа, который интерпретатор будет воспринимать не как часть строки, а именно как апостроф. Что бы избежать этого — «заэкранируем» его символом :

‘Help! Help! I’m being repressed!’

4. Доступ по индексу

Отлично. Кстати, пример из предыдущего задания можно было решить иначе — установив в начале и конце строки двойные кавычки:

«Help! Help! I’m being repressed!»

Помните, как мы говорили, что строки, строго говоря, являются «наборами символов»? Было бы очень удобно, если бы можно было получить доступ к любому символу в строке индивидуально, не так ли?

Это можно сделать!

Каждый символ в строке имеет собственный индекс (subscript), иначе — смещение (offset) — это особый номер, назначенный каждому символу. Нумерация начинается с 0 у самого крайнего символа слева и увеличивается на единицу для каждого символа вправо:

—+—+—+—+—+—+-
P | Y | T | H | O | N |
—+—+—+—+—+—+-
0   1   2   3   4   5

Давайте проверим это на практике, назначив переменной fifth_letter значение, равное пятому символу строки «MONTY»:

>>> fifth_letter = «MONTY»[4]
>>> print(fifth_letter)
Y

Часть 2. Строковые методы

1. Четыре способа сойти с ума

Теперь, мы поговорим о некоторых методах (methods), которые доступны для работы со строками.

В данном случае, метод является функцией (function) специального объекта (object). Об объектах мы поговорим позже. Функция — это часть кода, которая решает определённую проблему или решает определённую задачу. Мы вернёмся к функциям в 4-ой главе. Сейчас просто примите как данное, что строковые методы — это встроенные(pre-built) объекты или части кода, которые выполняют специфические задачи для строк.

Мы будем говорить о четырёх строковых методах в этом разделе:

  1. len()
  2. lower()
  3. upper()
  4. str()

Начнём с len(). Установим переменной parrot строковое значение «Norwegian Blue» (обязательно с Заглавными буквами), а затем вызовем len() вместе с переменной parrot и фунцией print (мы обсудим print позже):

>>> parrot = «Norwegian Blue»
>>> print len(parrot)
14

2. lower()

Запомним, что len() возвращает длину(length) — т.е. количество символов в строке, с которой был вызван.

Давайте предположим, что вы не хотите никаких Заглавных букв в вашей строке. В примере «Norwegian Blue» вы можете вручную изменить буквы и написать «norwegian blue». Но что, если у вас тысячи таких слов?

Однако, Python просто создан для автоматизации. Вызовем функцию lower() с переменной parrot:

>>> parrot.lower()
‘norwegian blue’

Вы заметили разницу в методе написания вызова? Мы объясним её позже.

3. upper()

Теперь ваша строка полностью написана в нижнем регистре.

К сожалению, внезапно оказалось, что вам наоборот — надо, что бы все буквы были Заглавными. Давайте вызовем функцию upper() с переменной parrot, что бы исправить ситуацию:

>>> print parrot.upper()
NORWEGIAN BLUE

4. str()

Наверно, вы уже знаете всё о строковых методах, и вам становится скучно? Давайте теперь попробуем функцию str().

Метод str() возвращает любое значение, которое вы укажете в скобках, в виде строки. str() создаёт строки из не-строк (т.е. других типов данных, о которых мы говорили ранее — integer, float etc).

  1. Установим переменной pi значение типа float — 3.14159
  2. Вызовем переменную pi с функцией str(). Как и len()str() вызывается без точки:

>>> pi = 3.14159
>>> print str(pi)
3.14159

5. Точечная запись (dot notation)

Как и обещали, теперь мы объясним в чём идея использования вызовов функий len(string) и str(object) в одном виде, а точечной записи для всего остального — в виде «String».upper().

Точечная запись работает со строковыми литералами («The Ministry of Silly Walks».upper()) и переменными, которые назначены строкам (ministry.upper()), так как эти методы специфичны для строк (strings) — и не работают нигде больше. В отличии от этого, len() и str() работают с целой массой различных других объектов (о которых мы поговорим позже), поэтому они не могут быть завязаны на использование только со строками.

Немного практики. Давайте вызовем len() и upper() с переменной ministry:

>>> ministry = «The Ministry of Silly Walks»
>>> print len(ministry)
27
>>> print ministry.upper()
THE MINISTRY OF SILLY WALKS

Часть 3. Print

1. Печать со строковыми литералами

Мы уже говорили об интерпретаторе — вы можете представлять его себе как небольшую программу, которая переносит информацию между вашим кодом на Python и компьютером, когда вы запускаете код на выполнение.

Всё, что вам надо знать про print — что это функция, которая возвращает на консоль результаты обработки кода, который вы ввели интерпретатору.

Давайте попробуем что-нибудь простое, например:

>>> print «Monty Python»
Monty Python

2. Печать переменных

Теперь — давайте объединим наши знания о переменных и новой функции print.

Объявим переменную the_machine_goes и установим ей значение «Ping, после чего — выведем результат её обработки на экран:

>>> the_machine_goes=»Ping!»
>>> print the_machine_goes
Ping!

Часть 4. Продвинутый print

1. Конкатенация строк

Конкатенация — определение (прим. перевод).

Вы уже знаете о строках и вы знаете о арифметических операторах. Но что вы знаете про арифметические действия над строками?

Если вы используете оператор сложения между двумя строками — вы произведёте операцию их конкатенации (concatenation), то есть — «склеивания». «Monty » + «Python» вернёт вам строку «Monty Python».

Давайте проведём операцию конкатенации строк «Spam «, «‘n «, «eggs», что бы получить строку «Spam ‘n eggs»:

>>> print «Spam » + «‘n » + «eggs»
Spam ‘n eggs

Обратите внимание на пробелы после Spam и ‘n перед закрывающими кавычками.

2. Явное преобразование строк

Помните, мы говорили о методе str() несколько уроков назад, и как он превращает не-строки (non-strings) — в строки (strings)? Этот процесс так же называют «явное преобразование строк» (explicit string conversion). Вы прямо говорите Python-у — «Эй, я знаю что это не строка, но я хочу что бы это стало ей». Сравните это с неявным (implicit) процессом простого указания кавычек вокруг последовательности символов, что бы превратить их в строку.

Давайте используем функцию str() что бы превратить число 3.14 в строку:

>>> print str(3.14)
3.14

3. Форматирование строк с помощью % — урок первый.

Мы уже видели ранее, что мы можем получить доступ к любому символу в строке с помощью смещения (offset) или, если вам так проще, с помощью номера ID (вы помните, что «PYTHON»[1] — это «Y», а не «P»?). К сожалению, строки в Python являются неизменяемыми (immutable) объектами — вы не можете изменить строку после того, как вы её создали и определили.

Однако, возможность более гибко работать с вашими строками есть, и называется она — форматирование строк (string formatting). Для этого используется символ % (не путайте с modulo), и вы можете думать об этом способе как о переменных для ваших строк.

Давайте посмотрим, как этот способ работает:

>>> camelot = «Camelot»
>>> place = «place»
>>> print «Let’s not go to %s. ‘Tis a silly %s.» % (camelot, place)
Let’s not go to Camelot. ‘Tis a silly place.

3. Форматирование строк с помощью % — урок второй.

Видите? Символ % (назовём его «средство задания формата строки — string formatter») заменил символы %s (s — для строк, string) в нашей строке переменными, указанными в скобках. Можно было вставить «Camelot» и «place» в скобки сразу после строки, но мы хотели вам показать как этот способ работает с переменными.

Синтаксис выглядит таким образом:

print «%s» % (variable)

Вы можете использовать столько переменных (или даже строк), разделённых запятыми, сколько вам нужно.

И напоследок, мы хотим показать вам немного нового кода. Не переживайте, если у вас это сейчас не заработает или вы не поймёте как это должно рабоать — мы скоро вам это объясним:

>>> name = raw_input(«What is your name?»)
What is your name?Arseny
>>> quest = raw_input(«What is your quest?»)
What is your quest?make code
>>> color = raw_input(«What is your favorite color?»)
What is your favorite color?red
>>> print «Ah, so your name is %s, your quest is %s,
… and your favorite color is %s.» % (name, quest, color)
Ah, so your name is Arseny, your quest is make code, and your favorite color is red.

Часть 5. Заключение

1. И теперь — нечто уже очень хорошо нам знакомое

Вы много выучили в этом уроке, например:

  1. Что такое строки, и как их создавать неявно (с помощью кавычек » « и ‘ ‘ )или явно (с помощью метода str());
  2. Строковые методы, такие как len(), upper(), и lower();
  3. Функцию print для вывода вычислений вашего кода интерпретатором на консоль;
  4. Продвинутые способы печати на консоль с помощью %.

Давайте соберём это всё в одном примере.

  1. Установим значение перееменной my_string в виде любого строкового литерала (string literal);
  2. Выведем на консоль результат выполнения my_string со строковым методом (string methods) — len();
  3. Выведем на консоль результат выполнения my_string со строковым методом upper():

>>> my_string = «That’s my code»
>>> print len(my_string)
14
>>> print my_string.upper()
THAT’S MY CODE

Закрепление знаний — время и дата

1. Библиотека datetime

В этом небольшом проекте мы создадим программу, котоаря экперементирует с возможностями Python в выдаче нам текущих времени и даты. Это даст некоторый опыт в использовании print, строк (strings), операций конкатенации (concatenation) и функции превращения данных str().

После выполнения упраженений вы будете знать как вывести дату и время в формате mm/dd/yyyy hh:mm:ss.

Давайте выполним выражение «from datetime import datetime». Особую возможность — импортирование в ваш код, мы будем рассматривать в следующих частях.

Сейчас просто запомните, что мы говорим интерпретатору Python-а вывести текущие время и дату.

Далее — мы узнаем как именно получить эту информацию.

2. Получение значений времени и даты

Для получения информации о времени и дате мы можем использовать функцию, называемую datetime.now().

В более поздних занятиях вы узнаете больше о функциях. Пока что — просто знайте, что функцией datetime.now() называется часть кода, которая встроена в Python что бы предоставлять нам текущие время и дату.

Давайте сохраним результат вывова datetime.now() в переменной now. Она потребуется нам в следущем задании:

>>> from datetime import datetime
>>> now = datetime.now()
>>> print now
2013-02-27 20:44:36.274458

3. Извлечение информации

Мы получили информацию в виде 2013-02-27 20:44:36.274458 — и это выглядит просто ужасно.

Давайте узнаем, как извлечь часть данных из значения времени и даты, что бы в результате вывести эту информацию на консоль в более красивой форме.

Начнём с извлечения месяца и года из результатов выполнения datetime.now(). Что бы сделать это, мы можем использовать перменную now в следующем виде: current_year = now.year.

Мы можем извлекать части значяения даты в таком элегантом виде. И, как вы догадываетесь, мы можем использовать похожие запросы для получения знаений month и date.

>>> from datetime import datetime
>>> now = datetime.now()
>>> print now
2013-02-27 21:10:22.051582
>>> print now.year
2013
>>> print now.month
2
>>> print now.day
27

Не удивляйтесь записи вида now.year. Этот тип записи называется «точечная запись (dot notation)» и он используется для получения данных объекта. Мы обсуждали этот тип в этом уроке ранее.

4. Горячая дата

Теперь, готовясь к последнему шагу в виде получения результата в виде «mm/dd/yyyy hh:mm:ss», давайте примемся к подготовке к нему, добавив символы слешей / в дату.

У вас может возникнуть мысль сделать что-то вроде:

>>> print now.month, «/», now.day, «/», now.year

Но это будет абсолютно неправильной идеей и даст вам пробелы между частями данных. Следовательно, лучшим решением будет использование конкатенации строк.

Однако, всё не так просто — так как конкатенация используется только со строками (strings).

Когда вы получаете результат now.year — он заканчивается типом данных integer — то есть неким числом. Что бы преобразовать его в строку — воспользуйтесь функций str().

Давайте выполним вывод даты в виде mm/dd/yyyy:

>>> from datetime import datetime
>>> now = datetime.now()
>>> print now
2013-02-27 21:10:22.051582
>>> current_year = now.year
>>> current_month = now.month
>>> current_day = now.day
>>> print now.year
2013
>>> print now.month
2
>>> print now.day
27
>>> print str(now.month) + «/» +str(now.day) + «/» + str(now.year)
2/27/2013

5. Приятная дата

Теперь повторим эти операции с остальными частями — часами (hour), минутами (minute) и секундами (second).

Как вы догадываетесь, мы можем и дальше использовать нашу переменную now для вывода нужной информации.

Для уточнения — наша переменная now содержит результат выполнения datetime.now() — и нет никаких особенных условий для её имени now.

По примеру предыдущего задания — давайте выведем значение времени в виде hh:mm:ss. Не забывайте использовать конкатенацию строк:

>>> from datetime import datetime
>>> now = datetime.now()
>>> print now
2013-02-27 21:10:22.051582
>>> current_year = now.year
>>> current_month = now.month
>>> current_day = now.day
>>> print now.year
2013
>>> print now.month
2
>>> print now.day
27
>>> print str(now.month) + «/» +str(now.day) + «/» + str(now.year)
2/27/2013
>>> print now.hour
21
>>> print now.minute
10
>>> print now.second
22
>>> print str(now.hour) + «:» + str(now.minute) + «:» + str(now.second)
21:10:22

6. Великий финиш

Итак, мы красиво вывели дату и время, но они разделены. Давайте объединим эти две части, выведя на консоль дату в виде mm/dd/yyyy hh:mm:ss:

>>> from datetime import datetime
>>> now = datetime.now()
>>> print now
2013-02-27 21:10:22.051582
>>> current_year = now.year
>>> current_month = now.month
>>> current_day = now.day
>>> print now.year
2013
>>> print now.month
2
>>> print now.day
27
>>> print str(now.month) + «/» +str(now.day) + «/» + str(now.year)
2/27/2013
>>> current_hour = now.hour
>>> current_hour
21
>>> print now.hour
21
>>> print now.minute
10
>>> print now.second
22
>>> print str(now.hour) + «:» + str(now.minute) + «:» + str(now.second)
21:10:22
>>> print str(now.month) + «/» +str(now.day) + «/» + str(now.year) + » » + str(now.hour) + «:» + str(now.minute) + «:» + str(now.second)
2/27/2013 21:10:22

Не забудьте обратить внимание на пробел, разделяющий дату и время!

Теперь можно переходить к третьей части.