#!/usr/bin/env python # coding: utf-8 # # Основы программирования в Python # # *Алла Тамбовцева, НИУ ВШЭ* # # ## Работа со строками # Некоторые методы для строк мы уже обсуждали, давайте их вспомним. Для удобства будем работать с длинной строкой, которая представляет собой целую фразу. # In[15]: phrase = "питон греется на солнышке" # Наша фраза ‒ предложение, давайте сделаем первую букву строки заглавной. # In[16]: phrase = phrase.capitalize() phrase # Метод `.capitalize()`, как и все методы на строках, не создает новую строку сам и не вносит изменения в исходную строку (строки вообще относятся к неизменяемым объектам в Python). Поэтому, чтобы сохранить внесенные изменения, мы перезаписали переменную `phrase`. # Проверим, правда ли, что наша новая строка начинается с заглавной *П*. # In[17]: phrase.startswith("П") # правда # А теперь проверим, правда ли, что наша фраза заканчивается точкой. # In[18]: phrase.endswith(".") # Исправим это! Склеим нашу строку и точку (эта операция называется конкатенацией): # In[19]: phrase = phrase + "." phrase # Теперь получили полноценное предложение. Давайте проверим, а правда ли, что наша фраза состоит полностью из букв (без цифр, пробелов и иных символов)? # In[20]: phrase.isalpha() # неправда # Вполне ожидаемо: в нашей строке есть пробелы и даже точка. # Может возникнуть вопрос: а зачем нам проверять, из каких символов состоит строка? Ведь даже, если строка состоит из цифр, числом она автоматически не станет. Давайте рассмотрим две ситуации, в которых очень полезно знать, какие символы входят в нашу строку. # **Ситуация 1** # # Пользователь должен придумать пароль для своей учетной записи. Пароль должен состоять только из цифр и букв. # In[24]: password = input("Введите пароль: ") if password.isalnum() == False: print("Пароль должен состоять только из букв и цифр!") # In[25]: password = input("Введите пароль: ") if password.isalnum() == False: print("Пароль должен состоять только из букв и цифр!") # В примере выше мы использовали метод `.isalnum()`, который позволяет проверить, составлена ли строка только из букв (*alpha*) и цифр (*num*). # **Ситуация 2** # Есть список txt-файлов, и мы хотим их автоматически рассортировать, зная, что если название файла состоит из цифр, то это текст для анализа, а если нет, то это файл с результатами анализа. # In[28]: files = ["100.txt", "110.txt", "result1.txt", "121.txt", "result2.txt", "123.txt", "result3.txt"] # In[30]: ans = [] res = [] for f in files: name = f.split(".")[0] # разобьем названия по точке и возьмем первый элемент - до txt if name.isnumeric(): ans.append(f) else: res.append(f) print(ans) print(res) # Понятно, что список файлов не берется из ниоткуда, плюс, обычно мы сортируем файлы не по спискам, а по папкам, но это немного другая история, можете посмотреть [тьюториал](https://www.tutorialspoint.com/python/os_file_methods.htm) по модулю `os`, который позволяет работать с файлами на компьютере, создавать папки, переименовывать их и прочее. # # **Внимание:** для тренировки создайте папку с ненужными или пустыми файлами,чтобы случайно ничего не повредить. Отменить действие будет невозможно. # Какие еще полезные операции можно проводить со строками? Заменять символы. Для этого есть метод `.replace()`. # In[31]: address = "Г.Москва, ул.Мясницкая, д. 25" # Заменим сокращение "Г." на слово "город": # In[38]: address = address.replace("Г.", "город ") address # In[40]: address = address.replace("д. 25", "д.25") address # Методы можно "наслаивать" друг на друга: ставить точку и продолжать. # In[42]: sent = "Питон Греется На Солнышке" sent = sent.replace("Г", "г").replace("Н", "н").replace("С", "с") sent # Что еще полезного можно делать со строками? Менять регистр. # In[44]: name = input("Введите имя и фамилию: ") # Знакомая история, да? Поправим: # In[45]: name.swapcase() # ура # Финальный аккорд: посчитаем, сколько раз разные символы встречаются в строке. # In[46]: phrase # In[48]: phrase.count("е") # In[49]: phrase.count("т") # А теперь сделаем это в цикле ‒ для всех символов в строке (только для этого нам потребуются множества: чтобы исключить повторения). # In[50]: symbols = set(phrase) symbols # In[54]: for s in symbols: print(s, ":", phrase.count(s)) # А как найти положение слова в тексте? Для этого есть метод `.find()`. # In[63]: phrase.find("греется") # Это означает, что слово *греется* начинается с символа, имеющего в строке индекс 6. Проверим глазами: # In[64]: phrase # Все верно. # # Если такого слова (словом мы называем любую подстроку, то есть последовательность символов) в строке нет, то выводится индекс -1. # In[65]: phrase.find("солнце")