4.2. Практикум

Примечание

При выполнении заданий используйте заготовки решений: -> Репозиторий.

Подробнее: см. Цикл выполнения и защиты заданий.

Важно

В данной теме придерживайтесь следующих правил:

  • не используйте коллекции в любых задачах кроме задач из раздела «Коллекции» (до задачи № 4.2.29; например, если дана последовательность чисел, не нужно использовать списки, следует ввести каждое число с клавиатуры отдельно, не сохраняя их.

Предупреждение

Использовать не изученные до сих пор конструкции языка (try, import и др.) запрещено.

4.2.1. Условный оператор

№ 4.2.1

Рассчитать значение \(f\) при заданном значении вещественного числа \(x\):

\[\begin{split}f(x) = \begin{cases} \sqrt{x} + x^2, & \mbox{при } x \geqslant 0 \mbox{,} \\ \cfrac{1}{x}, & \mbox{в противном случае.} \end{cases}\end{split}\]

При выводе на экран оставьте 2 знака после запятой.

№ 4.2.2

Определите максимальное и минимальное значения из двух различных целых чисел.

№ 4.2.3

Вася пытается высунуть голову в форточку размерами \(a\) и \(b\) см. Приняв условно, что его голова - круглая диаметром \(d\) см, определите, сможет ли Вася сделать это. Для прохождения головы в форточку необходим зазор в \(1\) см. с каждой стороны.

Все величины - целые числа.

№ 4.2.4

Известны год и номер месяца сегодняшнего дня, а также год и номер месяца рождения человека (нумерация месяцев с 1: январь - 1 и т.д.). Определите возраст человека (число полных лет).

№ 4.2.5

Дана точка с целыми ненулевыми координатами \((x; y)\). Определить номер четверти координатной плоскости, которой она принадлежит.

№ 4.2.6

Даны вещественные числа \(a\), \(b\), \(c\) (\(a \neq 0\)).

Решите уравнение \(ax^2 + bx + c = 0\). При выводе значений оставьте 1 знак после запятой.

4.2.2. Цикл с условием

№ 4.2.7

Дана непустая последовательность целых чисел, оканчивающаяся нулем. Найти сумму и количество введенных чисел.

№ 4.2.8

Дано число \(n\). Из чисел \(0, 5, 10, 15, 20, 25, ...\) напечатать те, которые не превышают \(n\).

№ 4.2.9

Дано вещественное число \(a\). Найдите наименьшее натуральное \(n\), для которого верно

\[1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n} \gt a\]

№ 4.2.10

Дано натуральное число. Определите сумму и количество его цифр.

Совет

Зная, что операция нахождения остатка от деления числа на 10 всегда возвращает его последнюю цифру, можно зациклить это деление, «отрезая» на каждой итерации найденную цифру, используя деление нацело:

n

n % 10

1234

4

123

3

12

2

1

1

0

-

где окончанием цикла будет наличие 0 в исходном числе.

№ 4.2.11

Вывести в строку 10 первых натуральных чисел, оканчивающихся на цифру \(k\), кратных числу \(s\) и находящихся в интервале, левая граница которого равна \(start\).

4.2.3. Совместный цикл (цикл по коллекциям)

№ 4.2.12

Даны целые числа \(a\) и \(b\) (\(a\) может быть больше \(b\)). Напечатайте:

  • числа от минимального до максимального в строчку (разделяя пробелом);

  • числа от максимального до минимального «столбиком».

№ 4.2.13

Для введенных с клавиатуры положительных целых чисел \(a\) и \(b\) (\(a \leq b\)) определите:

  • сумму всех целых чисел от \(a\) до \(b\);

  • произведение всех целых чисел от \(a\) до \(b\);

  • среднее арифметическое всех целых чисел от \(a\) до \(b\);

  • среднее геометрическое нечетных чисел от \(a\) до \(b\).

Отрезок поиска включает сами числа \(a\) и \(b\). При выводе вещественных результатов оставьте два знака после запятой.

№ 4.2.14

