Перейти к содержимому

Как посчитать количество замен в строке python

  • автор:

Подсчитать количество замен

Дана строка, содержащая русскоязычный текст. В строке заменить букву “а” буквой “о”. Подсчитать количество замен. Подсчитать, сколько символов в строке.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Заменить все вхождения «дук» на «акведук» и посчитать количество замен
Дана строка. Написать функцию замены все вхождения буквосочетания «дук» на «акведук» и посчитать.

Заменить все двоеточия (:) на точку с запятой (;) Подсчитать количество замен
Дан массив символов. Заменить все двоеточия ( : ) на точку с запятой ( ; ) Подсчитать количество.

Заменить все члены последоватльности, большие данного z, этим числом и в конце подсчитать количество замен
Есть последовательность действительных чисел а1, а2. аn. Надо заменить все ее члены, большие.

Заменить все элементы в одномерном массиве больше 7 на 7. Посчитать количество замен
Напишите пожалуйста программу :Заменить все элементы в одномерном массиве больше 7 на 7.Посчитать.

Заменить все двоеточия (:) на точку с запятой (;) Подсчитать количество замен

Дано текстовый файл, заменить все двоеточия (:) на точку с запятой (;). Посчитать количество замен
Дано текстовый файл, заменить все двоеточия (:) на точку с запятой (;). Посчитать количество.

В строке заменить все двоеточия на точку с запятой. Подсчитать количество замен
Я написала, работает, но количество почему то одно и то же, помогите пожалуйста! procedure.

В строке текста заменить все двоеточия на точку с запятой. Подсчитать количество замен
В строке текста заменить все двоеточия на точку с запятой. Подсчитать количество замен.

В строке заменить все точки «.» на запятые «,», а двоеточия «:» на точку с запятой «;». Подсчитать количество замен
В строке заменить все точки «.» на запятые «,», а двоеточия «:» на точку с запятой «;». Подсчитать.

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

1 2 3 4 5 6 7 8 9
# Дан массив символов. Заменить все двоеточия ( : ) на точку с запятой ( ; ) import re def test(mstr:str)->str: res=re.sub(r':',';', mstr) return f',' if __name__ == '__main__': print(test(mstr=input()))

301 / 211 / 112
Регистрация: 03.12.2016
Сообщений: 409

1 2 3 4 5
array = ['q', 'f', ':', 'u', '8', '4', 'g', ':', 'a', 'a', ':'] cou = array.count(':') array = list(map(lambda x: x if x != ':' else ';', array)) print (cou) print (array)

1525 / 494 / 58
Регистрация: 10.04.2009
Сообщений: 8,326

ЦитатаСообщение от avdivo Посмотреть сообщение

array = [‘q’, ‘f’, ‘:’, ‘u’, ‘8’, ‘4’, ‘g’, ‘:’, ‘a’, ‘a’, ‘:’]
cou = array.count(‘:’)
array = list(map(lambda x: x if x != ‘:’ else ‘;’, array))
print (cou)
print (array)

подскажите, а как будет если не чётко = ‘:’, а просто в нём есть ‘:’?

array = ['q', 'f', '2:', 'u', '8', '4', 'g', ':6', 'a', 'a', '5:6']

301 / 211 / 112
Регистрация: 03.12.2016
Сообщений: 409

1 2 3 4 5
array = ['q', 'f', ':', 'u', '8:hj', '4', 'g', ':', 'a', 'a', ':'] cou = ''.join(array).count(':') array = list(map(lambda x: x if x.find(':') == -1 else x.replace(':', ';'), array)) print (cou) print (array)

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

ЦитатаСообщение от Dax Посмотреть сообщение

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
iSmokeJC,спасибо, понял что не так).
Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

Лучший ответ

Сообщение было отмечено Рыжий Лис как решение

Решение

Dax, ты это запускал хоть?

Добавлено через 32 секунды

1 2 3 4
import re res = re.subn(r':', ';', input()) print(f'Result: \nChanges:')

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
проверил, поправил, вывод прилагаю
Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

Dax, тем не менее, задачу ты решил неверно. Я тоже попадался на эту удочку. Нужно найти не количество точек с запятой, а количество замен. Чуешь разницу?

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

