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

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

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