Начав тренировки, лыжник в первый день пробежал \(s\) км. (\(s > 0\), вещественное число). Каждый следующий день он увеличивал пробег на \(p\) % (\(0 < p \leq 100\), вещественное число) от пробега предыдущего дня. Определите:

  • пробег лыжника за второй, третий, …, десятый день тренировок;

  • какой суммарный путь он пробежал за первые 10 дней тренировок.

При выводе вещественных результатов оставьте один знак после запятой.

№ 4.2.15

Известна масса каждого предмета в кг., загружаемого в грузовик. Определить, возможна ли перевозка груза, если грузоподъемность грузовика равна \(p\) кг.

Совет

В условии задачи ничего не сказано о количестве предметов, поэтому количество и массу каждого предмета необходимо спросить у пользователя. Аналогичного правила придерживайтесь и в других заданиях.

№ 4.2.16

В области несколько районов. Заданы площади, засеваемые пшеницей (га.), и средняя урожайность (ц/га) в каждом районе.

Определите количество пшеницы, собранное по области. При выводе вещественных результатов оставьте один знак после запятой.

4.2.4. Прерывание и продолжение циклов

№ 4.2.17

Решите задачу № 4.2.7, организовав бесконечный цикл, который бы прерывался при выполнении условия, используя оператор break.

Совет

Простой способ организации бесконечного цикла:

while True:
    ...
    if ...:
        break

№ 4.2.18

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

Определите количество гласных и согласных букв в предложении. Для пропуска пробелов используйте оператор continue.

4.2.5. Комбинация циклов и условий

Совет

В данном разделе разрешается использовать любые комбинации циклов, однако, помните, что цикл for ... in, как правило, проще, чем while и поэтому предпочтительнее.

№ 4.2.19

Выведите на экран (в строку) все целые числа от \(a\) до \(b\), кратные некоторому числу \(c\).

№ 4.2.20

Выведите на экран (в строку) все трехзначные натуральные числа, сумма цифр которых равна целому числу \(n\) (\(0 < n \leq 27\)).

Совет

Организуйте цикл, перебирающий все трехзначные числа, внутри которого разбейте число на цифры для проверки суммы.

№ 4.2.21

Известно количество учеников в классе и их рост (см.); рост мальчиков условно задан отрицательными числами. Определите средний рост мальчиков и средний рост девочек.

При выводе вещественных результатов оставьте один знак после запятой.

№ 4.2.22

Даны \(n\) вещественных чисел. Определите максимальное и минимальное из них.

При выводе вещественных результатов оставьте два знака после запятой.

№ 4.2.23

Дано натуральное число \(n\). Определите, является ли оно членом последовательности Фибоначчи .

№ 4.2.24

Дано \(n\) вещественных чисел. Определите, является ли последовательность упорядоченной по возрастанию. В случае отрицательного ответа выведите порядковый номер числа, нарушающего такую упорядоченность.

Совет

Задачи такого типа удобно решать, используя «алгоритм с флажком». Флажок - значение, по которому можно определить ответ на вопрос, которое меняется в случае если условие выполнения алгоритма нарушено.

Например, можно принять, что флажок = 1 (считаем по умолчанию, что последовательность упорядочена по возрастанию). Далее, внутри цикла в случае нарушения последовательности флажок становится 0 и осуществляется выход из цикла. После цикла по флажку можно однозначно ответить на поставленный вопрос.

Пример (в качестве «флажка» используется переменная „index“ - индекс элемента, нарушающего порядок возрастания):

index = -1
for i in range(...):
   ...
   if ...:
      index = i
      break

if index == -1:  # Если 'index' по-прежнему -1, значит число, нарушающее порядок, не найдено
   ...

№ 4.2.25

Выведите на экран таблицу умножения на \(n\) (\(2 < n \leq 9\)) в виде:

1 х 1 = 1     1 х 2 = 2      ...   1 х n = ...
2 х 1 = 2     2 х 2 = 4      ...   2 х n = ...
...           ...            ...   ...
n х 1 = ...   n х 2 = ...    ...   n х n = ...

Совет

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

№ 4.2.26

Выведите графическое изображения делимости чисел от 1 до \(n\) (значение \(n\) вводится с клавиатуры) - в каждой строке напечатайте очередное число и столько символов *, сколько делителей у этого числа.

Например, если \(n = 4\), на экране должно быть напечатано:

