Напишите программу которая находит все различные цифры в символьной строке python
Перейти к содержимому

Напишите программу которая находит все различные цифры в символьной строке python

Выбрать из строки числа

Дана строка, содержащая натуральные числа и слова. Необходимо сформировать список из чисел, содержащихся в этой строке. Например, задана строка «abc83 cde7 1 b 24». На выходе мы должны получить список [83, 7, 1, 24].

Следует посимвольно перебирать строку. Если очередной символ цифра, надо добавить ее в новую строку. Далее проверять символы за ней, и если они тоже цифры, то добавлять их в конец этой новой подстроки из цифр. Когда очередной символ окажется не цифрой, или будет достигнут конец строки, то надо преобразовать строку из цифр в число и добавить в список.

Обратите внимание, что данное решение извлекает именно числа, а не цифры. Иначе мы бы не получили число 78, а получили отдельно цифру 7 и цифру 8. Задача на извлечение цифр существенно проще.

Решение через цикл for:

Если в строке числа всегда отделены от слов пробелами, задача решается проще:

Здесь происходит разделение строки на слова по пробелам. В цикле с помощью метода isnumeric() каждое слово проверяется, является ли оно числом. Подобную задачу можно решить в одну строку, если использовать функцию filter().

В функцию filter() передается лямбда-выражение, проверяющее слова, и список слов. Функция возвращает список строк-чисел. Далее с помощью генератора списка строки преобразовываются в целочисленный тип.

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

Напишите программу которая находит все различные цифры в символьной строке python

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

isalpha() : возвращает True, если строка состоит только из алфавитных символов

islower() : возвращает True, если строка состоит только из символов в нижнем регистре

isupper() : возвращает True, если все символы строки в верхнем регистре

isdigit() : возвращает True, если все символы строки — цифры

isnumeric() : возвращает True, если строка представляет собой число

startswith(str) : возвращает True, если строка начинается с подстроки str

endswith(str) : возвращает True, если строка заканчивается на подстроку str

lower() : переводит строку в нижний регистр

upper() : переводит строку в вехний регистр

title() : начальные символы всех слов в строке переводятся в верхний регистр

capitalize() : переводит в верхний регистр первую букву только самого первого слова строки

lstrip() : удаляет начальные пробелы из строки

rstrip() : удаляет конечные пробелы из строки

strip() : удаляет начальные и конечные пробелы из строки

ljust(width) : если длина строки меньше параметра width, то справа от строки добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по левому краю

rjust(width) : если длина строки меньше параметра width, то слева от строки добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по правому краю

center(width) : если длина строки меньше параметра width, то слева и справа от строки равномерно добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по центру

find(str[, start [, end]) : возвращает индекс подстроки в строке. Если подстрока не найдена, возвращается число -1

replace(old, new[, num]) : заменяет в строке одну подстроку на другую

split([delimeter[, num]]) : разбивает строку на подстроки в зависимости от разделителя

join(strs) : объединяет строки в одну строку, вставляя между ними определенный разделитель

Например, если мы ожидаем ввод с клавиатуры числа, то перед преобразованием введенной строки в число можно проверить, с помощью метода isnumeric() введено ли в действительности число, и если так, то выполнить операцию преобразования:

Проверка, начинается или оканчивается строка на определенную подстроку:

Удаление пробелов в начале и в конце строки:

Дополнение строки пробелами и выравнивание:

Поиск в строке

Для поиска подстроки в строке в Python применяется метод find() , который возвращает индекс первого вхождения подстроки в строку и имеет три формы:

find(str) : поиск подстроки str ведется с начала строки до ее конца

find(str, start) : параметр start задает начальный индекс, с которого будет производиться поиск

find(str, start, end) : параметр end задает конечный индекс, до которого будет идти поиск

Если подстрока не найдена, метод возвращает -1:

Замена в строке

Для замены в строке одной подстроки на другую применяется метод replace() :

replace(old, new) : заменяет подстроку old на new

replace(old, new, num) : параметр num указывает, сколько вхождений подстроки old надо заменить на new

Разделение на подстроки

Метод split() разбивает строку на список подстрок в зависимости от разделителя. В качестве разделителя может выступать любой символ или последовательность символов. Данный метод имеет следующие формы:

split() : в качестве разделителя используется пробел

split(delimeter) : в качестве разделителя используется delimeter

split(delimeter, num) : параметр num указывает, сколько вхождений delimeter используется для разделения. Оставшаяся часть строки добавляется в список без разделения на подстроки

Соединение строк

При рассмотрении простейших операций со строками было показано, как объединять строки с помощью операции сложения. Другую возможность для соединения строк представляет метод join() : он объединяет список строк. Причем текущая строка, у которой вызывается данный метод, используется в качестве разделителя:

Вместо списка в метод join можно передать простую строку, тогда разделитель будет вставляться между символами этой строки:

Напишите программу которая находит все различные цифры в символьной строке python

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

5.5 Decimal number to Roman — Шаг 1

В римской системе счисления для обозначения чисел используются следующие символы (справа записаны числа, которым они соответствуют в десятичной системе счисления):

I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000

Будем использовать вариант, в котором числа 4, 9, 40, 90, 400 и 900 записываются как вычитание из большего числа меньшего: IV, IX, XL, XC, CD и CM, соответственно.

Формат ввода:

Строка, содержащая натуральное число n, 0 < n < 4000.

Формат вывода:

Строка, содержащая число, закодированное в римской системе счисления.

Sample Input 1:

Sample Output 1:

Sample Input 2:

Sample Output 2:

Sample Input 3:

Sample Output 3:

5.4 Roman number to decimal

В римской системе счисления для обозначения чисел используются следующие символы (справа записаны числа, которым они соответствуют в десятичной системе счисления):

I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000

Будем использовать вариант, в котором числа 4, 9, 40, 90, 400 и 900 записываются как вычитание из большего числа меньшего: IV, IX, XL, XC, CD и CM, соответственно.

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

Формат ввода:

Строка, содержащая число, закодированное в римской системе счисления. Гарантируется, что число меньше 4000.

Формат вывода:

Строка, содержащая число в десятичной системе счисления, соответствующее введённому.

Sample Input 1:

Sample Output 1:

Sample Input 2:

Sample Output 2:

Sample Input 3:

Sample Output 3:

5.2 Old LCD calculator

Напишите программу, которая выводит число в стиле LCD калькулятора.

На вход программе подаётся последовательность цифр, которую нужно вывести на экран в специальном стиле (см. пример).

Размер всех цифр 4 символа в ширину и 7 символов в высоту. Между цифрами в выводе должен быть один пустой столбец. Перед первой цифрой не должно быть пробелов.

Выведенные цифры должны быть обведены рамочкой, в углах которой находится символ x («икс»), горизонтальная линия создаётся из символа — («дефис»), а вертикальная — из символа вертикальной черты: |.

Формат ввода:

Строка произвольной длины (минимум один символ), содержащая последовательность цифр.

Формат вывода:

9 строк, содержащих цифры, записанные в указанном в задании формате.

Sample Input:

Sample Output:

5.1 Collatz conjecture or the 3n + 1 problem — Шаг 1

Напишите функцию, которая для заданного натурального числа n генерирует последовательность чисел, описанную в гипотезе Коллатца:

Если n четное, то делим его пополам, если нечётное, то умножаем на 3 и прибавляем 1. С итогом вычисления снова проделываем эту операцию до тех пор, пока в результате не будет получено число 1.

Например, для числа n = 17 последовательность вычислений выглядит следующим образом: 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1

Предполагается, что подобная последовательность остановится на числе 1 для любого начального натурального числа n.

Формат ввода:

Строка, содержащая единственное целое число n, n > 0.

Формат вывода:

Строка, содержащая последовательность целых чисел, разделённых пробелом.

Sample Input 1:

Sample Output 1:

17 52 26 13 40 20 10 5 16 8 4 2 1

Sample Input 2:

Sample Output 2:

4.4 Unicode Caesar cipher

Суть задачи та же, что и Caesar cipher, с одним отличием: кодируются символы из интервала 1F600—1F64F таблицы символов Юникода. Используется кодировка UTF-8.

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

Напишите программу, которая шифрует текст шифром Цезаря.

Формат ввода: На первой строке указывается используемый сдвиг шифрования: целое число. Положительное число соответствует сдвигу вправо. На второй строке указывается непустая фраза для шифрования.

Формат вывода: Единственная строка, в которой записана фраза: Result: «. » , где вместо многоточия внутри кавычек записана зашифрованная последовательность.

Sample Input 1:

Sample Output 1:

Sample Input 2:

Sample Output 2:

Вариант 1:

Вариант 2:

4.3 Caesar cipher

Шифр Цезаря заключается в замене каждого символа входной строки на символ, находящийся на несколько позиций левее или правее его в алфавите.

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

Напишите программу, которая шифрует текст шифром Цезаря.

Используемый алфавит − пробел и малые символы латинского алфавита: ‘ abcdefghijklmnopqrstuvwxyz’

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

Формат вывода: Единственная строка, в которой записана фраза: Result: «. » , где вместо многоточия внутри кавычек записана зашифрованная последовательность.

Sample Input 1:

Sample Output 1:

Sample Input 2:

Sample Output 2:

Sample Input 3:

Sample Output 3:

4.2 Base RLE decode

Кодирование длин серий — это базовый алгоритм сжатия данных. В этой задаче мы реализуем алгоритм дешифровки строк, закодированных с помощью одного из самых простых вариантов кодирования длин серий. На вход алгоритму подаётся строка, содержащая цифры и символы латинского алфавита. Эта строка разбивается на так называемые «серии», которые кодируются парой число-символ или просто символ (в таком случае число считается равным единице). Результат должен содержать эти серии в том же порядке, что они и встречаются в исходной строке, при этом каждая серия раскрывается в последовательность символов соответствующей длины.

Например, рассмотрим строку

Разобъём её на серии

После чего преобразуем серии и получим исходную закодированную строку:

Формат ввода:

Одна строка, содержащая закодированную последовательность.

Формат вывода:

Строка, содержащая раскодированную последовательность.

Sample Input:

Sample Output:

4.1 Base RLE encode

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

Разобъём её на серии

aaa b cccc CC a B

После чего закодируем серии и получим итоговую строку, которую и будем считать результатом работы алгоритма.

Формат ввода:

Одна строка, содержащая произвольные символы латинского алфавита.

Формат вывода: Строка, содержащая закодированную последовательность.

Sample Input 1:

Sample Output 1:

Sample Input 2:

Sample Output 2:

3.9 Duplicates in list

Напишите программу, которая принимает на вход список целых чисел и выводит на экран значения, которые повторяются в нём более одного раза. Для решения задачи может пригодиться метод sort списка.

Формат ввода:

Одна строка с целыми числами, разделёнными пробелом.

Формат вывода:

Строка, содержащая числа, разделённые пробелом. Числа не должны повторяться, порядок вывода может быть произвольным.

Sample Input:

4 8 0 3 4 2 0 3

Sample Output:

3.8 Spiral matrix

Выведите таблицу размером n × n, заполненную целыми числами от 1 до n**2 по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке, как показано в примере.

Формат ввода: Одна строка, содержащая одно целое число n, n > 0.

Формат вывода: Таблица из n строк, значения в строках разделены пробелом.

Sample Input:

Sample Output:

3.7 Multiple list index search

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

Позиции в списке нумеруются с нуля. Если число x не найдено в списке, нужно вывести строку «None» (без кавычек, с большой буквы).

Формат ввода: На первой строке содержатся значения списка — целые числа, разделённые пробелом. На второй строке содержится целое число, позиции которого нужно найти.

Формат вывода: Одна строка, в которой содержится слово «None» или через пробел перечислены числа — позиции, на которых число x встречается в списке lst. Позиции должны быть выведены в порядке возрастания.

Sample Input 1:

5 8 2 7 8 8 2 4

Sample Output 1:

Sample Input 2:

5 8 2 7 8 8 2 4

Sample Output 2:

3.6 Number sequence

Напишите программу, которая выводит n первых элементов последовательности 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 . (число повторяется столько раз, чему равно).

Формат ввода: Строка, содержащая одно целое число n, n > 0

Формат вывода: Строка, содержащая требуемую последовательность чисел, разделённых пробелом.

Sample Input:

Sample Output:

3.5 Cache function

Имеется реализованная функция f(x), принимающая на вход целое число x, которая вычисляет некоторое целочисленое значение и возвращает его в качестве результата работы. Функция вычисляется достаточно долго, ничего не выводит на экран, не пишет в файлы и зависит только от переданного аргумента x.

Напишите программу, которая вычисляет значение этой функции для n чисел. Для ускорения вычисления необходимо сохранять уже вычисленные значения функции при известных аргументах. Обратите внимание, что в этой задаче установлено достаточно сильное ограничение в две секунды по времени исполнения кода на тесте.

Формат ввода: На первой строке находится число n − количество значений, на которых нужно посчитать функцию. После этого следует n строк, на каждой строке по одному целому числу.

Формат вывода: n строк, в каждой из которой результат вычисления функции на соответствующем аргументе.

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

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