⚖️ Старый и современный подход

⚡ Различия в двух словах

Классический подход: ручные циклы по символам, проверка через ord(), накопление результата в новой строке.

Современный подход: встроенные строковые методы: isdigit(), replace(), split()/join(), startswith()/endswith().

Вывод: методы строк короче, быстрее и менее подвержены ошибкам, чем ручные циклы.

📜 Классический подход из занятия

До знакомства с методами строк многие задачи решаются циклами. Это помогает понять алгоритм, но получается многословно.

1. Проверка, состоит ли строка только из цифр

📄 examples/classic_isdigit_loop.py
text = "12345"
is_digit = True
for char in text:
    if char < "0" or char > "9":
        is_digit = False
        break
print(is_digit)

2. Замена символов в строке

📄 examples/classic_replace_loop.py
text = "hello world"
old_char = "o"
new_char = "0"
result = ""
for char in text:
    if char == old_char:
        result += new_char
    else:
        result += char
print(result)

3. Разделение строки по разделителю

📄 examples/classic_split_loop.py
text = "apple,banana,cherry"
separator = ","
parts = []
current = ""
for char in text:
    if char == separator:
        parts.append(current)
        current = ""
    else:
        current += char
parts.append(current)
print(parts)

4. Проверка начала строки

📄 examples/classic_startswith_loop.py
text = "hello world"
prefix = "hello"
starts = True
for i in range(len(prefix)):
    if i >= len(text) or text[i] != prefix[i]:
        starts = False
        break
print(starts)

✅ Рекомендуемый современный вариант

1. Проверка цифр через isdigit()

📄 examples/modern_isdigit.py
text = "12345"
print(text.isdigit())

2. Замена через replace()

📄 examples/modern_replace.py
text = "hello world"
print(text.replace("o", "0"))

3. Разделение через split()

📄 examples/modern_split.py
text = "apple,banana,cherry"
print(text.split(","))

4. Проверка начала строки через startswith()

📄 examples/modern_startswith.py
text = "hello world"
print(text.startswith("hello"))

5. Форматирование через f-strings

📄 examples/modern_fstring.py
name = "Python"
version = 3
print(f"Язык: {name}, версия: {version}")
Преимущества современного стиля:
  • Меньше кода — меньше возможностей для ошибок.
  • Методы строк реализованы на C и обычно работают быстрее циклов на Python.
  • Читаемость: код ближе к описанию задачи.
  • f-strings заменяют громоздкую конкатенацию.

🕰️ Когда классический подход всё ещё полезен

  • На начальном этапе обучения — чтобы понять, как устроены алгоритмы.
  • Когда встроенного метода недостаточно, например, нужна нестандартная логика замены.
  • Когда важно обработать каждый символ отдельно и собрать сложный результат.

🔧 Регулярные выражения как альтернатива

Для сложного поиска и замены (шаблоны, группы, повторы) иногда удобнее использовать модуль re. Например, заменить все числа в строке, независимо от их длины:

📄 examples/modern_regex.py
import re

text = "I have 5 apples and 10 oranges"
result = re.sub(r"\d+", "X", text)
print(result)
# I have X apples and X oranges
Проверить по документации: модуль re (регулярные выражения), f-strings и генераторные выражения выходят за рамки исходного занятия. Подробности — в разделе Ресурсы.

🔍 Как распознать устаревший код

Если вы видите цикл, который только перебирает символы строки для выполнения стандартной операции, его часто можно заменить методом строк:

text = "hello world"

# устаревший подход
upper_text = ""
for char in text:
    upper_text += char.upper()
print("classic:", upper_text)

# современный подход
print("modern:", text.upper())