1 *
2 **
3 **
4 ***

№ 4.2.27

Выведите на экран (в строку) \(n\) первых простых чисел.

Совет

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

В качестве алгоритма проверки «на простоту» используйте обычный перебор (простое число не делится ни на что кроме себя и единицы).

№ 4.2.28

Составьте программу для нахождения всех натуральных решений уравнения \(x^2 + y^2 + z^2 = k^2\), где \(x, y, z \in [1, 30]\), а \(k\) вводится с клавиатуры.

4.2.6. Коллекции

№ 4.2.29

Дан список из \(n\) вещественных чисел, введенных с клавиатуры (среди чисел есть по крайней мере одно положительное и отрицательное число).

Сформируйте из него 2 списка:

  • положительных чисел, используя списковые включения;

  • отрицательных чисел, не используя списковые включения.

Выведите на экран:

  • исходный список;

  • получившиеся списки;

  • среднее арифметическое первого списка и среднее геометрическое второго списка.

При выводе вещественных результатов оставьте два знака после запятой.

№ 4.2.30

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

  • являются ли все элементы положительными числами?

  • есть ли хотя бы один нулевой элемент в списке?

  • являются ли все элементы четными числами?

  • есть ли хотя бы один нечетный элемент в списке?

Каждый из пунктов выполните дважды: используя стандартный проход в цикле (например, через алгоритм с флажком), и используя функции any() и/или all().

Совет

Для ввода списка произвольной длины в одну строку воспользуйтесь методом str.split() для строки ввода (результата input()), после чего сформируйте список целых чисел, используя списковые включения.

№ 4.2.31

Дано предложение. Выведите его на экран, удалив из него все слова, содержащие произвольную букву (вводится с клавиатуры).

Совет

Строковые методы str.split() и str.join() могут оказаться полезными.

№ 4.2.32

В зрительном зале кинотеатра \(n\) рядов, количество мест в которых может меняться. Разработчик смоделировал занятость мест как двумерный массив (список из списков), где каждый вложенный список содержит информацию о проданных местах в соответствующем ряду (1 - занято, 0 - свободно):

[
    [0, 0, 1],     # 1 ряд, первые 2 места свободны
    [1, 1, 1, 1],  # 2 ряд, все места заняты
    ...
]

Напишите программу, которая позволит пользователю увидеть количество свободных мест, а также, введя номер ряда и места, получить информацию - свободно оно или нет. Данные о занятости мест вводятся с клавиатуры (набор из 0 и 1 для каждого ряда).

Совет

Заполнение вложенных списков (каждого ряда) организуйте аналогично задаче № 4.2.30.

№ 4.2.33

Вводится список из \(n\) сотрудников в формате:

Фамилия Имя Отчество Пол Стаж

где:

  • все значения разделены пробелом и сами не содержат пробелов;

  • Пол: "М" или "Ж";

  • Стаж: количество полных лет, отработанных в компании.

Сохраните введенные задания в виде списка списков:

[
    ["Петрова", "Анна", "Алексеевна", "Ж", 5],
    ["Семенов", "Николай", "Михайлович", "М", 2],
    ...
]

Далее:

  • определите самого «молодого» и самого «старого» сотрудника, используя функцию sorted();

  • сформируйте 2 отельных списка: мужчин и женщин и ответьте, в каком из списков больше имен, начинающихся на букву \(k\) (вводится с клавиатуры).

№ 4.2.34

Вводится список из \(n\) годовых вкладов, предлагаемых банками, в формате:

Банк Сумма Процент

где:

  • все значения разделены пробелом и сами не содержат пробелов;

  • наименование банка уникально;

  • Сумма: сумма для открытия вклада в руб. (целое число, \(> 0\));

  • Процент: годовой процент по вкладу (вещественное число, \((0, 100]\)).

Сохраните введенные данные в виде списка словарей:

[
    {"name": "Банк 1", "initial_sum": 50000, "rate": 5.2},
    ...
]

Далее определите (гарантируется, что искомый банк - один):

  • самый доступный банк (с наименьшей первоначальной суммой);

  • самый выгодный банк, принимая, что за год прибыль = сумма * процент / 100.

При выводе финансовых значений оставьте два знака после запятой.