Что такое char в питоне
2.5. Символы и строки¶
До сих пор наши программы работали только с числами. Но многим программам надо работать с текстовыми данными. Для этого есть два основных объекта — символы и строки.
2.5.1. Символьный тип данных¶
В питоне, чтобы сохранить символ в переменной, надо просто написать
Вводить символы можно обычной командой input() :
(именно прямо так), выводить — обычным print :
(На самом деле, в питоне нет отдельного «типа» для символов, символ в питоне — это просто строка длины 1, про строки см. ниже. Но часто удобно думать про символы отдельно от строк.)
2.5.2. Коды символов¶
Есть общепринятая договоренность, которая каждому числу от 0 до 255 ставит в соответствие некоторый символ. Точнее, таких договоренностей есть несколько, они называется кодировки, но для латинских букв, цифр и частоупотребимых символов типа того же доллара, запятой или плюса, во всех кодировках соответствующие числа одинаковы. Для русских букв это не так: в разных кодировках им соответствуют разные числа, но это отдельная тема.
Эта общепринятая сейчас кодировка для латинских букв, цифр и частоупотребимых символов называется ASCII, иногда говорят таблица ASCII. Основная часть этой таблицы выглядит так:
32 | 48 | 0 | 64 | @ | 80 | P | 96 | ` | 112 | p | |
33 | ! | 49 | 1 | 65 | A | 81 | Q | 97 | a | 113 | q |
34 | « | 50 | 2 | 66 | B | 82 | R | 98 | b | 114 | r |
35 | # | 51 | 3 | 67 | C | 83 | S | 99 | c | 115 | s |
36 | $ | 52 | 4 | 68 | D | 84 | T | 100 | d | 116 | t |
37 | % | 53 | 5 | 69 | E | 85 | U | 101 | e | 117 | u |
38 | & | 54 | 6 | 70 | F | 86 | V | 102 | f | 118 | v |
39 | ‘ | 55 | 7 | 71 | G | 87 | W | 103 | g | 119 | w |
40 | ( | 56 | 8 | 72 | H | 88 | X | 104 | h | 120 | x |
41 | ) | 57 | 9 | 73 | I | 89 | Y | 105 | i | 121 | y |
42 | * | 58 | : | 74 | J | 90 | Z | 106 | j | 122 | z |
43 | + | 59 | ; | 75 | K | 91 | [ | 107 | k | 123 | < |
44 | , | 60 | 76 | L | 92 | \ | 108 | l | 124 | | | |
45 | — | 61 | = | 77 | M | 93 | ] | 109 | m | 125 | > |
46 | . | 62 | > | 78 | N | 94 | ^ | 110 | n | 126 | |
47 | / | 63 | ? | 79 | O | 95 | _ | 111 | o | 127 | — |
Здесь символ номер 32 — это пробел.
Например, символ доллар имеет номер (говорят код) 36, а символ N — 78.
Обратите внимание, что все цифры идут подряд, все заглавные буквы идут подряд, и все маленькие буквы идут подряд. Это нам будет очень полезно. (Для русских букв это выполняется не всегда.)
Узнать код символа в питоне можно операцией ord, а узнать символ по коду можно операцией chr. Например:
Нам поможет то, что все цифры идут подряд. Поэтому достаточно из кода цифры вычесть код нуля:
2.5.3. Сравнения символов¶
Символы можно сравнивать операторами =, >, =, len(s) :
В-третьих, строки можно складывать. Сложить две строки — значит приписать к одной строке другую:
Прибавлять можно и символы:
Наконец, строковые константы — это уже привычные вам последовательности символов в кавычках:
На самом деле, в питоне можно использовать как апострофы (символы ‘ ), так и кавычки (символы » )
Аналогично для записи символа «апостроф»/»кавычка» в переменную типа char:
Поскольку символ \ имеет такой особый смысл, то чтобы записать в строку прямо этот символ, его надо написать два раза:
Еще частный случай строки — пустая строка, т.е. строка длины ноль:
Ну и наконец, строка — это все-таки массив символов. Можно использовать все известные вам операции над массивами (писать s[i], чтобы получить доступ к i-му символу строки, и т.д.). Например, так можно проверить, есть ли в строке пробелы:
2.5.6. int и т.п.¶
Есть еще три полезных команды:
Они переводят числа в строки и обратно, с int вы уже сталкивались.
2.5.7. Другие операции¶
Вы знаете ряд хитрых команд работы с массивами, и иногда будет возникать желание их использовать при работе со строками. Лучше их не используйте, пока вы точно не будете понимать не только что, но и насколько быстро они работают. В большинстве случаев можно обойтись без них (и так даже будет проще!), плюс вы точно не знаете, как долго они работают.
Например, пусть вам надо из строки удалить все пробелы. Можно писать примерно так (считаем, что у вас уже есть исходная строка s ):
Но это работает долго (поверьте мне 🙂 ) и требует от вас помнить все эти команды, а еще и осознавать не самый тривиальный код. Проще так:
2.5.8. Примеры решения задач¶
Приведу несколько примеров задач, аналогичных тем, которые встречаются на олимпиадах и в моем курсе.
Дан символ. Определите, верно ли, что он является маленькой латинской буквой.
Входные данные: Вводится один символ.
Пример:
Входные данные: Вводится один символ — цифра.
Входные данные: Выведите число.
Пример:
Конечно, чтобы чисто пройти все тесты, в этой задаче можно просто вывести то же самое, что и вводится. Но давайте честно научимся превращать цифру в число. Считываем символ:
и дальше надо понять, какая это цифра. Все цифры в таблице ASCII идут подряд, поэтому достаточно из кода символа вычесть код нуля. В итоге получаем
Дана строка. Посчитайте, сколько в ней маленьких латинских букв.
Входные данные: Вводится одна строка.
Входные данные: Выведите одно число — ответ на задачу.
Символы в языке Python
Тип char – это тип данных, служащий для хранения одиночных символов в различных кодировках.
Он широко используется в более низкоуровневых языках программирования, таких как C. Даже строки там являются массивами, состоящими из элементов типа char.
В Python нет отдельного типа для символов. Даже если присвоить переменной значение ‘а’, она будет иметь строковый тип.
Альтернатива char в Python 3
Разработчики языка решили, что нет необходимости выделять под отдельные символы целый тип. На то есть несколько причин:
Поэтому как бы программист ни пытался, переменные будут иметь строковый тип:
Любой символ в Python является единичной строкой, что позволяет использовать для работы с ним те же функции, что и для строк.
Строка — это неизменяемая последовательность, а так как символ тоже строка, то при попытке изменить его, возбудится исключение:
Функции
Несмотря на объединение двух типов, язык программирования Python 3 имеет функции для работы именно с символами.
Функция возвращает числовое представление символа, переданного в качестве аргумента. То есть с её помощью в Python можно определить код символа (аналогичная функция есть и в C для приведения char к int), например:
Функция работает, только если в качестве аргумента передан один символ, при попытке передать строку возбудится исключение TypeError. С её помощью можно получить числовое представление любого символа кодировки Юникод.
Функция возвращает символ, соответствующий его числовому представлению, которое передается в качестве аргумента:
Экранирование
Экранированные символы — это специальные символы после обратной косой черты «\», выполняющие определенные действия и преобразования.
Экранированная последовательность | Функция |
\n | Переход на новую строку |
\t | Табуляция |
\r | Возврат каретки в начало строки |
\x | Числа в шестнадцатеричном представлении |
\o | Числа в восьмеричном представлении |
\0 | Нулевой символ |
\’ | Апостроф |
\» | Двойная кавычка |
\\ | Обратный слэш |
Экранированные символы также называются escape-последовательностями, с их помощью можно, например, форматировать строки —
Подавление экранирования
Иногда программисту нужно, чтобы обратный слеш не превращал элементы в escape-последовательности, например, при работе с путями к файлам. Для этого необходимо использовать сразу две косых черты: «C:\\Users\\Public».
Когда программист хочет использовать обратный слеш для вывода, но не подавляет экранирование, в некоторых случаях даже возбуждается исключение. В следующем примере есть синтаксическая ошибка из-за того, что с «\U» начинается записть 32-битного символа Юникода (с «\u» — 16-битного). После него должна быть последовательность из 8 цифр, поэтому возникла ошибка:
Чтобы избежать этого, используют приём подавления экранирования:
Подавить экранирование можно с помощью «r», который ставится перед началом строки (до кавычек). На самом деле интерпретатор, видя перед строкой «r», автоматически дублирует каждый символ обратного слеша. Если использовать это в интерактивном режиме, мы увидим:
Решить эту проблему можно несколькими способами:
Основы работы со строками в Python
До сих пор мы обсуждали числа как стандартные типы данных в Python. В этом разделе руководства мы обсудим самый популярный тип данных, то есть строку и методы работы со строками в Python.
Что такое строка в Python?
Строка Python – это набор символов, заключенных в одинарные, двойные или тройные кавычки. Компьютер не понимает персонажей; внутри он хранит манипулируемый символ как комбинацию нулей и единиц.
Каждый символ кодируется символом ASCII или Unicode. Таким образом, мы можем сказать, что строки Python также называются набором символов Unicode.
В Python строки можно создавать, заключая символ или последовательность символов в кавычки. Python позволяет нам использовать одинарные кавычки, двойные кавычки или тройные кавычки для создания строки.
Рассмотрим следующий пример на Python для создания строки.
Проверим тип переменной str с помощью скрипта
В Python строки рассматриваются как последовательность символов, что означает, что Python не поддерживает символьный тип данных; вместо этого одиночный символ, записанный как ‘p’, рассматривается как строка длины 1.
Создание строки в Python
Мы можем создать строку, заключив символы в одинарные или двойные кавычки. Python также предоставляет тройные кавычки для представления строки, но обычно используется для многострочных строк или строк документации.
Индексирование и разбивка строк
Как и в других языках, индексирование строк Python начинается с 0. Например, строка «HELLO» индексируется, как показано на рисунке ниже.
Рассмотрим следующий пример:
Как показано в Python, оператор slice [] используется для доступа к отдельным символам строки. Однако мы можем использовать оператор:(двоеточие) в Python для доступа к подстроке из данной строки. Рассмотрим следующий пример.
Здесь мы должны заметить, что верхний диапазон, указанный в операторе среза, всегда является исключающим, т.е. если задано str = ‘HELLO’, тогда str [1: 3] всегда будет включать str [1] = ‘E’, str [2 ] = ‘L’ и ничего больше.
Рассмотрим следующий пример:
Рассмотрим следующий пример:
Переназначение строк
Обновить содержимое строк так же просто, как присвоить его новой строке. Строковый объект не поддерживает присвоение элемента, т. е. строка может быть заменена только новой строкой, поскольку ее содержимое не может быть частично заменено. Строки неизменяемы в Python.
Рассмотрим следующий пример.
Однако в примере 1 строку str можно полностью присвоить новому содержимому, это указано в следующем примере.
Удаление строки
Как мы знаем, строки неизменяемы. Мы не можем удалить символы из строки. Но мы можем удалить всю строку с помощью ключевого слова del.
Теперь мы удаляем всю строку.
Строковые операторы
Оператор | Описание |
---|---|
+ | Он известен как оператор конкатенации, используемый для соединения строк по обе стороны от оператора. |
* | Известен как оператор повторения. Он объединяет несколько копий одной и той же строки. |
[] | оператор среза. Он используется для доступа к подстрокам определенной строки. |
[:] | оператор среза диапазона, используется для доступа к символам из указанного диапазона. |
in | Оператор членства. Он возвращается, если в указанной строке присутствует определенная подстрока. |
not in | Также является оператором членства и выполняет функцию, обратную in. Он возвращает истину, если в указанной строке отсутствует конкретная подстрока. |
r / R | Используется для указания необработанной строки. Необработанные строки применяются в тех случаях, когда нам нужно вывести фактическое значение escape-символов, таких как «C: // python». Чтобы определить любую строку как необработанную, за символом r или R следует строка. |
% | Необходим для форматирования строк. Применяет спецификаторы формата, используемые в программировании на C, такие как %d или %f, для сопоставления их значений в python. Мы еще обсудим, как выполняется форматирование в Python. |
Рассмотрим следующий пример, чтобы понять реальное использование операторов Python.
Форматирование строки Python
Управляющая последовательность
Предположим, нам нужно написать текст – They said, “Hello what’s going on?” – данный оператор может быть записан в одинарные или двойные кавычки, но он вызовет ошибку SyntaxError, поскольку он содержит как одинарные, так и двойные кавычки.
Рассмотрим следующий пример, чтобы понять реальное использование операторов Python.
Мы можем использовать тройные кавычки для решения этой проблемы, но Python предоставляет escape-последовательность.
Символ обратной косой черты(/) обозначает escape-последовательность. За обратной косой чертой может следовать специальный символ, который интерпретируется по-разному. Одиночные кавычки внутри строки должны быть экранированы. Мы можем применить то же самое, что и в двойных кавычках.
Список escape-последовательностей приведен ниже:
Номер | Последовательность | Описание | Пример |
---|---|---|---|
1. | \newline | Игнорирует новую строку |