Как найти среднюю букву в слове python
Перейти к содержимому

Как найти среднюю букву в слове python

  • автор:

Подсчет строк, слов и символов в файле

Цикл for языка Python извлекает из файлового объекта данные построчно (одну строку на каждой итерации цикла). Таким образом, количество итераций цикла определит количество строк в файле.

Встроенная функция len() языка Python считает количество элементов в передаваемой в нее объекте. С ее помощью находится количество символов в каждой строке.

Строковый метод split() разбивает строку на части. По-умолчанию разделение происходит по местам расположения пробелов в строке. Таким образом, мы можем определить количество слов в каждой строке, посчитав с помощью len() слова в получившемся после применения split() списке.

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

file = open('text.txt') lines = 0 words = 0 symbols = 0 for line in file: lines += 1 words += len(line.split()) symbols += len(line) print("Lines:", lines) print("Words:", words) print("Symbols:", symbols)

Пусть содержимое файла text.txt будет таким:

one two three city town big small

Тогда программа даст следующий результат:

Lines: 3 Words: 7 Symbols: 34

Cимволами считаются не только буквы, также пробелы и переходы на новую строку (символ ‘\n’ ). Если требуется не учитывать переход на новую строку как символ, его можно «отрезать» с помощью строкового метода strip() . Делается это перед тем, как строка передается в функцию len() : symbols += len(line.strip(‘\n’)) .

Если данную задачу надо решить без использования продвинутых возможностей (встроенных функций и методов) языка программирования Python, а в рамках изучения алгоритмов или на более «низком» уровне, то программа может выглядеть так:

file = open('text.txt') text = file.read() lines = 0 words = 0 symbols = 0 in_word = False for char in text: symbols += 1 if char == '\n': lines += 1 if char != ' ' and char != '\n' and in_word == False: words += 1 in_word = True elif char == ' ' or char == '\n': in_word = False print("Lines:", lines) print("Words:", words) print("Symbols:", symbols)

Здесь на каждой итерации цикла мы имеем дело не с целой строкой, а с очередным символом. При этом увеличиваем на единицу переменную, хранящую количество символов, и, если текущий символ — это переход на новую строку, переменную для подсчета количества строк.

Для подсчета слов требуется определить в программе еще одну переменную, в которой будет храниться «сигнал», находимся ли мы внутри слова. Если это так, то очередной непробельный символ не следует считать началом нового слова и не надо увеличивать счетчик слов.

Алгоритм подсчета слов в программе выше следующий. Если текущий символ не пробел И не переход на новую строку, И ранее мы находились вне слова ( in_word == False ), то есть соблюдены все три условия сразу, значит началось новое слово. Поэтому увеличиваем счетчик слов и устанавливаем in_word в значение True . Последнее действие позволит на следующей итерации цикла, при условии обработки второй и послеющих букв слова, не соблюдаться условию in_word == False и не увеличивать счетчик слов.

Мы «сбрасываем» in_word в False , только когда встречаем пробельный символ ИЛИ переход на новую строку (любое одно из двух условий).

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

. for char in text: if char == '\n': lines += 1 else: symbols += 1 .

Если очередной символ — это переход на новую строку, увеличивается счетчик строк. В остальных случаях, — счетчик символов.

Если файл большой, то считывать сразу все его содержимое в строковую переменную ( text = file.read() ) неблагоразумно. Если читать файл посимвольно ( file.read(1) ), то условием завершения работы цикла будет момент возрата методом read() пустой строки, что означает конец файла (в других языках может быть специальный символ конца файла, доступный через идентификатор EOF — end of file).

lines = 0 words = 0 symbols = 0 in_word = False with open('text.txt') as file: while True: char = file.read(1) if char == '': break symbols += 1 if char == '\n': lines += 1 if char not in (' ', '\n') and not in_word: words += 1 in_word = True elif char in (' ', '\n'): in_word = False print("Lines:", lines) print("Words:", words) print("Symbols:", symbols)

В этом примере для открытия файла используется оператор with , который рекомендован для работы с файлами. Выражения char not in (‘ ‘, ‘\n’) and not in_word и char in (‘ ‘, ‘\n’) по смыслу аналогичны соответствующим логическим выражениям из предыдущих вариантов программы.

X Скрыть Наверх

Решение задач на Python

Вывод определённого символа в строке

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

Lieber_hans
Новичок

Пользователь
Фев 16, 2022 4 0 1

«Напишите программу, которая первым аргументом командной строки получает слово, а затем выводит центральный символ этого слова. Если в слове четное число букв, то она должна вывести символ, который находится левее середины. Например, для слова Python — это будет t. «

Вот такая задача. Категорически не понимаю, каким способ подступить к этой задаче. Подскажите, пожалуйста, чем подробнее, тем лучше.
Заранее спасибо

regnor
Модератор

Команда форума
Модератор
Июл 7, 2020 2 531 443 83

аргументы командной строки можно обработать с помощью модуля argparse
вам нужно получить индекс буквы в слове, можно сделать так
получаете длину слова, делите на два, (округляете до целого, если нужно) — это будет середина, далее если длина слова четное то индекс искомой буквы — это середина минус один, если нечетное — то середина и есть индекс искомой буквы

Вывести середину слова

В пирожке самое вкусное – начинка, в конфете – орешек внутри, в строке – средняя буковка.
Ой, не самая вкусная, а та, что нужно вывести!

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

Формат ввода
Вводится строка.

Формат вывода
Вывести среднюю букву, если длина слова нечётная, и последнюю из первой половины слова, если чётная.

Пример 1
Ввод Вывод
Python
t
Пример 2
Ввод Вывод
Windows
d
Примечания
В задаче нельзя использовать условный оператор.

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

В середину введенного слова вставить звездочку и поменять части слова местами
срочно решите 2)В середину введенного слова вставить звездочку и поменять части слова местами.

VSTO Вставка символа в середину слова
Здравствуйте, уважаемые форумчане! В коде понадобилось пройти циклом по выделению и в каждом.

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

3540 / 2144 / 566
Регистрация: 02.09.2015
Сообщений: 5,435

print((s := input())[-(len(s) + 1) // 2])

531 / 309 / 76
Регистрация: 10.04.2012
Сообщений: 1,143
Записей в блоге: 2

Это оператор присваивания := ?

Среди стандартных операторов Python о таком ничего не говориться

Как вывести нужное количество букв?

Выводит полностью слово,которое указывается при вызове функции, как сделать чтобы выводило среднюю букву?

Отслеживать
76.7k 6 6 золотых знаков 54 54 серебряных знака 121 121 бронзовый знак
задан 22 мая 2019 в 5:22
Владислав Гребенюк Владислав Гребенюк
11 1 1 серебряный знак 1 1 бронзовый знак

Добавьте, пожалуйста, в вопрос больше информации: входные данные, результат и что не получилось у вас. Например, вводим: «abc» получаем «b», вводим «abcd» получаем «c»

22 мая 2019 в 5:35

Кстати, полезно ещё научиться самостоятельно выявлять ошибки в коде. В вашем случае достаточно было бы вставить print(b) сразу после сплита – и становится ясно, что эта строка выполняется не так, как ожидалось. А дальше быстрый поиск описания этого метода и коррекция кода. Легко же (:

22 мая 2019 в 5:47

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Функция str.split принимает разделитель, который вы не дали. В итоге b равен списку с исходной строкой b = [»] . Решений масса:

Вариант 1. b = list(s) – простое преобразование строки в список. Каждый символ станет отдельным элементом списка.

Вариант 2. b = s – объект строки в Питоне поддерживает все те же самые методы индексирования и слайсинга, что и список, поэтому преобразовывать строку к списку не имеет смысла.

Комментарий насчёт именования: если называете функцию getMiddle , то пусть она возвращает значение, а не выводит его. Иначе это какой-то showMiddle получается.

Небольшое прояснение по методу split . Он принимает строку-сепаратор (который по умолчанию равен знаку пробела – то есть, разделяет слова). Примеры использования:

# дефолтное значение разделителя – пробел >>> str.split('Hello, World!') ['Hello,', 'World!'] # можно обращаться напрямую к объекту # и передавать строку, а не символ >>> '1713abc2834bce1895'.split('bc') ['1713a', '2834', 'e1895'] 

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

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