Как обработать utf-строку посимвольно
Встала такая задача: есть строка из русских и английских букв. Нужно для каждого символа взять данные из словаря. Проблема в том, что при попытке посимвольного чтения он читает по половинке русской буквы и в словаре, естественно, ничего не находит. Как быть?
1 2 3 4 5 6 7 8 9 10 11 12 13
# -*- coding: utf-8 -*- table = { 'А': '', 'Б': '', . } def get_char(ch): if not ch in table.keys(): raise Exception("Символ '" + str(ord(ch)) + "' не найден") return table[ch] text = 'Александер' for ch in text: a = get_char(ch)
Хотелось бы в экцепшине получать нормальную букву или данные из словаря.
Как это сделать наиболее питонично?
P.S. Питон — 2.6 (и обновить нельзя).
Как присвоить строку множеству посимвольно
Дано: n = "Slowo" Должно получиться: S = Как.
Как посимвольно разобрать и обработать текст из RichEdit?
В общем, есть два окна RichEdit. В первое я ввожу текст, и после нажатия на Button, текст должен.
UTF-8 — русские символы в char посимвольно
Здравствуйте, в проекте используется UTF-8, и в char и в string я не могу обратиться к русскому.
Как прочитать строку посимвольно?
помгоите пожалуйста прочитать строкук посимвольно.
Сообщение было отмечено aaleksander как решение
Решение
# -*- coding: utf-8 -*- table = {chr(a):ord(chr(a)) for a in range(65, 1106) if a not in range(91, 97) \ if a not in range(124, 1024) if a not in range(1026, 1040) if a != 1104} text = 'Александер' for ch in text: print(ch, ' = ', table.get(ch))
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# -*- coding: utf-8 -*- table = {chr(a):ord(chr(a)) for a in range(65, 1106) if a not in range(91, 97) \ if a not in range(124, 1024) if a not in range(1026, 1040) if a != 1104} def get_char(ch): try: return table[ch] except: return "Символ '" + str(ord(ch)) + "' не найден" text = '~!@#$%^' for ch in text: print(ch, ' = ', get_char(ch))
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# -*- coding: utf-8 -*- table = {chr(a):ord(chr(a)) for a in range(65, 1106) if a not in range(91, 97) \ if a not in range(124, 1024) if a not in range(1026, 1040) if a != 1104} def get_char(simb): if simb in table: return "Символ " +simb+ " Его значение " + str(table.get(''+str(simb)+'')) else: return "Символ " +simb+ " не найден" text = "Hello-world!" for ch in text: print(get_char(ch))
Посимвольный вывод строки
Проблема в том, что при использовании end=»» программа простаивает на некоторое время и строка выводится полностью. Без end=»» все нормально. Проблема самого пайтона или нет?
Посимвольный вывод символов из файла
Как вывести определенный символ из файла? Например, только 5 символ или только первый.
Посимвольный вывод строки
Имеется строка String^ S Подключена библиотека <Windows.h> Пытаюсь вывести в label строку S.
Посимвольный вывод строки
Есть массив-строка. Введенная по Enter.Надо его распечатать. ниже проц посимвольной печати в.
Посимвольный ввод и вывод строки
Пытаюсь перейти на новую строку в консоли, но не получается. Вроде всё правильно, может что-то.
Добавлено через 1 час 33 минуты
Да, по поводу end=»»: в интерактивном режиме (stdout.isatty() == True) stdout — line buffering, то бишь, флушится после ввода новой строки.
Сообщение от KriodZ
Проблема ТС, не знающего про буферизацию потоков ввода-вывода.
Дополню пример shsv закулисным (относительно print) кодом:
for i in "hello world": time.sleep(1) sys.stdout.write(i) sys.stdout.flush()
Посимвольный вывод строки в цикле
Краткое введение в курс дела: Пишу одномерный клеточный автомат. Юзер вводит в Edit1 строку a из.
Посимвольный вывод строки в консоль
Возникла идея сделать вывод текстовых сообщений более читаемыми, например в консольной игре. Хотел.
Задача. Посимвольный вывод строки с переводом в систему счисления
Задача. Нужна программа которая обрабатывает все символы введенной строки. Каждый символ печатается.
Посимвольный вывод
Нужна помощь, не знаю как реализовать, при вводе конца строки($) в любой части предложения.
Посимвольный вывод
Как объединить результаты стандартных GetComputerName, GetCurrentDirectory, GetSystemDirectory и.
Посимвольный вывод
Не могу понять как организовать посимвольный вывод из файла. Задача стоит такая, есть в файле имя.
Посимвольный вывод текста
Необходимо по нажатию на кнопку посимвольно выводить одну строку из файла. Наверно дело в.
Работа со строками в Python. Готовимся к собеседованию: вспоминаем азы
В этой статье мы разберем работу со строками в Python с необычного угла — глазами интервьюера на собеседовании. Информация будет полезна как новичку, так и уверенному джуну. В первой части поговорим о базовых операциях. Во второй — разберем примеры задач и вопросов, к которым стоит быть готовым.
Итак, мы на собеседовании, и я хочу узнать, умеете ли вы обращаться со строками.
Как склеить две строки?
Элементарно? Почти. Важно помнить, что строки — это неизменяемые объекты. Каждый раз, когда мы говорим про «изменение» строки, технически мы создаем новый объект и записываем туда вычисленное значение.
А как склеить три строки? Напрашивается ответ «точно так же», и иногда это самый лучший способ. Но интервьюер скорее всего хочет проверить, знаете ли вы про метод .join() .
>>> names = ["John", "Paul", "Ringo", "George"] >>> ", ".join(names) 'John, Paul, Ringo, George'
join() — очень удобный метод, позволяющий склеить N строк, причём с произвольным разделителем.
Здесь важно не только получить результат, но и понимать, как работает приведённая конструкция. А именно, что join() — это метод объекта «строка», принимающий в качестве аргумента список и возвращающий на выходе новую строку.
Кстати, хорошая задачка для интервью — написать свою реализацию join() .
Разделить строки?
Есть несколько способов получить часть строки. Первый — это split , обратный метод для join . В отличие от join ’а, он применяется к целевой строке, а разделитель передаётся аргументом.
>>> s = "Альфа, Браво, Чарли" >>> s.split(", ") ['Альфа', 'Браво', 'Чарли']
Срез s[x:y] позволяет получить подстроку с символа x до символа y. Можно не указывать любое из значений, чтобы двигаться с начала или до конца строки. Отрицательные значения используются для отсчёта с конца (-1 — последний символ, -2 — предпоследний и т.п.).
>>> s = "Hello, world!" >>> print(s[0:5]) Hello >>> print(s[-6:]) world!
При помощи необязательного третьего параметра s[x:y:N] можно выбрать из подстроки каждый N-ый символ. Например, получить только чётные или только нечётные символы:
>>> s = "0123456789" >>> print(s[::2]) 02468 >>> print(s[1::2]) 13579
Что насчёт поиска в строке?
Самое быстрое — проверить, начинается ли (заканчивается ли) строка с выбранных символов. Для этого в Python предусмотрены специальные строковые методы.
>>> s = "0123456789" >>> s.startswith("012") True >>> s.endswith("69") False
Для поиск подстроки в произвольном месте есть метод с говорящим названием find() . Он вернет индекс начала найденного вхождения подстроки в строку, либо -1, если ничего не найдено.
>>> s = "0123456789" >>> s.find("45") 4 >>> s.find("42") -1
Для сложных случаев, когда нужно найти не конкретную последовательность символов, а некий шаблон, помогут регулярные выражения. Они заслуживают отдельной статьи. Глубокого знания регулярок на собеседованиях не требуется, достаточно знать про них, уметь написать несложное выражение и прочитать чуть более сложное. Например, такое:
>>> import re >>> s = "https://www.reg.ru/hosting/"; >>> result = re.match(r"^(http|https)://([^/]+)(.*)$", s) >>> print(result.group(1)) https >>> print(result.group(2)) www.reg.ru >>> print(result.group(3)) /hosting/
А замену в строке сделать сможете?
Во-первых, при помощи срезов и склейки строк можно заменить что угодно.
>>> s = "Hello, darling! How are you?" >>> s[:7] + "Василий" + s[14:] 'Hello, Василий! How are you?'
Во-вторых, умеешь find() , умей и replace() .
>>> s.replace("darling", "Василий") 'Hello, Василий! How are you?'
В-третьих, любую проблему можно решить регулярными выражениями. Либо получить две проблемы 🙂 В случае с заменой вам нужен метод re.sub() .
>>> s = "https://www.reg.ru/hosting/"; >>> import re >>> print(re.sub('[a-z]', 'X', s)) XXXXX://XXX.XXX.XX/XXXXXXX/
Посимвольная обработка?
Есть бесчисленное множество задачек, которые можно решить, пройдясь в цикле по строке. Например, посчитать количество букв «о».
>>> s = "Hello, world!" >>> for c in s: >>> if c == "o": >>> counter += 1 >>> print(counter) 2
Иногда удобнее бежать по индексу.
>>> for i in range(len(s)): >>> if s[i] == "o": >>> counter += 1
Помним, что строки неизменяемы, поэтому подменить i-ый символ по индексу не получится, нужно создавать новый объект:
>>> s[i] = "X" Traceback (most recent call last): File "", line 1, in TypeError: 'str' object does not support item assignment >>> s[:i] + "X" + s[i+1:] 'HellX, world!'
Либо можно преобразовать строку в список, сделать обработку, а потом склеить список обратно в строку:
>>> arr = list(s) >>> "".join(arr) 'Hello, world!'
А форматирование строк?
Типичная жизненная необходимость — сформировать строку, подставив в неё результат работы программы. Начиная с Python 3.6, это можно делать при помощи f-строк:
>>> f"Строка '' содержит символов." "Строка 'Hello, world!' содержит 13 символов."
В более старом коде можно встретить альтернативные способы
>>> "Строка '%s' содержит %d символов" % (s, len(s)) >>> "Строка '<>' содержит <> символов".format(s, len(s))
Технически можно было обойтись склейкой, но это менее элегантно, а еще придётся следить, чтобы все склеиваемые кусочки были строками. Не рекомендую:
>>> "Строка '" + s + "' содержит " + str(len(s)) + " символов." "Строка 'Hello, world!' содержит 13 символов."
Цель работодателя на собеседовании — убедиться что вы соображаете и что вы справитесь с реальными задачами. Однако погружение в реальные задачи занимает несколько недель, а время интервью ограничено. Поэтому вас ждут учебные задания, которые можно решить за 10-30 минут, а также вопросы на понимание того, как работает код. О них и поговорим в следующей части.
Что думаете?
Ребят, тут собрались ноунеймы которые не работают ни на одном языке, но пишут свое очень важное мнение в комментариях. Лучше проходите мимо и не читайте их. Ах да, учите go и устройтесь в яндекс)
Как вы собираетесь искать хороших сотрудников, если (в большинстве компаний) честных кандидатов отметают даже не пригласив на техническое собеседование?Если умение лгать является обязательным, чтобы устроиться к вам на работу, то не удивляйтесь что «сложно найти хорошего сотрудника».Я знаю о чем говорю. В нашей компании для продвижения программистов на аутсорс есть целая отдельная команда, которая полностью специализируется на «продаже сотрудников». Это люди, которые пристально изучают хотелки чсв hr-ов, пишут «идеальные» резюме и отвечают на все вопросы так, «как надо». А программист приходит только на техническое собеседование в конце.Хорошие сотрудники (как правило) не станут накручивать себе 20 лет стажа, рассказывать про мотивацию «не ради денег», отвечать на глупые вопросы про квадратные люки и прочую ерунду.Вам нужно не учить людей в интернете «как правильно отвечать на наши вопросы, чтобы вы у нас прошли собес», а мыслить шире и заниматься реальным поиском толковых специалистов, которые не обязаны иметь топовые софт-скилы.В противном случае — получайте «идеальные» резюме, написанные по единому шаблону и котов в мешке. И не забудьте пожаловаться что «сложно найти хорошего сотрудника».
Читаю я комментарии и полностью убеждаюсь в том, почему так сложно найти хорошего сотрудника. Да, работодателю неприятно, когда соискатель отключает камеру, а на заднем фоне домашние едят. Неприятно, если человек сразу говорит, что на прошлой работе одни дураки. Настораживают люди, которые каждый год меняют работу и говорят «мало платят». Называть не по имени это вообще признак из серии » Ты, ходор, на фиг не сдался». И прочее. Но большинство комментариев как раз от людей с чсв. Из серии «любите меня любого, я вам одолжение делаю тем, что общаюсь».