Строки и разбор данных

Устройства часто передают данные строкой: temp=25;rpm=1500. Чтобы достать из неё числа, строку надо уметь резать, искать, заменять и разбивать на части. Сегодня разберём работу со строками вплотную. В конце соберём парсер телеметрии — разложим строку показаний на значения.

Строка телеметрии разбирается на отдельные значения температуры и оборотов

После урока сможешь: Учим работать с текстовыми данными: индексы и срезы строк, методы upper/lower/replace/count/find, разбор через split и формат чисел. В конце собираешь парсер телеметрии.

Строка — цепочка символов

Строка состоит из символов по порядку. У каждого символа есть индекс, считают с нуля. Длину даёт len, отдельный символ берут по индексу в квадратных скобках — как у списка.

kod = "M1-2024"
print(len(kod))
print(kod[0])
print(kod[-1])
7
M
4
  Строка — символы по порядку, у каждого свой индекс:

  kod = "M1-2024"

  символ:  M  1  -  2  0  2  4
  индекс:  0  1  2  3  4  5  6

  len(kod) = 7
  kod[0]  = "M"   (первый символ)
  kod[-1] = "4"   (последний символ)

Срезы: берём кусок строки

Срез берёт из строки не один символ, а кусок: stroka[начало:конец] — символы с индекса «начало» до «конец», причём «конец» НЕ включается. Пропустишь начало — с самого старта; пропустишь конец — до самого конца.

kod = "M1-2024"
print(kod[0:2])
print(kod[3:])
print(kod[-4:])
M1
2024
2024
  Срез берёт кусок строки  stroka[начало:конец]:

  kod = "M1-2024"
  индекс: 0 1 2 3 4 5 6

  kod[0:2]  -->  "M1"     (с 0 до 2, двойку НЕ включая)
  kod[3:]   -->  "2024"   (с 3 и до конца)
  kod[-4:]  -->  "2024"   (последние 4 символа)

Главная ловушка срезов: правый край НЕ входит. kod[0:2] берёт символы 0 и 1 — два штуки, а символ с индексом 2 уже не берётся.

Методы строк: upper, lower, replace, count, find

У строк есть готовые методы. .upper() — заглавные буквы, .lower() — строчные, .replace(a, b) — заменить все a на b (новая строка), .count(x) — сколько раз встречается, .find(x) — индекс первого вхождения (или -1, если нет).

s = "temp=25;temp=30"
print(s.upper())
print(s.count("temp"))
print(s.find("="))
print(s.replace(";", " "))
TEMP=25;TEMP=30
2
4
temp=25 temp=30

replace не меняет старую строку, а создаёт новую — поэтому результат печатают или кладут в переменную. А find возвращает -1, если искомого в строке нет.

Разбор строки: split и формат чисел

Метод .split(разделитель) разбивает строку на список частей по разделителю — это главный приём разбора телеметрии. А чтобы красиво вывести дробное число, используют формат f"{x:.2f}" — два знака после запятой.

stroka = "temp=25"
chasti = stroka.split("=")
print(chasti[0])
print(chasti[1])

x = 3.14159
print(f"{x:.2f}")
temp
25
3.14
  split разбивает строку на части по разделителю:

  "temp=25".split("=")  -->  ["temp", "25"]
                                  |       |
                              chasti[0]  chasti[1]

  Формат числа:  f"{x:.2f}"  ->  два знака после запятой

После split части — это ТЕКСТ (str). Чтобы посчитать значение, не забудь превратить нужную часть в число через int или float (приём с занятия 2).

Миссия: парсер телеметрии

Скопируй программу в песочницу и запусти. Она берёт строку телеметрии вида temp=25;rpm=1500, разбивает её и достаёт числовые значения температуры и оборотов. Поменяй числа в строке — программа разберёт новую.

# Парсер телеметрии
telemetriya = "temp=25;rpm=1500"

chasti = telemetriya.split(";")
temp = int(chasti[0].split("=")[1])
rpm = int(chasti[1].split("=")[1])

print(f"Температура: {temp}")
print(f"Обороты: {rpm}")
Температура: 25
Обороты: 1500

Контрольный вопрос. У строки kod = «M1-2024» какой символ вернёт kod[0]?

Исходный код для этого задания:

kod = "M1-2024"
АM — индексы начинаются с 0, значит [0] это первый символ
Б1 — отсчёт идёт со второго символа
В4 — [0] берёт последний символ

