- Как вывести самую длинную цепочку из символов в алфавитном порядке?
- Интересная задача в python? Решать нужно в цикле (for) без функций и методов! Можно использовать условные операторы!
- Задача. Спецшифр (Python)
- Решение задачи:
- Самая длинная последовательность символов Python в строке
- 2 ответа
- Лабораторная работа 5 Работа со строками в Python. Лабораторная работа 5 Работа со строками в Python Цель работы познакомится с методами работы со строками. Учащийся должен
Как вывести самую длинную цепочку из символов в алфавитном порядке?
Задание:
Файл содержит 100000 заглавных латинских букв. Найдите подпоследовательность подряд идущих букв, которые при этом расположены по неубыванию в алфавитном порядке (например, в ABCABA это последовательности A, B, C, A, B, A, AB, ABC, BC, AB). В ответе укажите самую длинную из встреченных в файле последовательностей. Если последовательностей такой длины встречается несколько, укажите первую.
(При этом могут встречаться последовательности типа: ABBBCCCDEEFFFF )
Файл
Мой код:
with open('file.txt', mode='r', encoding='utf-8') as f: text = f.read() lst = [chr(i) for i in range(ord('A'), ord('Z') + 1)] abc = ''.join(lst) #алфавит elems = [] #последовательности for i in range(len(text) - 1): passer = False elems.append(text[i]) j = 1 while passer == False: if len(text) < i + j + 1: passer = True else: if ord(text[i + j]) - ord(elems[-1][-1]) < 2: elems[-1] += text[i + j] else: passer = True j += 1 print(max(elems, key=len))
Простой 5 комментариев
Dmustache Usakov Вообще, мне прям понравился алгоритм для алфавита.
Не с точки зрения оптимизации или тд. А просто задумка хоть и простая, но не обычная.
Проблема из-за условия проверки
if ord(text[i + j]) - ord(elems[-1][-1]) < 2
в условии последовательности требуется, чтобы последующая буква была не меньше предыдущей, не понятно, с чего Вы вдруг такое условие написали.
Вообще нет надобности сохранять куда-то сами последовательности, тем более, что требуется только первую из самых длинных. Как можно это сделать:
Проходим по символам последовательности и проверяем, стал ли ord() текущего символа меньше предыдущего. Если стал, то последовательность закончилась. Проверяем, не стала ли эта последовательность больше предыдущей. Если да, обновляем данные максимальной последовательности (стартовую позицию и длину).
В противном случае переходим к следующему.
Примерно так:
text = . text_len = len(text) max_len = 0 max_idx = 0 seq_idx = 0 prev = 0 for i, x in enumerate(text): if ord(x) < prev: seq_len = i-seq_idx if seq_len >max_len: max_len = seq_len max_idx = seq_idx seq_idx = i elif i==text_len-1: seq_len = i-seq_idx+1 if seq_len > max_len: max_len = seq_len max_idx = seq_idx prev = ord(x) print(max_len, text[max_idx:max_idx+max_len])
Интересная задача в python? Решать нужно в цикле (for) без функций и методов! Можно использовать условные операторы!
Напишите программу, которая получает на вход строку, подсчитывает в ней самую длинную последовательность подряд идущих букв “s” и выводит ответ на экран.
Введите строку: ssbbbsssbc
Самая длинная последовательность: 3
count=0
result=0
for i in s:
~~if i=='s': count+=1
~~else:
~~~~if count>result: result=count; count=0
if count>result: result=count;
print (result)
А вот в таком случае ваша программа не работает
port port Искусственный Интеллект (181476) Veter ., Добавь перед print (result) if count>result: result=count
Результат получается = 5, а это не правильно. Вы считаете общее количество "s", а не самую длинную её последовательность.
port port Искусственный Интеллект (181476) Сергей Вилков, Условие задачи поменялось на s='ssbbbsssbcsssss'
И всё-равно вы считаете общую сумму "s", а в условие задачи нужно: подсчитывать самую длинную последовательность подряд идущих букв “s” и выводит ответ на экран?
port port Искусственный Интеллект (181476) Сергей Вилков, В s='ssbbbsssbcsssss' самая длинная последовательность s находится в конце строки и равна 5. Или я что-то путаю?
Что тут интересного? Если тебе нужно написать программу то просто иди в цикле for до конца строки и символы сравнивает
stroka = input()
counter = 1
max = 0
for i in range(1, len(stroka)):
____if stroka[i] == stroka[i-1] == 's':
________counter = counter + 1
________if counter > max:
____________max = counter
____else:
________counter = 1
print(max)
Veter . Мастер (1105) Сергей Вилков, в смысле? А как обращаться к конкретному символу? Без этого никак
Вот так можно переложить ваш код на простой "язык"!
print('Введите строку: ', end = '')
text = input()
text += ''
count_s = 0
letter = 0
for symbol in text:
if symbol == 's':
letter += 1
else:
if letter > count_s:
count_s = letter
letter = 0
print('Самая длинная последовательность: ', count_s)
string = input('Введите строку: ')
count = 0
result = 0
for symbol in string:
~~if symbol == 's':
~~~~count += 1
~~elif count < result and symbol != 's':
~~~~count = 0
~~else:
~~~~if count > result:
~~~~~~result = count
~~~~~~count = 0
if count > result:
~~result = count
print('Самая длинная последовательность: ', result)
Задача. Спецшифр (Python)
Два сотрудника спецслужб переписываются необычным шифром. Каждую букву они шифруют в виде строки, внутри которой есть длинная последовательность букв “s”, а длина самой длинной — это и есть номер буквы алфавита, которую хотят отправить.
Напишите программу, которая получает на вход строку, подсчитывает в ней самую длинную последовательность подряд идущих букв “s” и выводит ответ на экран.
Введите строку: ssbbbsssbc Самая длинная последовательность: 3
Что оценивается
Задание считается успешно выполненным, если:
- результат вывода соответствует условию;
- input содержит корректное приглашение для ввода;
- вывод содержит описание результата (выведенные числа сопровождаются текстовым описанием);
Решение задачи:
string = input('Введите строку: ') s = string + ' ' result = 0 tmp = 0 for symbol in s: if symbol == 's': tmp += 1 elif tmp > result: result = tmp tmp = 0 print('Самая длинная последовательность: ', result)
Для проверки немного усложним, сделаем с окончанием на ssssssss? Например: sskljlkdlkjkljssssslkjlkjlddyssssssssss
Самая длинная последовательность символов Python в строке
Я изучаю питон, и у меня проблема с лабораторией. Чтобы вычислить самую длинную последовательность символа s в строке, можно использовать только базовые инструменты, такие как циклы for.
Код, который я придумал, работает, но мне кажется, что я использую неподходящую логику, добавляя переменную sequence_extended с дополнительным пробелом. Однако без этого расширения последовательность, например, sssdssss расчет работает только для первой последовательности.
Есть ли способ избежать этого расширения? Я пытался найти идею, но решение обычно заключается в использовании функций, которые нам еще не разрешено использовать, таких как списки и т. Д.
sequence = input('enter a line: ') sequence_extended = sequence + ' ' counter = 0 final_counter = 0 for symbol in sequence_extended: if symbol == 's': counter += 1 else: if counter > final_counter: final_counter = counter counter = 0 print("The longest sequence of 's':", final_counter)
2 ответа
sequence = "sssdssss" max_len = 0 for i in range(len(sequence)): if sequence[i] == "s": j = i length = 0 while j < len(sequence) and sequence[j] == "s": length += 1 j += 1 if length >max_len: max_len = length print("The longest sequence of 's':", max_len)
Собственно говоря, я придумал еще менее сложный вариант:
sequence = input('enter a sequence: ') first_counter = 0 second_counter = 0 for symbol in sequence: if symbol == 's': first_counter += 1 if symbol != 's': first_counter = 0 if second_counter < first_counter: second_counter = first_counter print("the longest sequence of 's':", second_counter)
Вроде оптимальное решение данного вопроса. На всякий случай, если кому-то еще предстоит решить такую лабораторию.
Лабораторная работа 5 Работа со строками в Python. Лабораторная работа 5 Работа со строками в Python Цель работы познакомится с методами работы со строками. Учащийся должен
Единственный в мире Музей Смайликов
Самая яркая достопримечательность Крыма
Скачать 0.51 Mb.
Лабораторная работа 5 Работа со строками в Python
Цель работы: познакомится с методами работы со строками.
Учащийся должен:
Владеть:
Навыками составления линейных алгоритмов на языке программирования
Python с использованием строковых данных;
Уметь:
Применять функции и методы строк при обработке строковых данных;
Знать:
Операции и методы обработки строк.
Строка — базовый тип представляющий из себя последовательность символов; str от «string» — «строка».
Функции и методы работы со строками
Функция или метод
Назначение
S1 + S2
Конкатенация (сложение строк)
S1 * 3
Повторение строки
S[i]
Обращение по индексу
S[i:j:step]
Извлечение среза
len(S)
Длина строки
S.join(список)
Соединение строк из последовательности str через разделитель, заданный строкой
S1.count (S[, i, j]) количество вхождений подстроки s в строку s1.
Результатом является число. Можно указать позицию начала поиска i и окончания поиска j
S.find(str, [start],[end])
Поиск подстроки в строке. Возвращает номер первого вхождения или -1
S.index (str,
[start],[end])
Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError
S.rindex(str,
[start],[end])
Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError
S.replace (шаблон, замена)
Замена шаблона
S.split(символ)
Разбиение строки по разделителю
S.upper()
Преобразование строки к верхнему регистру
S.lower()
Преобразование строки к нижнему регистру
Ниже приведена программа, демонстрирующая использование функций и методов работы со строками.
Пример программы на Python
Пример
Вариант 0
Проверить, будет ли строка читаться одинаково справа налево и слева направо (т. е. является ли она палиндромом).
Решение
Сначала введём строку командой: s=input('Введите строку ').
Затем определим логическую переменную flag и присвоим ей значение
1: flag=1.
Для начала в введённой строке нужно удалить пробелы. Для этого воспользуемся циклической конструкцией for, которая выполнится столько раз, какую имеет длину строка. Длину строки определим функцией len(s).
В теле цикла будем проверять следующее условие: s[i]!=' '. Данное логическое выражение будет истинно в том случае, если i-ый элемент строки не будет равен пробелу, тогда выполнится команда следующая после двоеточия: string+=s[i].
К сроке string, которая была объявлена в начале программы, будет добавляться посимвольно строка s, но уже без пробелов.
Для проверки строки на "палиндром" воспользуемся циклической конструкцией for.
Длина половины строки находится делением нацело на 2. Если количество символов нечетно, то стоящий в середине не учитывается, т.к. его сравниваемая пара - он сам.
Количество повторов цикла равно длине половины строки. Длину строки определим функцией len(s), где аргумент введённая нами строка s.
Зная длину строки, можно вычислить количество повторов цикла. Для этого целочисленно разделим длину строки на 2: len(s)//2.
Для задания диапазона для цикла используем функцию range(), в которой аргументом будет являться половина длины строки: range(len(s//2 )).
for i in range(len(s//2 )).
Если символ с индексом i не равен "симметричному" символу с конца строки (который находится путем индексации с конца)
if s[i] != s[-1-i],
то переменной flag присваивается значение 0 и происходит выход из цикла командой break.
Далее, при помощи условной конструкции if-else в зависимости от значения flag либо - 0, либо -1 выводится сообщение, что строка палиндром, либо нет.
Результат выполнения программы с использованием функций и методов р аботы со строками
Пример программы на Python
Результат выполнения программы
Задания для лабораторной работы (по вариантам)
Вариант 1
Дана строка, содержащая русскоязычный текст. Найти количество слов, начинающихся с буквы "е".
Вариант 2
В строке заменить все двоеточия (:) знаком процента (%). Подсчитать количество замен.
Вариант 3
В строке удалить символ точку (.) и подсчитать количество удаленных символов.
Вариант 4
В строке заменить букву(а) буквой (о). Подсчитать количество замен. Подсчитать, сколько символов в строке.
Вариант 5
В строке заменить все заглавные буквы строчными.
Вариант 6
В строке удалить все буквы "а" и подсчитать количество удаленных символов.
Вариант 7
Дана строка. Преобразовать ее, заменив звездочками все буквы "п", встречающиеся среди первых n/2 символов. Здесь n - длина строки.
Вариант 8
Дана строка, заканчивающаяся точкой. Подсчитать, сколько слов в строке.
Вариант 9
Определить, сколько раз в тексте встречается заданное слово.
Вариант 10
Дана строка-предложение на английском языке. Преобразовать строку так, чтобы каждое слово начиналось с заглавной буквы.
Вариант 11
Дана строка. Подсчитать самую длинную последовательность подряд идущих букв «н». Преобразовать ее, заменив точками все восклицательные знаки.
Вариант 12
Дана строка. Вывести все слова, оканчивающиеся на букву "я".
Вариант 13
Дана строка символов, среди которых есть одна открывающаяся и одна закрывающаяся скобки. Вывести на экран все символы, расположенные внутри этих скобок.
Вариант 14
Дана строка. Вывести все слова, начинающиеся на букву "а" и слова, оканчивающиеся на букву "я".
Вариант 15
Дана строка текста. Подсчитать количество букв «т» в строке.