Строки в Python — это неизменяемые (immutable) последовательности символов. Каждый метод строки возвращает **новую** строку, оригинал не изменяется.
## Изменение регистра
```python
text = "hello world"
print(text.upper()) # "HELLO WORLD"
print(text.lower()) # "hello world"
print(text.capitalize()) # "Hello world"
print(text.title()) # "Hello World"
print(text.swapcase()) # "HELLO WORLD"
```
## Удаление пробелов
```python
s = " hello "
print(s.strip()) # "hello" — с обеих сторон
print(s.lstrip()) # "hello " — только слева
print(s.rstrip()) # " hello" — только справа
```
`strip()` — самый распространённый способ очистить пользовательский ввод.
## Поиск и проверка
```python
s = "Python is great"
print(s.find("is")) # 7 — индекс первого вхождения, -1 если не найдено
print(s.index("is")) # 7 — то же, но кидает ValueError если не найдено
print(s.count("t")) # 2
print(s.startswith("Py")) # True
print(s.endswith("eat")) # True
print("123".isdigit()) # True
print("abc".isalpha()) # True
print("abc123".isalnum()) # True
```
## Замена и разбиение
```python
s = "one two three"
print(s.replace("two", "2")) # "one 2 three"
print(s.split()) # ["one", "two", "three"]
print(s.split(" ", maxsplit=1)) # ["one", "two three"]
```
`split()` без аргументов разбивает по любым пробелам и удаляет пустые элементы.
## Объединение
```python
words = ["one", "two", "three"]
print(", ".join(words)) # "one, two, three"
print("-".join(words)) # "one-two-three"
print("".join(words)) # "onetwothree"
```
`join` — это обратное к `split`: всегда вызывается на **разделителе**, а не на списке.
## Выравнивание и заполнение
```python
s = "hello"
print(s.ljust(10)) # "hello "
print(s.rjust(10)) # " hello"
print(s.center(11, "-")) # "---hello---"
print("42".zfill(5)) # "00042"
```
## Главное правило
Поскольку строки неизменяемы, нужно **присваивать** результат:
```python
name = " Alice "
name = name.strip() # правильно
name.strip() # ничего не происходит — результат отбрасывается
```
Напишите функцию `format_name(name)`, которая принимает строку и возвращает её в формате title case (каждое слово с заглавной буквы). Пример: `format_name("john doe")` → `"John Doe"`.
def format_name(name):
pass
print(format_name("john doe")) # John Doe
print(format_name("ALICE SMITH")) # Alice Smith
Решение
def format_name(name):
return name.title()
print(format_name("john doe")) # John Doe
print(format_name("ALICE SMITH")) # Alice Smith
Напишите функцию `clean(s)`, которая удаляет пробелы в начале/конце строки и переводит её в нижний регистр. Пример: `clean(" Hello World ")` → `"hello world"`.
def clean(s):
pass
print(clean(" Hello World ")) # hello world
print(clean(" Python ")) # python
Решение
def clean(s):
return s.strip().lower()
print(clean(" Hello World ")) # hello world
print(clean(" Python ")) # python
Напишите функцию `count_word(text, word)`, которая подсчитывает, сколько раз `word` встречается в `text` (без учёта регистра). Пример: `count_word("Apple apple APPLE", "apple")` → `3`.
def count_word(text, word):
pass
print(count_word("Apple apple APPLE", "apple")) # 3
print(count_word("cat cat dog cat", "cat")) # 3
Решение
def count_word(text, word):
return text.lower().count(word.lower())
print(count_word("Apple apple APPLE", "apple")) # 3
print(count_word("cat cat dog cat", "cat")) # 3
Напишите функцию `censor(text, word)`, которая заменяет все вхождения `word` в `text` звёздочками той же длины. Пример: `censor("I love cats", "cats")` → `"I love ****"`.
def censor(text, word):
pass
print(censor("I love cats", "cats")) # I love ****
print(censor("hello world", "world")) # hello *****
Решение
def censor(text, word):
return text.replace(word, "*" * len(word))
print(censor("I love cats", "cats")) # I love ****
print(censor("hello world", "world")) # hello *****
Напишите функцию `dashify(s)`, которая разбивает строку на слова и соединяет их через дефис. Пример: `dashify("hello world foo")` → `"hello-world-foo"`.
def dashify(s):
pass
print(dashify("hello world foo")) # hello-world-foo
print(dashify("one two three")) # one-two-three
Решение
def dashify(s):
return "-".join(s.split())
print(dashify("hello world foo")) # hello-world-foo
print(dashify("one two three")) # one-two-three
Напишите функцию `is_url(s)`, которая возвращает `True`, если строка начинается с `"http://"` или `"https://"` и заканчивается на `".com"`, `".org"` или `".net"`. Иначе возвращает `False`.
def is_url(s):
starts_ok = s.startswith("http://") or s.startswith("https://")
ends_ok = s.endswith(".com") or s.endswith(".org") or s.endswith(".net")
return starts_ok and ends_ok
# Короткий вариант с кортежами:
def is_url_v2(s):
return s.startswith(("http://", "https://")) and s.endswith((".com", ".org", ".net"))
print(is_url("https://example.com")) # True
print(is_url("ftp://bad.com")) # False
Напишите функцию `greet(name, age)`, которая возвращает приветствие через f-string: `"Hello, {name}! You are {age} years old."`. Пример: `greet("Alice", 25)` → `"Hello, Alice! You are 25 years old."`.
def greet(name, age):
pass
print(greet("Alice", 25)) # Hello, Alice! You are 25 years old.
print(greet("Bob", 30)) # Hello, Bob! You are 30 years old.
Решение
def greet(name, age):
return f"Hello, {name}! You are {age} years old."
print(greet("Alice", 25)) # Hello, Alice! You are 25 years old.
print(greet("Bob", 30)) # Hello, Bob! You are 30 years old.
Напишите функцию `format_price(amount)`, которая форматирует число как цену с 2 знаками после запятой и префиксом `$`. Пример: `format_price(9.5)` → `"$9.50"`, `format_price(1000)` → `"$1,000.00"`.
Напишите функцию `safe_find(text, sub)`, которая возвращает индекс первого вхождения `sub` в `text`, или `-1` если не найдено. НЕ используйте `.index()`. Пример: `safe_find("hello", "ll")` → `2`, `safe_find("hello", "x")` → `-1`.
Мы используем необходимые cookies для работы сайта. С вашего разрешения мы также можем сохранять настройки сайта и использовать аналитические и рекламные cookies, чтобы понимать использование сайта и поддерживать развитие проекта.
* Вы всегда можете изменить свой выбор в настройках сайта.
Выберите категории cookies
Настройки аналитики
Можно отключить аналитику использования платформы. Также можно отправить в Google Analytics запрос на удаление данных об использовании этого сайта, связанных с этим браузером.
Учебный workspace
Учитесь, читая, запуская код и решая задачи.
Практикуйте программирование с пояснениями тем, упражнениями, инструментами browser IDE, проверкой regex и тренировкой печати кода в одном workspace.
Открывайте инструменты во вкладках.Упражнения, IDE-инструменты и тренажеры остаются доступными как вкладки сайта.
Переключайтесь без потери контекста.Переходите между пояснениями, кодом и утилитами, сохраняя свое место.
Используйте sidebar как карту.Левые панели содержат навигацию, настройки, файлы, libraries и управление инструментами.
PythonJavaScriptSQLite
Одна IDE, три практичных режима
Python в браузере.Запускайте небольшие скрипты, пробуйте библиотеки и тренируйте API-запросы без установки.
JavaScript для быстрых экспериментов.Проверяйте код для браузера и сравнивайте идеи рядом с учебными материалами.
SQLite для практики с данными.Открывайте обозреватель базы данных, изучайте таблицы, пишите запросы и учитесь SQL локально.
ТемаIDE
Работайте рядом в split tabs
Держите инструкции перед глазами.Откройте упражнение или справочную страницу рядом с IDE, вместо постоянных переключений.
Сравнивайте инструменты во время обучения.Размещайте проверки regex, пояснения и эксперименты с кодом рядом, когда это нужно для задачи.
Закройте split, когда закончите.Workspace вернётся к одной сфокусированной вкладке, а открытые вкладки сайта останутся доступны.
Тренажер слепой печати кода
Или просто текста
Тренажер рассчитан на физическую клавиатуру.Откройте этот раздел на ноутбуке или компьютере с широким экраном. На телефоне тренировка слепой печати не будет корректной.
Скорость: 0 зн/мин
0 слов/мин
Лучшая скорость (60с): 0 зн/мин
0 слов/мин
Ошибки: 0
Общее время: 0.0 с
Для активации режима слепого набора не подсматривайте на физическую клавиатуру.