Это продолжение курса по изучению языка программирования на 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) объекты или части кода, которые выполняют специфические задачи для строк.
Мы будем говорить о четырёх строковых методах в этом разделе:
- len()
- lower()
- upper()
- 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).
- Установим переменной pi значение типа float — 3.14159
- Вызовем переменную 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. И теперь — нечто уже очень хорошо нам знакомое
Вы много выучили в этом уроке, например:
- Что такое строки, и как их создавать неявно (с помощью кавычек » « и ‘ ‘ )или явно (с помощью метода str());
- Строковые методы, такие как len(), upper(), и lower();
- Функцию print для вывода вычислений вашего кода интерпретатором на консоль;
- Продвинутые способы печати на консоль с помощью %.
Давайте соберём это всё в одном примере.
- Установим значение перееменной my_string в виде любого строкового литерала (string literal);
- Выведем на консоль результат выполнения my_string со строковым методом (string methods) — len();
- Выведем на консоль результат выполнения 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
Не забудьте обратить внимание на пробел, разделяющий дату и время!
Теперь можно переходить к третьей части.