С экранированием кавычек — был явно перебор, пойду man по f- строкам почитаю, а так, проверил еще раз

1 2 3 4 5 6 7 8 9
# Дан массив символов. Заменить все двоеточия ( : ) на точку с запятой ( ; ) import re def test(mstr:str)->str: res=re.sub(r':',';', mstr) return f',' if __name__ == '__main__': print(test(mstr=input()))

Этот код работает, вроде бы, пристойно

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

iSmokeJC, спасибо, чую)

Добавлено через 12 минут

1 2 3 4 5 6 7 8 9 10 11 12
# Дан массив символов. Заменить все двоеточия ( : ) на точку с запятой ( ; ) def test(mstr:str)->str: cnt=0 for i in mstr: if i==':': mstr=mstr.replace(':',';')# старый добрый replace) cnt+=1# если замена, то наращиваем количество,которое потом выводим return f', if __name__ == '__main__': print(test(mstr=input()))

iSmokeJC, Ваш вариант, конечно, лучше, но, пробую еще раз решить , в лоб.
P.s. Меня с юности губит стремление к уникальности кода, самому понять и разобраться, даже — когда это лишнее, посему, прошу меня извинить.

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

ЦитатаСообщение от Dax Посмотреть сообщение

самому понять и разобраться
Это похвально. И не за что тут извиняться
Просто Лис

Эксперт Python

5318 / 3332 / 1021
Регистрация: 17.05.2012
Сообщений: 9,765
Записей в блоге: 9

ЦитатаСообщение от Dax Посмотреть сообщение

mstr=mstr.replace(‘:’,’;’)# старый добрый replace)

Разве изменение списка, по которому итерируешься, не является UB?

Можно, я лучше напишу решение на старой сишечке (для которой и писалось задание)?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
//#include #include #include #include #include #define null NULL #define bool _Bool #define i64 int64_t #define usize size_t #define len_array(x) (sizeof(x) / sizeof(x[0])) // Дан массив символов. Заменить все двоеточия ( : ) на точку с запятой ( ; ) // Подсчитать количество замен. int main() { char arr[] = { 'T', 'r', 'i', 'x', 'i', 'e', ' ', 'i', 's', ' ', 'b', 'e', 's', 't', ' ', 'p', 'o', 'n', 'y', ':', ';'}; for (usize i = 0; i  len_array(arr); i++) { putchar(arr[i]); } putchar('\n'); usize count = 0; for (usize i = 0; i  len_array(arr); i++) { if (arr[i] == ':') { arr[i] = ';'; count++; } } for (usize i = 0; i  len_array(arr); i++) { putchar(arr[i]); } putchar('\n'); printf("count = %lu\n", count); }

Почему строковый метод .replace() в python не проводит нужное количество замен?

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

a = '0 1 2 3 4 5 6 7 8 9' print(a.replace(' ', ' ', 2000)) >>> 0 1 2 3 4 5 6 7 8 9

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

Поясните пожалуйста почему происходит именно так.

P.S.
Понятно что можно использовать регулярные выражения, но интересует работа именно этого метода.

  • Вопрос задан более трёх лет назад
  • 830 просмотров

Комментировать
Решения вопроса 3

fox_12

Владимир Куц @fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Посчитаем количество пробелов в промежутках между строками в вашем примере:

>>> a = '0 1 2 3 4 5 6 7 8 9' >>> import re >>> [len(x) for x in re.split('\d',a)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

вы меняете каждые 3 пробела на 1

c=a.replace(' ', ' ', 2000) >>> [len(x) for x in re.split('\d',c)] [0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 0]

Соответственно там где количество пробелов менее 3 — их оставляем
Там где более или равно — каждые три пробела меняем на один + остаток не делящийся на 3
К примеру для 8 пробелов:

>>> (lambda x: x//3 + x%3)(8) 4
>>> (lambda x: x//3 + x%3)(9) 3

Параметр 2000 указывает лишь на то, что в каждом случае провести не более 2000 замен. Поскольку у вас количество пробелов в примере заведомо меньшее — этот параметр не оказывает никакого влияния. Если было бы больше — то было бы произведено количество замен, не большее 2000.
Наглядно изменение третьего параметра:

>>> [len(x) for x in re.split('\d',a.replace(' ', ' ', 0))] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0] >>> [len(x) for x in re.split('\d',a.replace(' ', ' ', 1))] [0, 1, 2, 1, 4, 5, 6, 7, 8, 9, 0] >>> [len(x) for x in re.split('\d',a.replace(' ', ' ', 2))] [0, 1, 2, 1, 2, 5, 6, 7, 8, 9, 0] >>> [len(x) for x in re.split('\d',a.replace(' ', ' ', 3))] [0, 1, 2, 1, 2, 3, 6, 7, 8, 9, 0] >>> [len(x) for x in re.split('\d',a.replace(' ', ' ', 4))] [0, 1, 2, 1, 2, 3, 4, 7, 8, 9, 0] >>> [len(x) for x in re.split('\d',a.replace(' ', ' ', 5))] [0, 1, 2, 1, 2, 3, 2, 7, 8, 9, 0] . 

Как посчитать количество замен в строке python

В языке Python 3 строки — это строки последовательности юникодных символов. Для обозначения конкретной строки в программе можно использовать одну из четырёх возможных конструкций:

a = 'В этой строке можно использовать символ ", а обычную кавычку нужно экранировать' b = "Здесь можно писать ', но \" нужно экранировать: \" " с = '''Строка на несколько строк (можно писать ' и " свободно)''' d = """То же самое, только кавычки другие \ нужно использовать \, чтобы экранировать конец строки"""

Конечно же, строки можно также получать из других типов приведением к строке, а также получать из внешних источников.

Строка считывается со стандартного ввода функцией input() . Напомним, что для двух строк определа операция сложения (конкатенации), также определена операция умножения строки на число.

Строка состоит из последовательности символов. Узнать количество символов (длину строки) можно при помощи функции len :

>>> S = 'Hello' >>> print(len(S)) 5

Срезы (slices)

Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности.

Есть три формы срезов. Самая простая форма среза: взятие одного символа строки, а именно, S[i] — это срез, состоящий из одного символа, который имеет номер i , при этом считая, что нумерация начинается с числа 0. То есть если , то , , , , .

Номера символов в строке (а также в других структурах данных: списках, кортежах) называются индексом.

Если указать отрицательное значение индекса, то номер будет отсчитываться с конца, начиная с номера -1 . То есть , , , , .

Или в виде таблицы:

Строка S H e l l o
Индекс S[0] S[1] S[2] S[3] S[4]
Индекс S[-5] S[-4] S[-3] S[-2] S[-1]

Если же номер символа в срезе строки S больше либо равен len(S) , или меньше, чем -len(S) , то при обращении к этому символу строки произойдет ошибка IndexError: string index out of range .

Срез с двумя параметрами: S[a:b] возвращает подстроку из b-a символов, начиная с символа c индексом a , то есть до символа с индексом b , не включая его. Например, S[1:4]==’ell’ , то же самое получится если написать S[-4:-1] . Можно использовать как положительные, так и отрицательные индексы в одном срезе, например, S[1:-1] — это строка без первого и последнего символа (срез начинается с символа с индексом 1 и заканчиватеся индексом -1, не включая его).

При использовании такой формы среза ошибки IndexError никогда не возникает. Например, срез S[1:5] вернет строку ‘ello’ , таким же будет результат, если сделать второй индекс очень большим, например, S[1:100] (если в строке не более 100 символов).

Если опустить второй параметр (но поставить двоеточие), то срез берется до конца строки. Например, чтобы удалить из строки первый символ (его индекс равен 0, то есть взять срез, начиная с символа с индексом 1), то можно взять срез S[1:] , аналогично если опустиить первый параметр, то срез берется от начала строки. То есть удалить из строки последний символ можно при помощи среза S[:-1] . Срез S[:] совпадает с самой строкой S .

Если задать срез с тремя параметрами S[a:b:d] , то третий параметр задает шаг, как в случае с функцией range , то есть будут взяты символы с индексами a , a+d , a+2*d и т.д. При задании значения третьего параметра, равному 2, в срез попадет кажый второй символ, а если взять значение среза, равное -1 , то символы будут идти в обратном порядке.

A: Делаем срезы

Сначала выведите третий символ этой строки.

Во второй строке выведите предпоследний символ этой строки.

В третьей строке выведите первые пять символов этой строки.

В четвертой строке выведите всю строку, кроме последних двух символов.

В пятой строке выведите все символы с четными индексами (считая, что индексация начинается с 0, поэтому символы выводятся начиная с первого).

В шестой строке выведите все символы с нечетными индексами, то есть начиная со второго символа строки.

В седьмой строке выведите все символы в обратном порядке.

В восьмой строке выведите все символы строки через один в обратном порядке, начиная с последнего.

В девятой строке выведите длину данной строки.

Абракадабра
р р Абрак Абракадаб Аркдба бааар арбадакарбА абдкрА 11

B: В обратном порядке

Дана строка. Выведите её символы в обратном порядке, по одном символу в строке.

n o h t y P

Методы строк

Метод — это функция, применяемая к объекту, в данном случае — к строке. Метод вызывается в виде объект.метод(параметры) . Например, S.find(«e») — это применение к строке S метода find с одним параметром «e» .

Метод count

Подсчитывает количество вхождений одной строки в другую строку. Простейшая форма вызова S.count(T) возвращает число вхождений строки T внутри строки S . При этом подсчитываются только непересекающиеся вхождения, например:

>>> 'Abracadabra'.count('a') 4 >>> ('a' * 100000).count('aa') 50000

При указании трех параметров , будет выполнен подсчет числа вхождений строки T в срез S[a:b] .

C: Количество слов

Дана строка, состоящая из слов, разделенных пробелами. Определите, сколько в ней слов. Используйте для решения задачи метод count .

Hello world

Метод replace

Метод replace заменяет все вхождения одной строки на другую. Формат: S.replace(old, new) — заменить в строке S все вхождения подстроки old на подстроку new . Пример:

>>> 'Hello'.replace('l', 'L') 'HeLLo'

Если методу replace задать еще один параметр: S.replace(old, new, count) , то заменены будут не все вхождения, а только не больше, чем первые count из них.

>>> 'Abrakadabra'.replace('a', 'A', 2) 'AbrAkAdabra'

D: Замена подстроки

Дана строка. Замените в этой строке все цифры 1 на слово one .

E: Удаление символа

Дана строка. Удалите из этой строки все символы @ .

Bilbo.Baggins@bagend.hobbiton.shire.me
Bilbo.Bagginsbagend.hobbiton.shire.me

Особенности вывода в задачах F-P

Во всех задачах F-P (кроме H) результат нужно записать в отдельную переменную, затем вывести её на экран следующим образом:

print("*" + s + "*")

Решение, в котором ответ выводится по-другому, тестирующая система принимать не будет.

F: Две половинки

Дана строка. Разрежьте ее на две равные части (если длина строки — четная, а если длина строки нечетная, то длина первой части должна быть на один символ больше). Переставьте эти две части местами.

При решении этой задачи нельзя пользоваться инструкцией if .

Метод find и rfind

Метод find находит в данной строке (к которой применяется метод) данную подстроку (которая передается в качестве параметра). Функция возвращает индекс первого вхождения искомой подстроки. Если же подстрока не найдена, то метод возвращает значение -1. Например:

>>> S = 'Hello' >>> print(S.find('e')) 1 >>> print(S.find('ll')) 2 >>> print(S.find('L')) -1

Аналогично, метод rfind возвращает индекс последнего вхождения данной строки («поиск справа»).

>>> S = 'Hello' >>> print(S.find('l')) 2 >>> print(S.rfind('l')) 3

Если вызвать метод find с тремя параметрами S.find(T, a, b) , то поиск будет осуществляться в срезе S[a:b] . Если указать только два параметра S.find(T, a) , то поиск будет осуществляться в срезе S[a:] , то есть начиная с символа с индексом a и до конца строки. Метод S.find(T, a, b) возращает индекс в строке S , а не индекс относительно начала среза.

G: Переставить два слова

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

При решении этой задачи нельзя пользоваться циклами и инструкцией if .

Hello world
*world Hello*

H: Дробь

Дана строка, в которой записана рациональная дробь в виде m/n , где m и n — целые неотрицательные числа, n не равно 0. Вычислите значение этой дроби и выведите его в виде действительного числа.

Указание. Найдите позицию символа «/». При помощи двух срезов выделите числитель и знаменатель, приведите их к типу int .

3.1403508771929824

I: Удаление слова

Текст состоит из слов, разделённых пробелами. В тексте как минимум три слова. Удалите из текста второе слово.

Решение выведите так же, как в задаче «Две половинки».

В этой задаче нельзя использовать методы count и replace. Также желательно использовать метод find с двумя параметрами, вместо вызова метода find к срезу.

In the hole in the ground there lived a hobbit
*In hole in the ground there lived a hobbit*

Подготовка строк перед обработкой

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

J: Повторение слова

Текст состоит из слов, разделённых пробелами. В тексте как минимум два слова. Продублируйте второе слово в тексте.

В этой задаче нельзя использовать методы count и replace. Также желательно использовать метод find с двумя параметрами, вместо вызова метода find к срезу.

In the hole in the ground there lived a hobbit
*In the the hole in the ground there lived a hobbit*
Hello world
*Hello world world*

K: Разворот слова

Текст состоит из слов, разделённых пробелами. В тексте как минимум одно слово. Переставьте буквы второго слова (если оно есть) в обратном порядке.

Решение выведите так же, как в задаче «Две половинки».

В этой задаче нельзя использовать методы count и replace. Также желательно использовать метод find с двумя параметрами, вместо вызова метода find к срезу.

In the hole in the ground there lived a hobbit
*In eht hole in the ground there lived a hobbit*

Метод partition и rpartition

Метод partition находит в данной строке данную подстроку (которая передается в качестве параметра) и разрезает по ней. Функция возвращает кортеж из трёх элементов: то, что было до подстроки, саму подстроку и то, что было после подстроки. Если же подстрока не найдена, то метод возвращает кортеж из всей строки и ещё двух пустых подстрок.

>>> s = 'Аргентина-Ямайка' >>> s.partition('-') ('Аргентина', '-', 'Ямайка') >>> s.partition('@') ('Аргентина-Ямайка', '', '') >>> '16:47:09'.partition(':') ('16', ':', '47:09') >>> '123 + 456'.partition(' + ') ('123', ' + ', '456')

Очень удобно результат работы метода partition сразу класть в три переменны: до, разделить, после:

>>> hh, sep, mm = '16:47'.partition(':') >>> print(hh, mm) 16 47

Аналогично, метод rpartition режет по самому правому вхождению:

>>> s = 'Это длинный текст' >>> begginning, space, last_word = s.rpartition(' ') >>> print(repr(begginning), repr(last_word)) 'Это длинный' 'текст'

L: Футбольный матч

На табло стадиона в конце игры горит надпись:

Название 1-Название 2 A:B

где Название 1 и Название 2 — названия двух команд, а A:B — счёт матча.

Определите, какая команда победила.

Названия команд могут содержать любые символы (буквы, цифры, знаки), кроме «-» и «:». Символы «-» и «:» содержатся в строке ровно по одному разу.

Программа должна вывести название победившей команды, а если была ничья, то слово draw .

Решение выведите так же, как в задаче «Две половинки».

Арсенал (Тула)-Спартак (Москва) 3:0
*Арсенал (Тула)*

M: Вставка символов

Дана строка. Получите новую строку, вставив между каждыми соседними символами исходной строки символ «.». Выведите полученную строку.

В этой задаче можно использовать цикл, но можно обойтись и без него (нужно догадаться самому).

N: Удалить каждый третий символ

Дана строка. Удалите из нее все символы, чьи индексы делятся на 3.

Решение выведите так же, как в задаче «Две половинки».

В этой задаче вам придётся использовать цикл.

O: Метод бутерброда

Секретное агентство решило для шифрования переписки своих сотрудников использовать «метод бутерброда». Сначала буквы слова нумеруются в таком порядке: первая буква получает номер 1, последняя буква — номер 2, вторая – номер 3, предпоследняя – номер 4, потом третья … и так для всех букв (см. рисунок). Затем все буквы записываются в шифр в порядке своих номеров. Например, слово «sandwich» зашифруется в «shacnidw».

К сожалению, программист агентства, написал только программу шифрования и уволился. И теперь агенты не могут понять, что же они написали друг другу. Помогите им.

Вводится слово, зашифрованное методом бутерброда. Выведите расшифрованное слово.

Решение выведите так же, как в задаче «Две половинки».

В этой задаче можно обойтись без цикла (и это не очень сложно), но цикл не запрещается.

Aabrrbaacda
*Abracadabra*

Методы startswith и endswith, проверка наличия подстроки

В тех случаях, когда нужно проверить, что строка начинается или заканчивается некоторой подстрокой, то вместо срезов принято использовать методы startswith и endswith :

>>> 'Abracadabra'.startswith('Ab') True >>> 'Abracadabra'.endswith('BRA') False

Для проверки наличия подстроки кроме метода find можно использовать простую конструкцию:

>>> 'acad' in 'Abracadabra' True

P: Скрытие адреса email

Для защиты от ботов, собирающих с web-страниц адреса электронной почты для рассылки спама, используются методы скрытия адреса электронной почты. Рассмотрим самый простой метод скрытия: в адресе электронной почты символы «.» меняются на «(dot)», символ «@» меняется на «(at)».

Дана строка текста, в ней есть один адрес электронной почты (он содержит один символ «@»). В адресе электронной почты (считайте, что адрес — это слово, отделённое пробелами) выполните указанные замены, в остальных местах замены производить не нужно.

Решение выведите так же, как в задаче «Две половинки».

Bilbo.Baggins@bagend.hobbiton.shire.me — valid email.
*Bilbo(dot)Baggins(at)bagend(dot)hobbiton(dot)shire(dot)me — valid email.*

Q: Смайлики

Напишите программу, которая посчитает количество смайликов в заданном тексте.

  • первым символом является либо ; (точка с запятой) либо : (двоеточие) ровно один раз
  • далее может идти символ – (минус) сколько угодно раз (в том числе символ минус может идти ноль раз)
  • в конце обязательно идет некоторое количество (не меньше одной) одинаковых скобок из следующего набора: ( , ) , [ , ] .
  • внутри смайлика не может встречаться никаких других символов.

Например, нижеприведенные последовательности являются смайликами:

в то время как эти последовательности смайликами не являются (хотя некоторые из них содержат смайлики внутри):

В этой задаче надо будет посчитать количество смайликов, содержащихся в данной строке.

Выведите одно число — количество смайликов, которые встречаются в тексте.

Эту задачу можно решить в одну строчку.

Другие методы строк

>>> 'привет, МИР!'.capitalize() 'Привет, мир!'
>>> 'Странная ФУНКция'.lower() 'странная функция'
>>> 'Странная ФУНКция'.swapcase() 'сТРАННАЯ функЦИЯ'
>>> 'Странная ФУНКция'.title() 'Странная Функция'
>>> 'Странная ФУНКция'.upper() 'СТРАННАЯ ФУНКЦИЯ'
>>> 'xxx'.center(7) ' xxx '
>>> 'xxx'.ljust(7) 'xxx ' >>> 'xxx'.rjust(7) ' xxx'
>>> '123'.zfill(5) '00123'
>>> ' foo bo zooo '.strip() 'foo bo zooo' >>> '( ни за что!:-))'.strip('()-: ') 'ни за что!'
>>> 'Wy7'.isalnum() True
>>> 'Wy7'.isalpha() False
>>> '12313'.isdigit() True
>>> 'привет, мир'.islower() True
>>> ' \n\t\r'.isspace() True
>>> 'ПРИВЕТ, МИР'.isupper() True
>>> ', '.join(('кот', 'пёс', 'ёж')) 'кот, пёс, ёж'
>>> 'пёт кот слон'.split() ['пёт', 'кот', 'слон'] >>> 'foo, boo, zoo'.split(', ') ['foo', 'boo', 'zoo']
>>> """И днём, и ночью Кот учёный. """.splitlines() ['И днём, и ночью', 'Кот учёный. ']
>>> 'fooboozoo'.partition('boo') ('foo', 'boo', 'zoo')
>>> trans = str.maketrans('бгл', 'bgl')
>>> 'благодать'.translate(trans) 'blаgодать'

Кроме того, в модуле string можно найти ряд полезных констант:

string.ascii_letters = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ string.ascii_lowercase = abcdefghijklmnopqrstuvwxyz string.ascii_uppercase = ABCDEFGHIJKLMNOPQRSTUVWXYZ string.digits = 0123456789 string.hexdigits = 0123456789abcdefABCDEF string.octdigits = 01234567 string.punctuation = !"#$%&'()*+,-./:;?@[\]^_`<|>~ string.printable = 0123456789abcdefghijklmnopqrstuvwxyzABCD. string.whitespace = " \t. "

Они включают себя только ASCII символы, поэтому разные тонкие вещи с юникодом решать не помогут.

Форматирование строк. Метод format

Иногда (а точнее, довольно часто) возникают ситуации, когда нужно сделать строку, подставив в неё некоторые данные, полученные в процессе выполнения программы (пользовательский ввод, данные из файлов и т. д.). В этом случае для подстановки этих значений можно использовать строковый метод format . При этом в шаблоне в места подстановок нужно поставить якори вида <> , а в параметры format передать ровно необходимое количество значений. Однако возможностей у format гораздо больше: кроме непосредственной подстановки в строку возможно применение форматирования в выводимым данным. Полный список возможностей можно получить непосредственно в документации, а здесь будет список разумных примеров использования этого метода:

>>> '<>, <>, <>'.format('a', 'b', 'c') 'a, b, c' >>> ', , '.format('a', 'b', 'c') # Можно явно указать индексы 'a, b, c' >>> ', , '.format('a', 'b', 'c') # Если индексы указаны явно, то они могут идти в любом порядке 'c, b, a' >>> ''.format('abra', 'cad') # И даже повторяться 'abracadabra' >>> 'Coordinates: , '.format(lat='37.24N', lon='-115.81W') # Можно вместо индексов явно указывать имена 'Coordinates: 37.24N, -115.81W' # Выравнивания >>> ''.format('left aligned') 'left aligned ' >>> '30>'.format('right aligned') ' right aligned' >>> ''.format('centered') ' centered ' >>> ''.format('centered') # Используем * для заполнения '***********centered***********' # Особый вывод действительных чисел >>> '; '.format(3.14, -3.14) # Всегда показывать знак '+3.140000; -3.140000' >>> '; '.format(3.14, -3.14) # Или выводить пробел, если знака плюса нет ' 3.140000; -3.140000' >>> '; ; '.format(3.14, -3.14, 179e-4) # Можно выводить фиксированное кол-во значащих цифр '3.14; -3.140; 0.018' # Вывод в двоичной, восьмеричной или шестнадцатиричной системе счисления >>> "int: ; hex: ; oct: ; bin: ".format(42) 'int: 42; hex: 2a; oct: 52; bin: 101010' >>> "int: ; hex: ; oct: ; bin: ".format(42) # С префиксом 0x, 0o, 0b 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'

f-строки

Начиная с Python 3.6 появился ещё один способ получения строк, в которые вставлены значения некоторых переменных. Кроме того, что этот способ очень хорошо читается, он ещё и самый быстрый. Начнём с примера:

>>> x = 10 >>> y = 5 >>> print(f" x / 2 = ") >>> 10 x 5 / 2 = 25.0 >>> planets = ["Меркурий", "Венера", "Земля", "Марс"] >>> print(f"Мы живём не планете ") >>> Мы живём не планете Земля

В целом этот подход очень похож на использование метода .format , только необходимо всегда указывать префикс f перед строкой и имена переменных внутри фигурных скобок. Возможностей того, что можно указывать внутри фигурных скобок достаточно много: pep-0498.

Задачи на форматирование строк

S★: Пять цифр после запятой

На вход даются десятичные числа. Необходимо вывести их с в точность 5 цифрами после запятой.

На вход даётся число N — количество десятичный цифр, затем следуют N действительных чисел.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *