Разделы презентаций


Москва, 2018 Информационные технологии Основы программирования на Python 3 Каф

Содержание

Лекция 2. Типы данных Часть 1. Базовые типы данныхПеременныеБазовые типы данныхЧисловые типыСтроковый тип (str)

Слайды и текст этой презентации

Слайд 1Москва, 2018
Информационные
технологии
Основы
программирования
на Python 3
Каф. ИКТ РХТУ им.

Д.И. Менделеева Ст. преп. Васецкий А.М.

Москва, 2018Информационные технологииОсновы программирования на Python 3Каф. ИКТ РХТУ им. Д.И. Менделеева Ст. преп. Васецкий А.М.

Слайд 2Лекция 2. Типы данных
Часть 1.
Базовые типы данных
Переменные
Базовые типы

данных
Числовые типы
Строковый тип (str)

Лекция 2. Типы данных Часть 1. Базовые типы данныхПеременныеБазовые типы данныхЧисловые типыСтроковый тип (str)

Слайд 31. Переменные
Python – динамически типизированный язык. В нём переменные не имеют

фиксированного типа. Переменные реализуются как указатели на объект и могут

менять свой тип в зависимости от содержимого.
Однако, не рекомендуется хранить в одних и тех же переменных значения разного типа, если это не диктуется необходимостью.
При росте сложности, когда операции присваивания разнесены в массиве кода, сложно определить текущий тип переменной
1. ПеременныеPython – динамически типизированный язык. В нём переменные не имеют фиксированного типа. Переменные реализуются как указатели

Слайд 4Именование переменных
Каждая переменная должна иметь уникальное имя, состоящее из латинских

букв, цифр и знаков подчеркивания
Имя переменной не может начинаться с

цифры.
Следует избегать указания символа подчеркивания в начале имени, т.к. у таких идентификаторов специальное назначение. Например, имена, начинающиеся с символа подчеркивания, не импортируются из модуля с помощью инструкции from module import *, а имена, включающие по два символа подчеркивания – в начале и в конце, для интерпретатора имеют особый смысл.
Обязательно учитывать регистр букв!
Стандартные имена: myvar, thisvar, somevar123
Специальные имена: _myvar, __ sysvar __
Неправильные имена: 2you, этоПеременная
Именование переменныхКаждая переменная должна иметь уникальное имя, состоящее из латинских букв, цифр и знаков подчеркиванияИмя переменной не

Слайд 5Константы
В отличие от других языков программирования в Python константы не

определяются как таковые.
Для выделения переменных, являющихся константами используют их именование

в верхнем регистре вида: MYCONST
КонстантыВ отличие от других языков программирования в Python константы не определяются как таковые.Для выделения переменных, являющихся константами

Слайд 6Ключевые слова
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert',

'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for',