Подсказка: Индекс 0 — это самый первый символ строки.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что выведет программа из этого задания? Впиши число.

Исходный код для этого задания:

kod = "M1-2024"
print(len(kod))

Подсказка: len считает количество символов в строке. Посчитай символы в M1-2024 (дефис тоже символ).

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что выведет программа из этого задания? Впиши то, что появится.

Исходный код для этого задания:

kod = "M1-2024"
print(kod[3:])

Подсказка: Срез [3:] берёт символы с индекса 3 и до конца.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что выведет программа из этого задания? Впиши число.

Исходный код для этого задания:

s = "temp=25;temp=30"
print(s.count("temp"))

Подсказка: .count считает, сколько раз кусочек встречается в строке.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что выведет программа из этого задания? Впиши то, что появится.

Исходный код для этого задания:

stroka = "temp=25"
chasti = stroka.split("=")
print(chasti[1])

Подсказка: split(«=») разбивает строку на список по знаку =. chasti[1] — вторая часть (после =).

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. В переменной kod лежит строка маленькими буквами. Напиши команду print, которая выведет её ЗАГЛАВНЫМИ буквами.

Исходный код для этого задания:

kod = "m1-2024"
# напиши ниже команду print, которая выведет kod заглавными буквами

Подсказка: Метод .upper() делает буквы заглавными. Шаблон: print(kod.upper()).

✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. В строке s точку с запятой нужно заменить на пробел. Напиши команду print, которая выведет результат замены.

Исходный код для этого задания:

s = "temp=25;rpm=1500"
# напиши ниже команду print, которая заменит ; на пробел и выведет результат

Подсказка: Метод .replace(«что», «на что»). Шаблон: print(s.replace(«;», » «)).

✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. В строке s посчитай, сколько раз встречается знак «;», и выведи это число.

Исходный код для этого задания:

s = "a=1;b=2;c=3"
# напиши ниже команду print, которая посчитает знаки ; и выведет число

Подсказка: Метод .count(«символ»). Шаблон: print(s.count(«;»)).

✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. Строку телеметрии нужно разбить по знаку «=» на список частей. Напиши строку, которая разобьёт stroka по «=» и положит результат в переменную chasti.

Исходный код для этого задания:

stroka = "temp=25"
# напиши ниже строку: разбей stroka по знаку = и положи в chasti

Подсказка: Метод .split(«разделитель») возвращает список. Шаблон: chasti = stroka.split(«=»).

✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что выведет программа из этого задания? Впиши то, что появится.

Исходный код для этого задания:

x = 9.806
print(f"{x:.2f}")

Подсказка: Формат {x:.2f} оставляет два знака после запятой и округляет.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Программа должна посчитать сумму температуры и прибавки, но падает с ошибкой. В чём причина?

Исходный код для этого задания:

stroka = "temp=25"
chasti = stroka.split("=")
znachenie = chasti[1]
print(znachenie + 5)
АПосле split часть — это текст «25»; чтобы прибавить 5, нужно int(chasti[1])
Бsplit нельзя применять к строке
ВИндекс [1] не существует

Подсказка: Вспомни: части после split — это текст (str). Что нужно сделать перед сложением с числом?

Онлайн-проверка ответа появится позже

Задание. Напиши программу целиком (около 6-7 строк) — парсер телеметрии. Дана строка telemetriya = «temp=25;rpm=1500». Разбей её по «;» на части, из каждой части достань число после «=» (через split и int) и выведи двумя строками: температуру и обороты. Используй имена temp и rpm.

Исходный код для этого задания:

telemetriya = "temp=25;rpm=1500"
# 1) chasti = telemetriya.split(";")
# 2) temp = int(chasti[0].split("=")[1])
# 3) rpm = int(chasti[1].split("=")[1])
# 4) print температуры и print оборотов

Подсказка: Сначала chasti = telemetriya.split(«;»). Потом temp = int(chasti[0].split(«=»)[1]) и rpm = int(chasti[1].split(«=»)[1]). В конце два print.

✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.

Онлайн-проверка ответа появится позже

Что дальше

Теперь ты умеешь резать строки срезами, искать и заменять методами и разбирать телеметрию через split. На следующем занятии научимся выносить повторяющийся код в функции и подключать готовые модули — math и random.

Итог: Теперь ты умеешь резать строки срезами, искать и заменять методами и разбирать телеметрию через split. На следующем занятии научимся выносить повторяющийся код в функции и подключать готовые модули — math и random.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева