Python-сообщество
- Начало
- » Python для новичков
- » Помогите
#1 Фев. 23, 2019 19:16:08
mashamironova081999 Зарегистрирован: 2018-12-19 Сообщения: 18 Репутация: 0 Профиль Отправить e-mail
Помогите
Ввести с клавиатуры символьную строку и составить новую строку, удалив из исходной все пробелы.
Пример:
Введите строку:
Вася пошел гулять.
Васяпошелгулять.
#2 Фев. 23, 2019 23:09:44
panama555 Зарегистрирован: 2019-02-19 Сообщения: 175 Репутация: 4 Профиль Отправить e-mail
Помогите
a=input("Введите строку ") b="" for x in a: if x!=" ": b=b+x print(b)
Ввести с клавиатуры символьную строку и определить сколько в ней слов python



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Строки
Мы уже рассматривали строки как простой тип данных наряду с целыми и вещественными числами и знаем, что строка – это последовательность символов, заключенных в одинарные или двойные кавычки.
В Python нет символьного типа – типа данных, объектами которого являются одиночные символы. Однако язык позволяет рассматривать строки как объекты, состоящие из подстрок длинной в один и более символов. При этом, в отличие от списков, строки не принято относить к структурам данных. Видимо потому, что структуры данных состоят из более простых типов данных, а для строк в Python нет более простого (символьного) типа.
С другой стороны, строка, как и список, – это упорядоченная последовательность элементов. Следовательно, из нее можно извлекать отдельные символы и срезы.
>>> s = "Hello, World!" >>> s[0] 'H' >>> s[7:] 'World!' >>> s[::2] 'Hlo ol!'
В последнем случае извлечение идет с шагом, равным двум, то есть извлекается каждый второй символ. Извлекать срезы с шагом также можно из списков.
Важным отличием от списков является неизменяемость строк в Python. Нельзя перезаписать какой-то отдельный символ или срез в строке:
>>> s[-1] = '.' Traceback (most recent call last): File "", line 1, in TypeError: 'str' object does not support item assignment
Интерпретатор сообщает, что объект типа str не поддерживает присвоение элементам.
Если требуется изменить строку, то можно создать новую из срезов старой:
>>> s = s[0:-1] + '.' >>> s 'Hello, World.'
В примере берется срез из исходной строки, соединяется с другой строкой. Получается новая строка, которая присваивается переменной s . Ее старое значение при этом теряется.
Методы строк
В Python для строк есть множество методов. Посмотреть их можно по команде dir(str) , получить информацию по каждому – help(str.имя_метода) . Рассмотрим наиболее интересные из них.
Методы split() и join()
Метод split() позволяет разбить строку по пробелам. В результате получается список слов. Если пользователь вводит в одной строке ряд слов или чисел, каждое из которых должно в программе обрабатываться отдельно, то без split() не обойтись.
>>> s = input() red blue orange white >>> s 'red blue orange white' >>> sl = s.split() >>> sl ['red', 'blue', 'orange', 'white'] >>> s 'red blue orange white'
Список, возвращенный методом split() , мы могли бы присвоить той же переменной s , то есть s = s.split() . Тогда исходная строка была бы потеряна. Если она не нужна, то лучше не вводить дополнительную переменную.
Метод split() может принимать необязательный аргумент-строку, указывающей по какому символу или подстроке следует выполнить разделение:
>>> s.split('e') ['r', 'd blu', ' orang', ' whit', ''] >>> '40030023'.split('00') ['4', '3', '23']
Метод строк join() выполняет обратное действие. Он формирует из списка строку. Поскольку это метод строки, то впереди ставится строка-разделитель, а в скобках — передается список:
>>> '-'.join(sl) 'red-blue-orange-white'
Если разделитель не нужен, то метод применяется к пустой строке:
>>> ''.join(sl) 'redblueorangewhite'
Методы find() и replace()
Данные методы строк работают с подстроками. Методы find() ищет подстроку в строке и возвращает индекс первого элемента найденной подстроки. Если подстрока не найдена, то возвращает -1.
>>> s 'red blue orange white' >>> s.find('blue') 4 >>> s.find('green') -1
Поиск может производиться не во всей строке, а лишь на каком-то ее отрезке. В этом случае указывается первый и последний индексы отрезка. Если последний не указан, то ищется до конца строки:
>>> letters = 'ABCDACFDA' >>> letters.find('A', 3) 4 >>> letters.find('DA', 0, 6) 3
Здесь мы ищем с третьего индекса и до конца, а также с первого и до шестого. Обратите внимания, что метод find() возвращает только первое вхождение. Так выражение letters.find(‘A’, 3) последнюю букву ‘A’ не находит, так как ‘A’ ему уже встретилась под индексом 4.
Метод replace() заменяет одну подстроку на другую:
>>> letters.replace('DA', 'NET') 'ABCNETCFNET'
Исходная строка, конечно, не меняется:
>>> letters 'ABCDACFDA'
Так что если результат надо сохранить, то его надо присвоить переменной:
>>> new_letters = letters.replace('DA', 'NET') >>> new_letters 'ABCNETCFNET'
Метод format()
Строковый метод format() уже упоминался при рассмотрении вывода на экран с помощью функции print() :
>>> print("This is a . It's .".format("ball", "red")) This is a ball. It's red.
Однако к print() он никакого отношения не имеет, а применяется к строкам. Лишь потом заново сформированная строка передается в функцию вывода.
Возможности format() широкие, рассмотрим основные.
>>> s1 = "length - <>, width - <>, height - <>" >>> s1.format(3, 6, 2.3) 'length - 3, width - 6, height — 2.3'
Если фигурные скобки исходной строки пусты, то подстановка аргументов идет согласно порядку их следования. Если в фигурных скобках строки указаны индексы аргументов, порядок подстановки может быть изменен:
>>> s2 = "height - , length - " >>> s2.format(3, 6) 'height - 6, length - 3'
Кроме того, аргументы могут передаваться по слову-ключу:
>>> info = "This is a . It's ." >>> info.format(subj="table", prop="small") "This is a table. It's small."
Пример форматирования вещественных чисел:
>>> " ".format(3.33333, 10/6) '1.67 3.333'
Практическая работа
- Вводится строка, включающая строчные и прописные буквы. Требуется вывести ту же строку в одном регистре, который зависит от того, каких букв больше. При равном количестве преобразовать в нижний регистр. Например, вводится строка «HeLLo World», она должна быть преобразована в «hello world», потому что в исходной строке малых букв больше. В коде используйте цикл for , строковые методы upper() (преобразование к верхнему регистру) и lower() (преобразование к нижнему регистру), а также методы isupper() и islower() , проверяющие регистр строки или символа.
- Строковый метод isdigit() проверяет, состоит ли строка только из цифр. Напишите программу, которая запрашивает с ввода два целых числа и выводит их сумму. В случае некорректного ввода программа не должна завершаться с ошибкой, а должна продолжать запрашивать числа. Обработчик исключений try-except использовать нельзя.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
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