'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
Их нельзя использовать в качестве переменных
Также следует избегать переопределения встроенных идентификаторов вида help, str и подобных
Ключевые слова>>> import keyword>>> keyword.kwlist['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else',

Слайд 7Список встроенных идентификаторов
import builtins
dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError',

'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError',

'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
Список встроенных идентификаторовimport builtinsdir(builtins)['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning',

Слайд 8Список основных типов данных
Числа (Numbers)
целые
int – целочисленные
bool – логические
float –

вещественные
complex – комплексные
Последовательности (Sequences)
Постоянные
Строки (Strings)
Кортежи (Tuples)
Байты (Bytes)
Изменяемые
Списки (Lists)
Массивы байтов (Byte

Arrays)
Наборы (Sets)
Множества (Sets)
Фиксированные множества (Frozen sets)
Mappings
Словари (Dictionaries)

Прочие
None
NotImplemented
Ellipsis (…)
Файлы
См. документацию
https://docs.python.org/3.7/reference/datamodel.html#objects-values-and-types

Список основных типов данныхЧисла (Numbers)целыеint – целочисленныеbool – логическиеfloat – вещественныеcomplex – комплексныеПоследовательности (Sequences)ПостоянныеСтроки (Strings)Кортежи (Tuples)Байты (Bytes)ИзменяемыеСписки

Слайд 92. Базовые типы данных в Python
Определить, на какой тип данных

ссылается переменная, позволяет функция
tуре (
Сравнение значения, возвращаемого

функцией tуре(), с названием типа данных:
х = 10
if type(x) == int:
print("Этo int")
Или с использованием функции isinstance()
s = "текст"
if isinstance(s, str):
print("Это тип str")
2. Базовые типы данных в PythonОпределить, на какой тип данных ссылается переменная, позволяет функция tуре ( Сравнение

Слайд 10Принимает значения
True (1)
False (0)
В логическом контексте значение None интерпретируется

как False

Примечание: в некоторых других языках программирования True может быть

равным -1


bооl – логический тип

Принимает значения 	True (1)	False (0)В логическом контексте значение None интерпретируется как FalseПримечание: в некоторых других языках программирования

Слайд 11Представление чисел
При обычном определении числовой переменной она получает значение в

десятичной системе. Но кроме десятичной в Python можно использовать следующие

системы счисления:
двоичную (0b);
восьмеричную (0o);
шестнадцатеричную (0x).
Примеры:
x = 0b101 # двоичная
x = 0o11 # восьмеричная
y = 0x0a   # шестнадцатеричная
Представление чиселПри обычном определении числовой переменной она получает значение в десятичной системе. Но кроме десятичной в Python

Слайд 12Числовые литералы
Примеры числовых литералов
3.14, 10., .001, 1e100, 3.14e-10, 0e0

Начиная с

версии 3.6 в литералах можно использовать знак подчёркивания
f = 100_000_000_000

# 100000000000

Литерал (англ. literal ) – запись в исходном коде компьютерной программы, представляющая собой фиксированное значение. Литералами также называют представление значения некоторого типа данных
Числовые литералыПримеры числовых литералов3.14, 10., .001, 1e100, 3.14e-10, 0e0Начиная с версии 3.6 в литералах можно использовать знак

Слайд 13Тип int
int – целые числа
В отличие от других языков программирования

в Python размер целых чисел ограничен лишь объемом оперативной памяти
Конструктор

int(x, base=10)
my_int = 1 my_int = 0x1AF # Шестнадцатеричный вид 431 my_int = 0o77 # Восьмеричный вид числа 63 my_int = 0b1111 # Двоичный вид числа 15 my_int = int('1') my_int = int(1.1) # 1
my_int = int('1.1') # Ошибка! my_int = int(' 1') # 1 my_int = int() # 0 my_int = int(101, 2) # TypeError: int() can't convert non-string with explicit base my_int = int('101', 2) # 5 (из двоичной в # десятичную)
Тип intint – целые числаВ отличие от других языков программирования в Python размер целых чисел ограничен лишь

Слайд 14Конверсия систем счисления
int([object], [основание системы счисления]) – преобразование к целому

числу в десятичной системе счисления. По умолчанию система счисления десятичная,

но можно задать любое основание от 2 до 36 включительно.
bin(x) – преобразование целого числа в двоичную строку.
hex(х) – преобразование целого числа в шестнадцатеричную строку.
oct(х) – преобразование целого числа в восьмеричную строку.
int.bit_length() – количество бит, необходимых для представления числа в двоичном виде, без учёта знака и лидирующих нулей.
int.to_bytes(length, byteorder, *, signed=False) – возвращает строку байтов, представляющих это число.
int.from_bytes(bytes, byteorder, *, signed=False) – возвращает число из данной строки байтов.
Конверсия систем счисленияint([object], [основание системы счисления]) – преобразование к целому числу в десятичной системе счисления. По умолчанию

Слайд 15Примеры
bin(16) # 0b10000
oct(16) # 0o20
hex(16) # 0x10
int("2pt", 30) # 2579
(1024).to_bytes(2, byteorder="big") #

b'\x04\x00'
(1024).to_bytes(10, byteorder='big')
# b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
x = 1000
x.to_bytes((x.bit_length() //

8) + 1, byteorder="little")
# b'\xe8\x03'
int.from_bytes(b"\x00\x10", byteorder="big") # 16
int.from_bytes(b"\x00\x10", byteorder="little") # 4096
int.from_bytes(b"\xfc\x00", byteorder="big", signed=True) # –1024
int.from_bytes(b"\xfc\x00", byteorder="big", signed=False) # 64512
int.from_bytes([255, 0, 0], byteorder="big") #16711680
Примерыbin(16) 		# 0b10000oct(16)		# 0o20hex(16)		# 0x10int(

Слайд 16Тип float
float – вещественные числа.
Диапазон представления находится в : sys.float_info
(max=1.7976931348623157e+308,

max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
my_float

= 1.2
my_float = 1E-10
my_float = float("1.2")
my_float = float("nan") # nan – число
my_float = float("inf") # inf – бесконечность
my_float = float("+inf") # inf – бесконечность
my_float = float("-inf") # -inf – минус бесконечность
Тип floatfloat – вещественные числа.Диапазон представления находится в : sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53,

Слайд 17Преобразования типов
float.is_integer() – проверка
целое ли значение
int(98.8) # 98 – отбрасывается

дробная часть
int("98.8") # Ошибка!
float(98) # 98.0
float("98.8") # 98.8
s1 = float.is_integer(57.35)

# False
s2 = float.is_integer(57.000)# True
Преобразования типовfloat.is_integer() – проверкацелое ли значениеint(98.8) 		# 98 – отбрасывается дробная частьint(

Слайд 18Присваивание переменных
х = 6 # Тип int
у = 6.8 #

Тип float
В Python возможно присваивать одно значение нескольким переменным сразу.


Например:
a = b = c = 1
В данном случае создается объект со значением 1, и все 3 переменные указывают на область в памяти, в которой он находится.
Групповое присваивание можно использовать для чисел, строк и кортежей, но для изменяемых объектов этого делать нельзя.


Присваивание переменныхх = 6 	# Тип intу = 6.8 	# Тип floatВ Python возможно присваивать одно значение

Слайд 19Позиционное присваивание
х, у, z = 1, 2, 3 # x=1,

y=2, z=3
С помощью позиционного присваивания можно поменять значения переменных местами
х,

у = у, х # x=2, y=1
(В других языках для такого обмена пришлось бы задействовать вспомогательную переменную)
Позиционное присваиваниех, у, z = 1, 2, 3 	# x=1, y=2, z=3С помощью позиционного присваивания можно поменять

Слайд 20Оператор is
При инициализации в переменной сохраняется ссылка на объект
Проверить, ссылаются

ли две переменные на один и тот же объект, позволяет

оператор is
В целях повышения эффективности кода интерпретатор производит кэширование малых целых чисел и небольших строк.
х = 2; у= 2; z = 2
print(x is y) # True
print(y is z) # True
Посмотреть количество ссылок на объект позволяет метод getrefcount() из модуля sys
Проверка на None производится тоже через is, а не через "="
print(x is None) # False
Оператор isПри инициализации в переменной сохраняется ссылка на объектПроверить, ссылаются ли две переменные на один и тот

Слайд 21Тип complex
complex – комплексные числа
my_complex = complex(2, 3) # (2+3j) my_complex

= 2+3j # (2+3j) isinstance(my_complex, complex) # True my_complex.real # 2.0 my_complex.imag #

3.0 my_complex.conjugate() # (2-3j) сопряжённое isinstance(my_complex.real, float) # True isinstance(my_complex.imag, float) # True
Тип complexcomplex – комплексные числаmy_complex = complex(2, 3) 		# (2+3j) my_complex = 2+3j 				# (2+3j) isinstance(my_complex, complex)

Слайд 22Unicode-cтpoки (str)
Набор символов между кавычками.
Можно использовать пары одинарных либо

двойных кавычек.
Плохой тон использовать оба типа кавычек в коде
Из

строк можно взять подстроку используя оператор нарезки ( [ ] и [ : ] ) с индексами от 0 для первого символа строки и до последнего.
Можно использовать и обратную индексацию от –1 для последнего символа до начала.
Строки относятся к категории неизменяемых последовательностей. Все операции с ними создают новые строки.
Unicode-cтpoки (str)Набор символов между кавычками. Можно использовать пары одинарных либо двойных кавычек. Плохой тон использовать оба типа

Слайд 23UTF-кодировка
Примечание: Тип UTF-8, UTF-16 или UTF-32 – здесь не указан.


Следует рассматривать такие строки, как строки в некой абстрактной кодировке,

позволяющие хранить символы Unicode и производить манипуляции с ними.

UTF-кодировкаПримечание: Тип UTF-8, UTF-16 или UTF-32 – здесь не указан. Следует рассматривать такие строки, как строки в

Слайд 24Окончание строк
В языке Python нулевой байт (символ null) не является

признаком завершения строки, как в языке C.
Интерпретатор сохраняет в

памяти как текст самой строки, так и ее длину.
Фактически в языке Python вообще нет символа, который служил бы признаком завершения строки.
Окончание строкВ языке Python нулевой байт (символ null) не является признаком завершения строки, как в языке C.

Слайд 25Создание строк типа str
С помощью литералов
S = 'str' #str
S = "str" #str
S

= '''str''' #str
S = """str""" #str
Тройные кавычки не очень полезны для коротких

строк. Они обычно используются для того, чтобы создать многострочные строки.
с помощью функции str([<Объект> [, <Кодировка> [, <Обработка ошибок>]]]) .
Если указан только первый параметр, то функция возвращает строковое представление любого объекта.
Если параметры не заданы, то возвращается пустая строка


Слайд 26Способы создания строк
Строка из последовательности байтов:
str(b"\xf1\xf2\xf0\xee\xea\xe0", "cp1251")
Выведет: 'строка'
Преобразование в строку
str(10)

# '10'
Кавычку внутри строки в кавычках и апостроф внутри строки

в апострофах необходимо экранировать с помощью защитного слеша
print("\"х\": 5", '\'х\': 5')
Выведет: ("х": 5 'х': 5)

S[0] = "z" # НЕЛЬЗЯ!
Способы создания строкСтрока из последовательности байтов:str(b

Слайд 27Операции со строками
Конкатенация (сцепление)
S1 = "раз"
S2 = "два"
print(S1

+ S2) # раздва
Два литерала автоматически сцепятся
('Кот' 'обус') # Котобус
Дублирование

строки
print("раз" * 3) # разразраз
Можно выполнять комплексно
S1 = "м" + S1[1:] # маз


Символы ASCII

Операции со строкамиКонкатенация (сцепление)S1 =

Слайд 28Экранированные последовательности – служебные символы
Экранированные последовательности позволяют вставить символы, которые

сложно ввести с клавиатуры.

Экранированные последовательности – служебные символыЭкранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.

Слайд 29Экранированные символы

Экранированные символы

Слайд 30Подавление экранирования
Если перед открывающей кавычкой стоит символ "r" (от "raw"-сырой)

(в любом регистре), то механизм экранирования отключается.
S = r"C:\somefile.txt"
"сырая" строка

не может заканчиваться символом обратного слэша.
S = r"\n\n\" # приводит к ошибке!
Пути решения:
S = r"\n\n\\"[:-1] # минус последний слэш
S = r"\n\n" + "\\" # плюс один слэш
S = "\\n\\n\\" # нет сырой строки
На выходе получаем '\n\n\'
Подавление экранированияЕсли перед открывающей кавычкой стоит символ

Слайд 31Операции над строками
S = "text"
len(S) # 4 – длина строки
Индексы

реализованы в виде смещений от начала и потому индексация начинается

с 0
Есть возможность индексации в обратном порядке, от конца к началу – положительные индексы откладываются от левого конца последовательности, а отрицательные – от правого.
S[2] # x
S[-2] # тот же самый x
S[len(S) – 2] # Это эквивалентно S[-2]

Операции над строкамиS =

Слайд 32Срезы
В дополнение к индексированию по номеру позиции, последовательности поддерживают более

общую форму индексирования, известную как получение среза (slicing), которая обеспечивает

возможность извлечения за одну операцию целого сегмента (среза).
Синтаксис операции получения среза выглядит как: X[I:J], и означает: «извлечь из X все, начиная со смещения I и до смещения J, но не включая его».
СрезыВ дополнение к индексированию по номеру позиции, последовательности поддерживают более общую форму индексирования, известную как получение среза

Слайд 33Стандартные срезы
При выполнении среза левая граница по умолчанию принимается равной

нулю, а правая – длине последовательности, к которой применяется операция.
S

= "text"
S[1:] # ext – от 1-го до конца
S[0:3] # tex – от 0-го до 2-го
S[:3] # tex – от начала до 2-го
S[:-1] # tex – от начала до –1-го
S[:] # text – вся строка.
Можно задавать шаг среза
S = "0123456789ABCDEF"
S[:: –1] # FEDCBA9876543210 – обратный порядок
S[:1:-2] # FDB9753 – каждый 2-й символ в обратном порядке до 1-го (не включая)
S[2::2] # 2468ACE – каждый 2-й символ с 2-го
Стандартные срезыПри выполнении среза левая граница по умолчанию принимается равной нулю, а правая – длине последовательности, к

Слайд 34Примеры строк и их срезов
text = "0123456789ABCDEF"
text[0] # символ с

индексом 0 (0)
text[0:5] # подстрока от 0-го символа до 4-го

(01234)
text[4:10] # подстрока от 4-го символа до 9-го (456789)
text[0:16] # вся строка (0123456789ABCDEF)
text[:] # вся строка (0123456789ABCDEF)
text[7:] # подстрока с 7-го символа до конца (789ABCDEF)
text[:5] # строка с начала до 5 символа. Аналогично text[0:5] (01234)
text[-1] # последний символ (F)
text[-1:-14] # Не сработает, выведет пустую строку
text[::2] # Третий аргумент – шаг. Выведет каждый второй символ (02468ACE)
text[::-1] # Шаг отрицательный. Выведет строку наоборот (FEDCBA9876543210)
text + "GH" # Сцепит с новой строкой 0123456789ABCDEFGH
text[-1] * 10 # Выведет 10 символов (FFFFFFFFFF)

Примеры строк и их срезовtext =

Слайд 35Методы для строк
print(dir(S)) даст нам список методов
[…, 'capitalize', 'casefold', 'center',

'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha',

'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
http://pythonz.net/references/named/str/
Методы для строкprint(dir(S)) даст нам список методов[…, 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map',

Слайд 36Описание основных методов строк Поиск и замена

Описание основных методов строк Поиск и замена

Слайд 37Проверки

Проверки

Слайд 38Модификации регистра
Модификации строк

Модификации регистраМодификации строк

Слайд 39Модификации длины строки

Модификации длины строки

Слайд 40Разбиение строк

Разбиение строк

Слайд 41Прочие преобразования

Прочие преобразования

Слайд 42Примеры
str1 = "Это пример строки"
str2 = "при"
print(str1.rindex(str2)) # 4
"a, b,

c".split(",") # ['a', ' b', ' c']
"a, b, c".split(",", maxsplit=1)

# ['a', ' b, c']
Разбиение по пробелам. Если 2 пробела
"a b c".split() # ['a', 'b', 'c']
"a b c".split(" ") # ['a', '', 'b', '', 'c']
Примерыstr1 =

Слайд 43Строковые константы
Модуль Python string содержит заранее определенные строковые константы
printable =

string.printable # 100 печатных символов:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;?@[\]^_`{|}~
Другие свойства:
[…, 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords',

'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']

Строковые константыМодуль Python string содержит заранее определенные строковые константыprintable = string.printable # 100 печатных символов:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!

Слайд 44Старый стиль форматирования строк "%"
имеет форму строка % данные. Внутри

строки находятся интерполяционные последовательности.

Старый стиль форматирования строк

Слайд 45Примеры форматирования "%"
"%s" % 42 # "42"
"%d" % 42 #

"42"
"%x" % 42 # "2a"
"%o" % 42 # "52"
"%s" % 7.03 #

"7.03"
"%f" % 7.03 # "7.030000"
"%e" % 7.03 # "7.030000e+00"
"%g" % 7.03 # "7.03"
"Эта %s из %d слов" % ("строка", 5)
# Эта строка из 5 слов
Примеры форматирования

Слайд 46Кодирование. encode
Строка кодируется байтами. Первый аргумент строковой функции encode() –

это имя кодировки.

Кодирование. encodeСтрока кодируется байтами. Первый аргумент строковой функции encode() – это имя кодировки.

Слайд 47Примеры кодирования
snegovik = "\u2603" #☃
ds = snegovik.encode("utf-8") # UTF-8
len(ds) #

3 – заняло 3 байта
print(ds) # b'\xe2\x98\x83' – побайтно
# использование

аргумента "ignore" позволяет избежать ошибок перекодирования
snegovik.encode("ascii", "ignore")
Примеры кодированияsnegovik =

Слайд 48Декодирование decode
Это декодирование байтовых строк в строки Unicode.
Однако, при

получении текста из внешнего источника (файлы, базы данных, сайты, сетевые

API и т. д.), он закодирован в виде байтовой строки.
Идея заключается в том, чтобы знать, какая кодировка была использована, чтобы стало возможным ее декодировать и получить строку Unicode.
Проблема в том, что никакая часть байтовой строки не говорит о том, какая была использована кодировка.
Декодирование decodeЭто декодирование байтовых строк в строки Unicode. Однако, при получении текста из внешнего источника (файлы, базы

Слайд 49Примеры кодирования/декодирования
place = "caf\u00e9" # café
place_bytes = place.encode("utf-8") # b'caf\xc3\xa9'
Первые

три символа похожи на ASCII (преимущество UTF-8), а последние два

кодируют символ «é»
readtext = place_bytes.decode("utf-8")
# café
Примеры кодирования/декодированияplace =

Слайд 50Форматирование строк format
S.format(*args, **kwargs) – Метод возвращает копию строки, в

которой маркеры заменены текстовыми значениями из соответствующих аргументов.
args: Позиционные аргументы.
kwargs:

Именованные аргументы.

Строка, для которой вызывается данный метод может содержать обычный текст и маркеры в фигурных скобках {}, которые следует заменить. Текст вне скобок будет выведен без изменений.


Форматирование строк formatS.format(*args, **kwargs) – Метод возвращает копию строки, в которой маркеры заменены текстовыми значениями из соответствующих

Слайд 51Маркеры
Общий вид маркера: '{'[наименование('.'аттр|'['индекс']')*] ['!'приведение] [':'формат] '}'
Если требуется, чтобы результирующая

строка содержала скобку, то этот спецсимвол можно экранировать при помощи

его удвоения: {{ и }}.
Наименование состоит из имени аргумента (либо его индекса). Числовой индекс при этом указывает на позиционный аргумент; имя же указывает на именованный аргумент.
Если используются числа и они составляют последовательность (0, 1, 2...), то они могут быть опущены разом (но не выборочно). Например, {}-{}-{} и {0}-{1}-{2} эквивалентны.
МаркерыОбщий вид маркера: '{'[наименование('.'аттр|'['индекс']')*] ['!'приведение] [':'формат] '}'Если требуется, чтобы результирующая строка содержала скобку, то этот спецсимвол можно

Слайд 52Примеры форматирования
'{}-{}-{}'.format(1, 2, 3) # '1-2-3' '{}-{}-{}'.format(*[1, 2, 3]) # '1-2-3' '{one}-{two}-{three}'.format(two=2,

one=1, three=3) # '1-2-3' '{one}-{two}-{three}'.format(**{'two': 2,
'one': 1, 'three': 3}) #

'1-2-3'
'{0}, {1}, {2}'.format('a', 'b', 'c') # 'a, b, c'
'{2}, {1}, {0}'.format('a', 'b', 'c') # 'c, b, a'
'{2}, {1}, {0}'.format(*'abc') # распаковывая последовательность аргументов 'c, b, a' '{0}{1}{0}'.format('abra', 'cad') # Индексы аргументов можно повторять 'abracadabra'
Примеры форматирования'{}-{}-{}'.format(1, 2, 3) 			# '1-2-3' '{}-{}-{}'.format(*[1, 2, 3]) 		# '1-2-3' '{one}-{two}-{three}'.format(two=2, one=1, three=3) 						# '1-2-3' '{one}-{two}-{three}'.format(**{'two':

Слайд 53Мини-язык форматирования
Мини-язык применяется при форматировании строк и позволяет управлять представлением

значений.
Инструкции (спецификации) мини-языка могут передаваться напрямую встроенной функции format().

Мини-язык форматированияМини-язык применяется при форматировании строк и позволяет управлять представлением значений.Инструкции (спецификации) мини-языка могут передаваться напрямую встроенной

Слайд 54Общий вид инструкций формата
format_spec ::= [[fill]align][sign][#][0][width][grouping_option]
[.precision][type]
fill ::=


align ::= "" | "=" | "^"
sign

::= "+" | "-" | " "
width ::= integer
grouping_option ::= "_" | ","
precision ::= integer
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
https://docs.python.org/3/library/string.html#formatspec
Общий вид инструкций форматаformat_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type] fill ::= align ::=

Слайд 55Общий вид инструкций формата
Общий вид инструкции: [[заполнение]равнение][знак]['#']['0'] [минразмер][',']['.'точность][тип]

Заполнение можно указать, если

задано равнение. Заполнением может быть любой символ.
По умолчанию –

' ' (пробел).

Общий вид инструкций форматаОбщий вид инструкции: [[заполнение]равнение][знак]['#']['0'] [минразмер][',']['.'точность][тип]Заполнение можно указать, если задано равнение. Заполнением может быть любой

Слайд 56Равнение
Равнение будет действовать только, если указан минразмер и длина подставляемого

значения меньше него.
Минразмер – это целое, задающее минимальную длину значения.

Если не указывается, то будет использована длина самого значения.
РавнениеРавнение будет действовать только, если указан минразмер и длина подставляемого значения меньше него.Минразмер – это целое, задающее

Слайд 57Примеры равнения
"*" – используется в качестве заполнителя
Имеет смысл только при

указанной длине строки (8)
"{:*

действует, т.к. нет длины
"{:*>8}".format("text") # "****text"
"{:*^8}".format("text") # "**text**"
"{:*=8}".format(-5) # "-******5"
Примеры равнения

Слайд 58Знак
Знак используется только для числовых типов:

ЗнакЗнак используется только для числовых типов:

Слайд 59Примеры знака
"{:+}".format(3) # "+3"
"{:+}".format(-3) # "-3"
"{:-}".format(3) # "3"
"{:-}".format(-3) # "-3"
"{:

}".format(3) # " 3"
"{: }".format(-3) # "-3"

Примеры знака

Слайд 60Запятая
[,] – использовать запятую в качестве тысячного разделителя. Чтобы использовать

разделитель, заданный локалью, используйте тип преобразования целых n

"{:}".format(1000000) # "1000000"
"{:,}".format(1000000)

# "1,000,000"

Запятая[,] – использовать запятую в качестве тысячного разделителя. Чтобы использовать разделитель, заданный локалью, используйте тип преобразования целых

Слайд 610 – Если не задано равнение, то ноль перед минразмер

включает добавление перед числом нулей, зависящее от его знака.
"{:04}".format(1)

# '0001' "{:04}".format(-1) # '-001' # То же самое с использованием равнения: "{:0=4}".format(1) # '0001' "{:0=4}".format(-1) # '-001'

Ноль

0 – Если не задано равнение, то ноль перед минразмер включает добавление перед числом нулей, зависящее от

Слайд 62Форматы целых чисел

Форматы целых чисел

Слайд 63Форматы вещественных чисел

Форматы вещественных чисел

Слайд 64Альтернативные форматы чисел
# – использовать альтернативную форму представления.
Разные типы

предлагают разные альтернативные формы. Опция доступна для целых чисел, чисел

с плавающей запятой, комплексных и десятичных чисел.
Для целых, когда используются двоичная восьмеричная и шестнадцатеричная формы, опция добавляет префиксы 0b, 0o и 0x соответственно.
Для чисел с плавающей запятой, комплексных и десятичных альтернативная форма подразумевает наличие точки (разделителя), даже если за ней не следуют цифры. В обычной форме разделитель ставится, только если за ним следует цифра.
Для преобразований типа g и G нули в конце числа не отсекаются.

Альтернативные форматы чисел# – использовать альтернативную форму представления. Разные типы предлагают разные альтернативные формы. Опция доступна для

Слайд 65Примеры
"{:b}".format(70) # "1000110"
"{:#b}".format(70) # "0b1000110"
"{:x}".format(95)

# 5f
"{:#X}".format(95) # "0x5F"
"{:o}".format(70) # "106"
"{:#o}".format(70)

# "0o106"
"{:f}".format(6) # "6.000000"
"{:.2f}".format(6) # "6.00"
"{:.2%}".format(6) # "600.00%"
"{:.2s}".format("text") # "te"
Примеры

Слайд 66Более сложные конструкции
Задаём словарь d:
d = {"n": 42, "f": 7.03,

"s": "строка"}
"{0[n]} {0[f]} {0[s]} {1}".format(d, "конец")
# "42 7.03 строка конец"
#

0 – относится к d, 1 – к строке "конец"
# n, f, s – ключи словаря

С именованными параметрами не из словаря:
"{n:d} {f:f} {s:s}".format(n=42, f=7.03, s="строка")
# "42 7.030000 строка
# для f точность по умолчанию – 6 знаков
Минимальная длина поля – 10, выравнивание по левому краю:
print("{0:<10d} {1:<10f} {2:<10s}".format(42, 7.05, "txt")) # 42 7.050000 txt
Более сложные конструкцииЗадаём словарь d:d = {

Слайд 67…продолжение
1 аргумент: центральное выравнивание – 10 знаков целого числа
2 аргумент:

правое выравнивание, 10 знаков и точность 4 знака для 2

числа
3 аргумент – ширина 10 знаков
"{0:^10d} {1:>10.4f} {2:10.4s}".format(42, 7.05, "txt") # 42 7.0500 txt

Слайд 68Прочие опции форматирования
В данном курсе не рассматриваются "Шаблонные строки" (из

стандартной библиотеки Template Strings), а также, появившаяся начиная с версии

Python 3.6 "Интерполяция строк" (или f-Строки) Подробнее см. https://docs.python.org/3.7/library/string.html.
Примеры f-строк см. https://docs.python.org/3/reference/lexical_analysis.html

Прочие опции форматированияВ данном курсе не рассматриваются

Слайд 69Регулярные выражения (РВ)
С помощью РВ можно задавать вопросы, вида «Соответствует

ли эта строка шаблону?», или «Совпадает ли шаблон где-нибудь с

этой строкой?».
Можно использовать регулярные выражения, для изменения строки или её разбиения на части различными способами.
РВ поставляются в стандартном модуле re.
См. https://habrahabr.ru/post/115825/
https://habrahabr.ru/post/115436/
https://docs.python.org/3/library/re.html#re.sub
Регулярные выражения (РВ)С помощью РВ можно задавать вопросы, вида «Соответствует ли эта строка шаблону?», или «Совпадает ли

Слайд 70Примеры РВ
Пример использования выглядит так:
result = re.match("Вар", "Вареник")
"Вар" – шаблон
"Вареник"

– источник
Для более сложных проверок выполняется компиляция
yourpattern = re.compile("Вар") #

компиляция
result = yourpattern.match("Вареник") # проверка
print(result.group(0)) # Вар
Примеры РВПример использования выглядит так:result = re.match(

Слайд 71Методы модуля re
dir(re)
['A', 'ASCII', 'DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE',

'M', 'MULTILINE', 'RegexFlag', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE',

'X', '_MAXCACHE', …, 'compile', 'copyreg', 'enum', 'error', 'escape', 'findall', 'finditer', 'fullmatch', 'functools', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'template']
Подробнее можно найти в оригинальной документации:
https://docs.python.org/3/library/re.html
Методы модуля redir(re)['A', 'ASCII', 'DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'RegexFlag', 'S', 'Scanner', 'T', 'TEMPLATE',

Слайд 72Функции сравнения
re.match(pattern, string) – ищет по заданному шаблону pattern в

начале строки string
re.start(), re.end() – возвращают начальную и конечную позиции

найденной подстроки
search(pattern, string) – возвращает первое совпадение, если таковое имеется во всей строке, а не только в начале, как match.
findall(pattern, string) – возвращает список всех непересекающихся совпадений, если имеются.
split(pattern, string, [maxsplit=0]) – разбивает источник на совпадения с шаблоном и возвращает список всех фрагментов строки.
sub(pattern, repl, string, count, flags) – принимает аргумент repl для замены и заменяет все части источника, string совпавшие с шаблоном, на его значение.
Функции сравненияre.match(pattern, string) – ищет по заданному шаблону pattern в начале строки stringre.start(), re.end() – возвращают начальную

Слайд 73Примеры
result = re.match("Вар", "Вареник")
print(result.group(0)) # Результат ("Вар")
print(result.start()) # Начало (0)
print(result.end()) #

Конец (3)

result = re.findall("Вар", "ВарВар") print(result) # ['Вар', 'Вар']
result = re.split(",","my,

long, tx")
print(result) # ['my', ' long', ' tx']

# Замена " and "на " & " ("\s" = пробел) result = re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE)
print(result) # Baked Beans & Spam
Примерыresult = re.match(

Слайд 74Шаблоны: специальные символы

Шаблоны: специальные символы

Слайд 75Специальные символы

Специальные символы

Слайд 76Шаблоны регулярных выражений

Шаблоны регулярных выражений

Слайд 77Примеры
ca*t сработает для сt, cat, caat, ca…at
a[bcd]*e = "a" +

X + "e"
X – один из символов b, c, d

или его отсутствие
Сработает для ae, abe, abbbbe, adde, accce
Не сработает для axe
Если строка не соответствует шаблону, то match и search вернут None
Форма проверки соответствия выражения шаблону:

p = re.compile("a[bcd]*e") m = p.match( "abbe" ) if m: print("Соответствие: ", m.group()) else: print("Нет соответствия")
Примерыca*t сработает для сt, cat, caat, ca…ata[bcd]*e =

Слайд 78Пример
^\d{6}$ – проверка правильности почтового индекса
^ – начало строки
\d –

цифра (6 штук)
$ – конец строки

p = re.compile("^\d{6}$") m = p.match("123456") if

m: print("Соответствие: ", m.group()) else: print("Нет соответствия") >>> Соответствие:  123456
Проверить регулярные выражения можно онлайн на сайте https://regex101.com/

Слайд 79Флаг VERBOSE
позволяет форматировать регулярное выражение более ясным образом.
Пробелы в РВ,

которые не находятся внутри класса символов игнорируются.
Можно помещать внутрь

РВ комментарии, длящиеся с символа # до следующей строки.
pat = re.compile(r"""  \s*                 # Пропуск начального пробела  (?P
[^:]+)   # Имя заголовка  \s* :               # Пробел и двоеточие
… """, re.VERBOSE)
Флаг VERBOSEпозволяет форматировать регулярное выражение более ясным образом.Пробелы в РВ, которые не находятся внутри класса символов игнорируются.

Слайд 80Спасибо за внимание

Спасибо за внимание

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика