Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
17.01.2026
Размер:
375.57 Кб
Скачать

Дополнительный материал

1 Работа с различными коллекциями в цикле for

1.1 Итерация по строкам

Строки являются последовательностями поэтому реализуют интерфейс итерируемого объекта, что позволяет пройтись по каждому символу строки в цикле for

text = "Hello" for char in text: print(char)

#H

#e

#l

#l

#o

1.2 Итерация по спискам

fruits = ['apple', 'banana', 'cherry'] for fruit in fruits: print(fruit) # apple # banana # cherry

1.3 Итерация по кортежам coordinates = (10, 20, 30)

for coord in coordinates: print(coord)

# Часто используется для распаковки points = [(1, 2), (3, 4), (5, 6)] for x, y in points: print(f"X: {x}, Y: {y}")

1.4 Итерация по множествам

colors = {'red', 'green', 'blue'}

for color in colors: print(color)

#blue, green, red (порядок может быть другим)

#Проверка принадлежности

for color in colors:

 

if 'e' in color:

 

print(f"Цвет с буквой 'e':

{color}")

1.5 Итерация по словарям

По умолчанию итерация ведется по ключам

colors = {'red', 'green', 'blue'}

person = {'name': 'Alice', 'age': 30, 'city': 'London'}

for key in person: print(key)

#name

#age

#city

Можно явно указать, что нужна итерация по ключам, воспользовавшись методом keys()

person = {'name': 'Alice', 'age':

30, 'city': 'London'}

for key in person.keys():

 

print(key)

 

# name

 

# age

 

# city

 

Метод values() дает возможность итерации по значениям

person = {'name': 'Alice', 'age': 30, 'city': 'London'}

for value in person.values(): print(value)

#Alice

#30

#London

#Поиск определенного значения for value in person.values():

if isinstance(value, int): print(f"Найдено число: {value}")

Если требуется итерация одновременно по ключу и значению, то можно воспользоваться методом items()

person = {'name': 'Alice', 'age':

30, 'city': 'London'}

for key, value in person.items():

 

print(f"{key}: {value}")

 

# name: Alice

 

# age: 30

 

# city: London

 

1.6Одновременная итерация по нескольким последовательностям

Спомощью zip() можно реализовать параллельную итерацию. Функция принимает в качестве аргументов итерируемые объекты и возвращает кортежи, состоящие из элементов этих объектов с одинаковыми индексами.

names = ['Alice', 'Bob', 'Charlie'] scores = [85, 92, 78] ages = [25, 30, 35] cities = ['London', 'New York', 'Tokyo']

for name, score in zip(names, scores): print(f"{name}: {score} баллов")

#Alice: 85 баллов

#Bob: 92 баллов

#Charlie: 78 баллов

for name, age, city

in zip(names,

ages, cities):

print(f"{name},

{age} лет, из

{city}")

1.7 Получение индекса в цикле for

Возникают ситуации, когда нужно знать индекс текущего элемента, но цикл for его не предоставляет. В этом случае можно завести целочисленную переменную и на каждой итерации цикла увеличивать ее значение на единицу. Но есть более элегантный способ – использовать enumerate(). Данная функция принимает два аргумента: итерируемый объект и начальное значение индекса (по умолчанию равно нулю), а возвращает кортежи вида (индекс, элемент итерируемого объекта).

fruits = ['apple', 'banana', 'cherry']

# Без enumerate (неудобно) i = 0 for fruit in fruits: print(f"{i}: {fruit}") i += 1

# С enumerate (удобно) for index, fruit in enumerate(fruits): print(f"{index}: {fruit}")

# С изменением начального индекса for index, fruit in enumerate(fruits, start=1): print(f"{index}: {fruit}")

# Поиск элемента по условию с сохранением индекса numbers = [10, 20, 30, 40, 50] for idx, num in enumerate(numbers): if num > 25: print(f"Первое число > 25: {num} на позиции {idx}") break

2 Создание коллекций с помощью включений

Концепция включений состоит в создании новых коллекций на основе существующих в одну строку.

Преимущества:

Более читаемый и компактный код

Часто работают быстрее обычных циклов

Идиоматичный стиль Python

Включения бывают списковыми, словарными, множественными.

2.1 Списковые включения (List Comprehensions)

Синтаксис спискового включения:

[expression for item in iterable], где

expression – выражение, задающее значение элемента создаваемого списка, item – текущий элемент исходного итерируемого объекта,

iterable – итерируемый объект.

Пример генерации списка, состоящего из квадратов целых чисел

#Обычный способ squares = []

for x in range(5): squares.append(x ** 2)

#Списковое включение

squares = [x **

2

for

x in range(5)]

print(squares)

#

[0,

1, 4, 9, 16]

Списковые включения могут содержать условие. В этом случае синтаксис спискового включения принимает следующий вид:

[expression for item in iterable if condition]

Примеры генерации списка, состоящего из четных чисел, и списка, состоящего из чисел больше 5

# Только четные числа

 

 

evens = [x for x in range(10) if x

% 2 ==

0]

print(evens)

# [0, 2, 4, 6, 8]

 

 

# Числа больше 5

 

 

 

big_nums = [x

for x in range(10) if x > 5]

 

print(big_nums)

# [6, 7, 8, 9]

 

 

В списковых включениях можно использовать условия и в виде тернарного оператора. Синтаксис:

[expression_true if condition else expression_false for item in iterable]

Примеры

# Замена отрицательных чисел на 0

numbers = [1,

-2, 3,

-4, 5]

non_negative

= [x if

x >=

0 else 0 for x in numbers]

print(non_negative)

# [1, 0, 3, 0, 5]

# Четные/нечетные метки

 

labels = ["even" if x

% 2

== 0 else "odd" for x in range(5)]

print(labels)

# ['even',

'odd', 'even', 'odd', 'even']

Списковые включения аналогично циклам могут быть вложенными. Синтаксис:

[expression for outer_item in outer_iterable for inner_item in inner_iterable]

Примеры

# Создание таблицы умножения

 

 

table = [[i *

j for j in range(1,

4)] for i in range(1,

4)]

print(table)

# [[1, 2, 3], [2, 4, 6], [3, 6, 9]]

 

# "Раскрытие"

вложенного списка

 

 

matrix = [[1,

2], [3, 4], [5, 6]]

 

 

flat = [num for row in matrix for

num in row]

 

print(flat)

# [1, 2, 3, 4, 5, 6]

 

 

2.2 Множественные включения (Set Comprehensions)

Множественные включения имеют синтаксис аналогичный синтаксису списковых включений, отличаясь только фигурными скобками:

{expression for item in iterable}

Примеры

# Создание множества квадратов

squares_set =

{x **

2

for x in range(5)}

print(squares_set)

#

{0, 1, 4, 9, 16}

# Удаление дубликатов

из списка

numbers = [1,

2, 2,

3, 3,

3, 4]

unique_nums =

{x for

 

x in

numbers}

print(unique_nums)

#

{1,

2, 3, 4}

2.3 Словарные включения (Dict Comprehensions)

Словарные включения имеют синтаксис похожий на синтаксисис множественных включений, только вместо expression указывается через двоеточие пара значений – key и value:

{key: value for item in iterable}

Примеры

# Создание словаря

квадратов

squares_dict = {x:

x ** 2 for x in range(5)}

print(squares_dict)

# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# Инвертирование словаря

original = {'a': 1, 'b': 2, 'c': 3}

inverted = {value: key for key, value in original.items()} print(inverted) # {1: 'a', 2: 'b', 3: 'c'}

Задание 1

Данное задание предполагает применение только конструкций if, if – else, if – elif – else.

1. Расчет делителя напряжения.

Пользователь вводит значения двух резисторов R1, R2 и входное напряжение Uin. Программа рассчитывает выходное напряжение по формуле Uout = Uin * (R2 / (R1 + R2)). Если R1 + R2 равна нулю, вывести сообщение об ошибке (короткое замыкание).

2. Расчет сопротивления параллельно соединенных резисторов.

Пользователь вводит значения сопротивления двух резисторов в Омах. Вычисляет общее сопротивление по формуле для параллельного соединения: Rобщ = 1/(1/R1 + 1/R2). Если R1 или R2 меньше или равно нуля, то вывести ошибку.

3. Расчет мощности резистора.

Пользователь вводит ток через резистор и его сопротивление. Программа вычисляет рассеиваемую мощность P = I² * R. Если рассчитанная мощность превышает типовые значения (0.125 Вт, 0.25 Вт, 0.5 Вт, 1 Вт), вывести предупреждение о возможном перегреве.

4. Определение цвета полос резистора (3 полосы).

Пользователь вводит сопротивление (от 1 Ом до 990 кОм). Программа определяет первые две значащие цифры и множитель, а затем выводит соответствующие цвета для 3-полосной маркировки. Если число выходит за диапазон, сообщить об ошибке.

5. Расчет коэффициента пульсаций.

Пользователь вводит амплитудное Umax и минимальное Umin напряжение на выходе выпрямителя. Программа вычисляет коэффициент пульсаций Kp = (Umax - Umin) / Umax * 100%. Вывести оценку: "Низкие пульсации" (<5%), "Высокие пульсации" (>20%) или "Средние пульсации".

6. Расчет емкости последовательного соединения конденсаторов.

Пользователь вводит емкости двух конденсаторов. Программа вычисляет общую емкость при последовательном соединении Ctotal = (C1 * C2) / (C1 + C2). Если C1 + C2 равен нулю, вывести ошибку.

7. Расчет индуктивности параллельного соединения катушек.

Пользователь вводит индуктивности двух катушек. Программа вычисляет общую индуктивность при параллельном соединении Ltotal = (L1 * L2) / (L1 + L2). Если L1 + L2 равен нулю, вывести ошибку.

8. Определение времени заряда RC-цепи.

Пользователь вводит сопротивление R, емкость C и единицу измерения времени (секунды, миллисекунды, микросекунды). Программа проверяет корректность

введенных данных. Программа вычисляет постоянную времени τ = R * C. Вывести, за какое время (1τ, 3τ, 5τ) конденсатор зарядится примерно до 63%, 95% и 99% от напряжения питания.

9. Определение состояния светодиода.

Пользователь вводит ток, протекающий через светодиод (Iled) и его номинальный ток (Inom). Программа определяет и выводит: "Нормальный режим", "Недостаточный ток" (если Iled < 0.7 * Inom), "Перегрузка" (если Iled > 1.3 * Inom).

10. Расчет коэффициента усиления операционного усилителя.

Пользователь вводит номиналы резисторов в цепи обратной связи (R1, R2) для неинвертирующего усилителя. Программа вычисляет коэффициент усиления (K = 1 + R2/R1). Если R1 равен нулю, вывести сообщение об ошибке (деление на ноль).

11. Проверка возможности стабилизации стабилитроном.

Пользователь вводит напряжение питания, минимальное и максимальное сопротивление нагрузки, напряжение стабилизации стабилитрона. Программа должна определить, будет ли стабилитрон работать в режиме стабилизации (проверить, превышает ли входное напряжение напряжение стабилитрона и находится ли ток, протекающий через стабилитрон, в допустимых пределах). Вывести "Стабилизация возможна" или "Стабилизация невозможна".

12. Определение типа конденсатора по емкости.

Пользователь вводит значение емкости в Фарадах. Программа определяет тип: электролитический (> 1 мкФ), керамический (1 нФ - 1 мкФ), пленочный (100 пФ - 100 нФ), и выводит соответствующее сообщение.

13. Расчет мощности трансформатора.

Пользователь вводит напряжение и ток вторичной обмотки. Программа вычисляет полную мощность (S = U * I). Вывести, подходит ли данный трансформатор для питания условного устройства с мощностью потребления 50 Вт.

14. Определение падения напряжения на диоде.

Пользователь вводит материал диода ("кремний" или "германий") и величину тока, протекающего через него. Программа выводит типичное падение напряжения (0.6-0.7 В для Si, 0.2-0.3 В для Ge). Для других материалов вывести "Неизвестный материал".

15. Проверка логического уровня.

Пользователь вводит напряжение на входе КМОП-микросхемы (логический "0" < 1.5 В, логическая "1" > 3.5 В). Программа определяет и выводит: "Логический 0", "Логическая 1" или "Неопределенный уровень".

16. Расчет резонансной частоты LC-контура.

Пользователь вводит индуктивность L и емкость C. Программа вычисляет резонансную частоту f = 1 / (2 * π * √(L * C)). Если L или C меньше или равно нулю, вывести ошибку.

17. Определение ширины запрещенной зоны.

Пользователь вводит название полупроводника ("кремний", "германий", "арсенид галлия"). Программа выводит ширину запрещенной зоны (Si: ~1.12 эВ, Ge: ~0.67 эВ, GaAs: ~1.43 эВ). Если материал неизвестен, сообщить об ошибке.

18. Расчет скважности импульсов.

Пользователь вводит длительность импульса timp и период следования импульсов T. Программа вычисляет скважность S = T / timp. Если timp > T, вывести "Ошибка: длительность импульса больше периода".

19. Проверка допустимого тока для медного проводника.

Пользователь вводит сечение медного провода (в мм²) и ток (в А). Программа сравнивает ток с условным допустимым (например, 10 А на 1 мм²) и выводит "Провод подходит" или "Слишком большой ток!".

20. Определение цвета свечения светодиода.

Пользователь вводит длину волны (в нм). Программа определяет цвет: ультрафиолет

(<380 нм), фиолетовый (380-450 нм), синий (450-495 нм), зеленый (495-570 нм), желтый (570-590 нм), оранжевый (590-620 нм), красный (620-750 нм), инфракрасный (>750 нм).

21. Проверка закона Ома.

Пользователь вводит любые два параметра из трех (напряжение U, ток I, сопротивление R). Программа запрашивает, какой параметр нужно вычислить, и вычисляет его по закону Ома. Если введены все три, проверить их соответствие закону Ома.

22. Определение типа транзистора по напряжению база-эмиттер.

Пользователь вводит напряжение База-Эмиттер UBE в режиме усиления. Программа определяет: "Кремниевый транзистор" (UBE ~ 0.6 В), "Германиевый транзистор" (UBE ~ 0.2 В) или "Неверное напряжение".

23. Расчет КПД усилителя.

Пользователь вводит выходную мощность Pout и потребляемую мощность Pin от источника питания. Программа вычисляет КПД (η = (Pout / Pin) * 100%). Вывести оценку: "Высокий КПД" (>70%), "Низкий КПД" (<30%) или "Средний КПД".

24. Проверка соответствия напряжения стандартам.

Пользователь вводит переменное напряжение. Программа определяет, к какому стандарту оно ближе: 220 В / 50 Гц (Россия/ЕС) или 110 В / 60 Гц (США/Япония), и

выводит соответствующую страну. Если напряжение сильно отличается от обоих, вывести "Нестандартное напряжение".

25. Определение необходимого теплоотвода.

Пользователь вводит рассеиваемую мощность на компоненте P и максимальную рабочую температуру без радиатора Tmax. Программа, используя условное пороговое значение (например, 1 Вт), рекомендует: "Теплоотвод не требуется" или "Необходим теплоотвод!".

26. Расчет выходного напряжения ЦАП.

Для простого ЦАП пользователь вводит опорное напряжение Uref) и 3-битный цифровой код. Программа вычисляет аналоговое напряжение по формуле Uout = Uref * (D0/2 + D1/4 + D2/8), где D0 - младший бит.

27. Определение сопротивления для ограничения тока светодиода.

Пользователь вводит напряжение питания Ups, прямое падение напряжения на светодиоде Uled и требуемый ток Iled. Программа вычисляет необходимое сопротивление резистора: R = (Ups - Uled) / Iled. Если Ups <= Uled, вывести ошибку.

28. Проверка условия насыщения транзистора.

Пользователь вводит ток коллектора Ic и ток базы Ib. Программа проверяет условие насыщения Ic < β * Ib, где β – условный коэффициент, например, 10. Вывести "Транзистор в насыщении" или "Транзистор в активном режиме".

29. Расчет частоты среза ФНЧ.

Пользователь вводит сопротивление R и емкость C для фильтра низких частот. Программа проверяет корректность введенных данных. Программа вычисляет частоту среза fс = 1 / (2 * π * R * C).

30. Определение полосы пропускания по добротности.

Пользователь вводит резонансную частоту контура fres и добротность Q. Программа вычисляет полосу пропускания Δf = fres / Q. Если Q <= 0, вывести ошибку.