Similar presentations:
Программирование на языке Python. Функции, условия, рекурсия
1.
Лекция 2-3Программирование на языке Python
Функции, условия, рекурсия
2.
for и while: разные задачиfor перебирает элементы или заданный диапазон.
while повторяет действия, пока условие истинно.
Оба могут завершиться досрочно.
for k in range(3):
print(k) # 0, 1, 2
Для набора измерений — for.
Для достижения заданной невязки
— while с пределом шагов.
f = 1.0
while abs(f) >= 0.1:
f = f / 2
03
3.
range: начало, конец, шагКонечная граница исключается; шаг не может быть нулевым.
Отрицательный шаг задаёт обратный перебор.
for k in range(2, 9, 2):
print(k) # 2, 4, 6, 8
for k in range(3, 0, -1):
print(k) # 3, 2, 1
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
Самопроверка: что выдаст range(5,
2)?
Почему последняя
последовательность не содержит
0?
04
4.
Перебор значений: Python и C++Если нужен элемент, не вычисляйте индекс без необходимости.
values = [12.4, 12.8, 12.6]
for value in values:
print(value)
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
// C++: v — vector<double>
for (double value : v) {
std::cout << value <<
"\n";
}
05
5.
enumerate: номер и значениеДобавляет счётчик к перебору.
start меняет нумерацию вывода, но не индексы списка.
values = [12.4, 12.8, 12.6]
for number, value in enumerate(values, start=1):
print(number, value)
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
Распаковка: два имени получают
номер и значение.
Удобно для таблицы измерений или
диагностических сообщений.
06
6.
zip: связанные последовательностиСопоставляет элементы с одинаковыми позициями.
По умолчанию останавливается на самой короткой последовательности.
time_s = [0.0, 1.0, 2.0]
position_m = [0.0, 3.0, 6.0]
for t, s in zip(time_s, position_m, strict=True):
print(t, s)
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
strict=True (Python ≥ 3.10) выдаёт
ValueError при разных длинах.
07
7.
break и continuebreak завершает ближайший цикл.
continue пропускает остаток текущего шага.
values = [0.2, -1.0, 0.4, 1.8]
for value in values:
if value < 0:
continue
if value > 1:
break
print(value) # 0.2 и 0.4
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
08
8.
while: обновление и защитаНачальное состояние → проверка → шаг → новое состояние.
Без обновления величины условие может остаться истинным навсегда.
f = 1.0
k = 0
while abs(f) >= 1e-3 and k < 20:
f = f / 2
k += 1
print(k, f, abs(f) < 1e-3)
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
09
9.
Метод деления пополамНепрерывная функция и смена знака на концах дают корень внутри.
Каждый шаг уменьшает интервал вдвое; монотонность не обязательна для существования корня.
low = 0.0
high = 2.0
for k in range(25):
mid = (low + high) / 2
if mid ** 2 < 2:
low = mid
else:
high = mid
print((low + high) / 2)
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
Здесь ищем √2, функция x² = 2.
Ширина после k шагов: (high₀ −
low₀)/2**k.
11
10.
Строка: последовательность текстаstr хранит текст Unicode, не массив чисел.
Цифры в строке остаются текстом, пока не выполнено преобразование.
sensor = "TEMP_01"
print(sensor[0]) # T
print(sensor[-1]) # 1
print(len(sensor)) # 7
print("12" * 2) # 1212
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
Индекс вне диапазона → IndexError.
len считает кодовые точки, не
байты и не обязательно видимые
символы.
13
11.
Срезы и неизменяемостьs[start:stop:step]: конечная граница исключается.
Строковые операции создают новое значение.
name = "TEMP_01"
print(name[:4]) # TEMP
print(name[-2:]) # 01
name = "PRES" + name[4:]
print(name) # PRES_01
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
name[0] = "P" → TypeError.
В C++ std::string допускает
изменение элемента; его char не
равен символу Unicode в общем
случае.
14
12.
Методы строк: очистка и проверкаМетод вызывается через объект: text.strip().
Он отличается формой вызова от функции len(text).
text = " temp_01 "
clean = text.strip().upper()
print(clean) # TEMP_01
print(clean.startswith("TEMP"))
print("01" in clean)
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
strip удаляет крайние пробельные
символы.
upper создаёт строку в верхнем
регистре; исходный text не
меняется.
15
13.
Разбираем запись измеренияsplit отделяет поля; float преобразует текст.
Формат входной записи должен быть заранее определён.
line = "12.5;23.8"
fields = line.split(";")
time_s = float(fields[0])
temperature_c = float(fields[1])
print(time_s, temperature_c)
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
До обращения к полям проверьте
len(fields) == 2.
16
14.
Форматируем таблицу результатаf-строка встраивает значения в текст.
Форматирование не меняет число.
E = 1.288091
f = -3.2e-8
print(f"E = {E:.6f} рад")
print(f"Невязка = {f:.2e}")
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
f — фиксированное число знаков
после точки.
e — экспоненциальная запись.
17
15.
Обработка строк функциейОтделите преобразование данных от вывода и последующих расчётов.
def parse_measurement(line):
fields = line.strip().split(";")
return float(fields[0]), float(fields[1])
Возвращается пара (кортеж); два
имени распаковывают её.
t, value = parse_measurement("12.5;23.8")
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
18
16.
Рекурсия: функция вызывает себяНужны базовый случай и шаг к более простой задаче.
Каждый вызов имеет свои параметры и место возврата.
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
print(factorial(4))
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
# 24
Вход: factorial(3).
Вызовы: 3 → 2 → 1 → 0.
Возврат: 1 → 1 → 2 → 6.
Задание: переписать
вычисление факторила
с использованием «for»
19
17.
datetime: дата как объектМодуль datetime содержит класс datetime.
Он хранит календарную дату, время и часовой пояс.
from datetime import datetime, timezone
observed = datetime(2026, 9, 30, 12, 0,
tzinfo=timezone.utc)
print(observed.isoformat())
# 2026-09-30T12:00:00+00:00
ЛЕКЦИЯ 3 / ДАТА, ФАЙЛЫ И ИЗМЕРЕНИЕ ДЛИТЕЛЬНОСТИ
observed — объект.
timezone.utc — пояс UTC.
Временная отметка обязательно
должна иметь понятную шкалу
времени.
2
18.
Строка, часовой пояс и выводISO-строка содержит дату, время и смещение относительно UTC.
astimezone меняет представление, сохраняя момент.
from datetime import datetime, timezone
local = datetime.fromisoformat( "2026-0930T15:00:00+03:00")
utc = local.astimezone(timezone.utc)
print(utc.isoformat())
print(utc.strftime("%d.%m.%Y %H:%M:%S UTC"))
ЛЕКЦИЯ 3 / ДАТА, ФАЙЛЫ И ИЗМЕРЕНИЕ ДЛИТЕЛЬНОСТИ
Результат: 30.09.2026 12:00:00
UTC.
%Y — год; %m — месяц; %d —
день.
%H — час; %M — минута; %S —
секунда.
3
19.
Разность дат: timedeltatotal_seconds() возвращает весь интервал в секундах.
.seconds — только остаток секунд внутри суток.
from datetime import timedelta
end = observed + timedelta(hours=36)
interval = end - observed
print(interval.total_seconds()) #
129600.0
print(interval.seconds) # 43200
ЛЕКЦИЯ 3 / ДАТА, ФАЙЛЫ И ИЗМЕРЕНИЕ ДЛИТЕЛЬНОСТИ
datetime обозначает момент.
timedelta обозначает
длительность.
Для перевода длительности в
сутки делим total_seconds() на
86400.
4
20.
Сначала обычный вывод, затем файлfile=log задаёт получателя вывода.
log — имя файлового объекта, созданного open().
k = 1
E = 1.288091
f = -0.000032
print(k, E, f)
with open("iterations.txt", "w", encoding="utf-8")
as log:
print("k;E_rad;residual_rad", file=log)
print(k, E, f, sep=";", file=log)
ЛЕКЦИЯ 3 / ДАТА, ФАЙЛЫ И ИЗМЕРЕНИЕ ДЛИТЕЛЬНОСТИ
“w” создаёт файл или стирает
прежнее содержимое.
with закрывает файл при
выходе.
sep задаёт разделитель; print
добавляет перевод строки
автоматически.
6
21.
print и write: в чём отличиеprint принимает несколько значений, преобразует их в текст.
write принимает строку; перевод строки нужно добавить явно.
with open("result.txt", "w", encoding="utf-8") as
log:
print("Результат", 1.25, file=log)
log.write("Расчёт завершён\n")
ЛЕКЦИЯ 3 / ДАТА, ФАЙЛЫ И ИЗМЕРЕНИЕ ДЛИТЕЛЬНОСТИ
Для слайда: в write
используется строка с \n в
конце.
Режим a дописывает; r читает.
Относительный путь зависит от
рабочей папки процесса.
7
22.
Форматирование: f, e и gf-строка подставляет значения в текст.
Формат меняет запись числа, а не значение переменной.
E = 1.288091313
f = -0.000000032
print(f"E = {E:.6f} рад")
# E = 1.288091 рад
print(f"Невязка = {f:.3e}")
# Невязка = -3.200e-08
print(f"{E:.6g}") # 1.28809
ЛЕКЦИЯ 3 / ДАТА, ФАЙЛЫ И ИЗМЕРЕНИЕ ДЛИТЕЛЬНОСТИ
.6f: 6 знаков после точки.
.3e: экспоненциальная запись,
3 знака после точки.
.6g: до 6 значащих цифр.
Нельзя проверять точность по
округлённому выводу.
8
23.
Открыть файл один раз перед циклом.Записать заголовок и k=0; после каждого шага — k, E, f.
Включить цикл в блок with самостоятельно.
print(k, E, f, sep=";", file=log)
# После знакомства с форматированием:
print(k, f"{E:.8f}", f"{f:.6e}",
sep=";", file=log)
ЛЕКЦИЯ 3 / ДАТА, ФАЙЛЫ И ИЗМЕРЕНИЕ ДЛИТЕЛЬНОСТИ
9
24.
Сначала прочитать и показать текст; затем разобрать числовые строки.with open("iterations.txt", "r", encoding="utf-8") as log:
header = log.readline() # Читаем заголовок отдельно
for line in log:
# Начинаем со второй строки
fields = line.strip().split(";")
end="" не добавляет второй
перевод строки.
Задание: пропустить заголовок,
применить split(";"), int и float.
k = int(fields[0])
E = float(fields[1])
f = float(fields[2])
print(k, E, f)
10
25.
Измерение длительности через datetimeФункция compute уже определена ниже в этом примере.
from datetime import datetime, timezone
def compute(n):
return sum(range(n))
start = datetime.now(timezone.utc)
result = compute(1_000_000)
finish = datetime.now(timezone.utc)
elapsed_s = (finish - start).total_seconds()
print(f"Время: {elapsed_s:.6f} с")
Это грубое измерение
длительности, не полноценное
профилирование.
Календарные часы могут
корректироваться системой.
Разрешение не гарантирует
точность замера.
11
26.
От измерений к оценке моделиСредняя квадратичная ошибка: MSE = сумма квадратов ошибок / N.
Она измеряется в квадрате единиц целевой величины.
measured = [3.0, 5.0, 7.0]
predicted = [2.8, 5.2, 6.9]
total = 0.0
for y, p in zip(measured, predicted, strict=True):
total += (y - p) ** 2
mse = total / len(measured)
print(mse) # около 0.03
ПРОГРАММИРОВАНИЕ НА PYTHON / ЛЕКЦИЯ 3
22
programming