Подсчет строк, слов и символов в файле
Цикл 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']