30.01.2024

Ввести список в одну строку Питон (Python)

Как ввести числа в список из одной строки?

Что необходимо:

  • Команда input() для ввода строки.
  • Команда split() для разделения строки по пробелу и получения списка строк.
  • Функция map() для применения функции к каждому элементу списка.
  • Функция list() для преобразования объекта к списку.

Демонстрация

s = input().split()

print(s)

Ввод: 123 45 -19

Вывод: ['123', '45', '-19']

Преобразуем каждую строку списка s к целому числу функцией map().

s = map(int, input().split())

print(s)

Ввод: 23 12 -56

Вывод: <map object at 0x00000000030EF608>

Преобразуем map объект к списку.

s = map(int, input().split())

s = list(s)

print(s)

Ввод: 23 -35 45

Вывод: [23, -35, 45]

Ввод чисел в список из одной строки (программа на языке Python)

s = list(map(int, input().split()))

print(s)

А если нужно ввести в список нецелые числа?

Как получить все возможные подстроки из заданной строки на Питоне (Python)

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

Пусть дана строка s. Запустим внешний цикл с счетчиком i от 0 индекса строки до конца строки, а в нем цикл по счетчику j от значения i до конца строки. Получим подстроку срезом s[i: j+1].

s = 'Риса'

for i in range(len(s)):

    for j in range(i,len(s)):

        print(s[i:j+1])

Результат запуска программы

Все подстроки из заданной строки

Если необходимо обработать по пути следования во внутреннем цикле текущую подстроку, то к символу s[j] нужно задать вопрос.

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

s = '1707Риса119'

m = 0

for i in range(len(s)):

    k = 0 #счетчик цифр текущей подстроки

    for j in range(i,len(s)):

        if s[j]>='0' and s[j]<='9':

            k+=1

        if k == len(s[i:j+1]): #счетчик цифр равен длине текущей подстроки

            #print(s[i:j+1])

            m = max(m,len(s[i:j+1])) 

print(m)

Ответ: 4

А как найти среди этих чисел наибольшее?

Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита и цифры от 0 до 9 включительно. Определите в прилагаемом файле максимальное количество идущих подряд символов, которые могут представлять запись числа в шестнадцатеричной системе счисления. Программа на Питоне (Python). ЕГЭ по информатике

Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита и цифры от 0 до 9 включительно. Определите в прилагаемом файле максимальное количество идущих подряд символов, которые могут представлять запись числа в шестнадцатеричной системе счисления.

Для выполнения этого задания следует написать программу. Числа с незначащими нулями в ответ брать не следует.

Как будем решать задачу

Задачу на обработку строки, сохраненной в файле, решали ранее в этом блоге. (Задача. Последовательность максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е. ABCD. Читать)

  • Считаем строку из файла
  • Получим все возможные подстроки конструкцией вложенных циклов (публикация Как получить все возможные подстроки из заданной строки)
  • В текущей подстроке проверим символ на принадлежность алфавиту 16-ой с.с. Если это так, будем копить счетчик 16-ых цифр.
  • Если счетчик 16-ых цифр равен длине подстроки, это значит, что в ней нет посторонних символов (также добавим условие, что первый символ подстроки это не цифра 0), найдем максимум длины подстроки, иначе прервем обработку подстроки break.

Программа решения задачи на языке Python

f = open('24_10724.txt')

s = f.readline()

m = 0

alf = '0123456789ABCDEF'

for i in range(len(s)):

    k = 0

    for j in range(i,len(s)):

        if s[j] in alf:

            k+=1

        if k==len(s[i:j+1]) and s[i:j+1][0]!='0':

            m = max(m,len(s[i:j+1]))

        else:

            break

print(m)

Ответ: 21

23.01.2024

У исполнителя Кузнечик две команды Прибавь 3 Вычти 2. Сколько различных чисел можно получить из числа 1 с помощью программы, которая содержит ровно 68 команд? Программа решения задачи на языке Python

Задача. У исполнителя Кузнечик две команды:

  1. Прибавь 3
  2. Вычти 2

Программа для Кузнечика – это последовательность команд. Первая из них увеличивает число на экране на 3, вторая – уменьшает его на 2 (отрицательные числа допускаются). Сколько различных чисел можно получить из числа 1 с помощью программы, которая содержит ровно 68 команд?

Как будем решать задачу

Создадим пользовательскую функцию f(x, k), которая будет получать следующее число (+3 или -2) и уменьшать количество команд.

Пример:

Дерево

