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. Читать