Вызов f(x+3, k-1) будет получать число за счет команды x+3, количество команд уменьшится на 1. Возникнет рекурсия. Функция будет вызывать саму себя. Чтобы остановить вызовы функций воспользуемся условием k == 0, то есть команд для выполнения не осталось, в этом случае выведем число x.

if k == 0:

    print(x)

else:

    f(x+3, k-1)

    f(x-2, k-1)

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

Если вызовем функцию f(1, 2), получим числа за 2 команды (как на рисунке выше).

def f(x,k):

    if k==0:

        print(x,end = ' ')

    else:

        f(x+3,k-1)

        f(x-2,k-1)

f(1,2)

Вывод: 7 2 2 -3

Чтобы сохранить различные числа воспользуемся множеством m. В качестве ответа выведем длину множества len(m).

def f(x,k):

    if k==0:

        m.add(x)

        print(x,end = ' ')

    else:

        f(x+3,k-1)

        f(x-2,k-1)

m = set()

f(1,2)

print('Длина множества ',len(m))

Вывод: 7 2 2 -3 Длина множества 3

Но для f(1,68) программа работает очень долго, происходит много вызовов функции (причем с одними и теми же аргументами), чтобы сократить время, воспользуемся кэшированием.

Модуль functools включает набор функций высокого уровня, взаимодействующих с другими функциями или возвращающие другие функции.

Декоратор @lru_cache() модуля functools оборачивает функцию с переданными в нее аргументами и запоминает возвращаемый результат, соответствующий этим аргументам. Такое поведение может сэкономить время и ресурсы, когда "дорогая" или связанная с вводом/выводом функция периодически вызывается с одинаковыми аргументами.

Аргумент maxsize позволяет сохранить результаты последних вызовов @lru_cache(maxsize = 128).

Программа решения на языке Python

from functools import *

@lru_cache(maxsize = 64)

def f(x,k):

    if k==0:

        m.add(x)

        #print(x,end = ' ')

    else:

        f(x+3,k-1)

        f(x-2,k-1)

m = set()

f(1,68)

print(len(m))

Ответ: 69

Для эксперимента можно изменять значение аргумента maxsize и замечать время выполнения программы.

22.01.2024

Работа с файлами в Питоне. Задачи

Покажем на примере задачи, как считать данные из файла с помощью программы на языке Python.

Задача. В текстовом файле ex1.txt хранится набор чисел (в каждой строке одно целое число -1000<=x<=1000). Найти максимальное число.

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

Откроем файл функцией open('ex1.txt') и отождествим его с переменной f. Далее будем пользоваться переменной f для обращения к файлу.

f = open('ex1.txt')

В данном файле 10 строк, в каждой из которых хранится целое число.

Запустим цикл и считаем строку методом readline()

f = open('ex1.txt')

n = 10

for k in range(n):

    s = f.readline()

Чтобы строку преобразовать в целое число применим функцию int().

f = open('ex1.txt')

n = 10

for k in range(n):

    x = int(f.readline())

    print(x)

Теперь осталось найти максимальное число.

m = -1000

f = open('ex1.txt')

n = 10

for k in range(n):

    x = int(f.readline())

    m = max(m,x)

print(m)

f.close()

Чтобы закрыть файл применим метод close()

Ответ: 723

Существует метод для считывания всех строк файла readlines(). В результате получаем список строк.

Линейная программа решения задачи на языке Python

f = open('ex1.txt')

a = list(map(int, f.readlines())) # map применяет int к каждой считываемой строке, list() возвращает список

n = len(a)

print('чисел всего:',n)

print('список чисел:', a)

print('максимум:', max(a))

f.close()

Задача на обработку строки, сохраненной в файле. Последовательность максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е. ABCD и т.д. ЕГЭ по информатике. Задание № 24. Читать

16.01.2024

Последовательность максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е. ABCD. ЕГЭ по информатике. Задание № 24. Решение на языке Python

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

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом abcd.txt. В ответе запишите длину искомой последовательности.

Как будем решать задачу

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

Запустим цикл по длине строки  и будем сравнивать два соседних символа, если это действительно две соседние буквы алфавита, то будем увеличивать счётчик длины, в противном случае счетчик длины примем за 1. Затем найдем максимум среди значений счетчика длины. 

Как проверить, что два символа это соседние символы алфавита? 

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

Для вычисления кода символа будем использовать функцию ord().

Программа решения задачи на языке Python

f = open('abcd.txt')

s = f.readline()

k = 1

m = 1

for x in range(len(s)-1):

    if ord(s[x+1])-ord(s[x]) == 1:

        k+=1

    else:

        k = 1

    m = max(m,k)

print(m)

Ответ: 5