2026/27, 10Д, Python: Функции (часть2)

M: Исключающее ИЛИ (XOR)

В задачах на реализацию булевых функций необходимо реализовать функции, которые принимают в качестве параметров два или три значения типа bool и возвращают значение типа bool. Сама функция должна содержать только одну инструкцию return и какие-то логические операции с параметрами, переданными в функцию. Разрешается использовать только операции and, or, not.

Реализуйте функцию xor(x, y), реализующую логическую операцию XOR (исключающее или, обозначается \(x \oplus y\)). Функция возвращает True, если одно (но не оба одновременно!) из значений параметров функции есть True. То есть функция задаётся следующей таблицей истинности (для удобства в ней использованы числа 0 и 1 для обозначения логических величин):

\(\ x\ \)\(\ y\ \)\(x\oplus y\)
000
011
101
110

Вызов функции Возвращаемое значение
xor(False, True)
True


N: Импликация (следование)

Реализуйте функцию imp(x, y), реализующую логическую операцию “импликация” (следование, обозначается \(x\Rightarrow y\)). Функция возвращает True, если из утверждения \(x\) следует утверждение \(y\), а именно, из ложного утверждения следует как ложное, так и истинное утверждение, а из истинного утверждения следует только истинное утверждение. То есть функция задаётся следующей таблицей истинности.

\(\ x\ \)\(\ y\ \)\(x\Rightarrow y\)
001
011
100
111

Вызов функции Возвращаемое значение
imp(False, True)
True


O: Функция голосования

Реализуйте функцию голосования (или большинства) major(x, y, z) (обозначается\(\langle x, y, z\rangle\)). Функция возвращает то значение, которое встречается чаще среди её аргументов. Функцию можно задать следующей таблицей:

\(\ x\ \)\(\ y\ \)\(\ z\ \)\(\langle x, y, z\rangle\)
0000
0010
0100
0111
1000
1011
1101
1111

Вызов функции Возвращаемое значение
major(False, True, False)
False


P: Гистограмма

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

Напишите функцию histogram(a), принимающей в качестве параметра список целых неотрицательных чисел. Функция должна напечатать на экран столько строчек, сколько элементов в списке. \(i\)-я строка должна содержать \(a[i]\) символов “#” (в нумерации с нуля). Функция не возвращает значения.

Вызов функции Вывод на экран
histogram([1, 7, 9])
#
#######
#########

Q: Напечатать треугольник

Напишите функцию triangle(n), получающую в качестве параметра целое положительное число \(n\) и выводящую на экран треугольник из \(n\) строк, составленный из символов “*”. Первая строка содержит одну звёздочку, каждая следующая строка содержит на 2 звёздочки больше, чем предыдущая. При этом все строки, кроме последней, должны содержать в начале один или несколько пробелов так, чтобы строки были выровнены по центру последней строки.

Вызов функции Вывод на экран
triangle(4)
   *
***
*****
*******

R: Напечатать ёлочку

Напишите функцию fir(a, b), получающую на вход два целых числа \(1\le a\le b\), и выводящую ёлочку из \(b - a + 1\) треугольников высоты \(a\), \(a + 1\), ..., \(b\). Используйте функцию triangle из предыдущей задачи, модифицировав её так, чтобы она получала второй параметр: дополнительное число пробелов, которое нужно добавить в начало каждой строки выводимого треугольника. Самая нижняя строка ёлочки не должна содержать пробелов в начале строки. Сдайте на проверку две функции.

По правилам оформления программ функции должны отделяться друг от друга двумя пустыми строками.

Вызов функции Вывод на экран
fir(2, 4)
   *
***
*
***
*****
*
***
*****
*******

S: Вернуть только чётные числа

В задачах на считывание данных функция должна считать данные с клавиатуры при помощи функции input и вернуть считанные данные (или их часть, или что-то другое) при помощи инструкции return.

Напишите функцию read_even(), которая

  1. считывает при помощи функции input список чисел, записанных в одной строке через пробел,
  2. составляет новый список, содержащий только чётные из считанных чисел,
  3. возвращает полученный список.
Вызов функции Входные данные Возвращаемое значение
read_even()
1 2 3 4 5 6
[2, 4, 6]

T: Вернуть числа, больше данного

Напишите функцию read_greater(x), которая

  1. считывает при помощи функции input список чисел, записанных в одной строке через пробел,
  2. составляет новый список, содержащий те числа, которые больше x
  3. возвращает полученный список.
Вызов функции Входные данные Возвращаемое значение
read_greater(2)
1 2 3 4 5 6
[3, 4, 5, 6]
read_greater(3)
6 5 4 3 2 1
[6, 5, 4]

U: Считать последовательность до нуля

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

Вызов функции Входные данные Возвращаемое значение
read()
1
2
3
0
[1, 2, 3]

V: Считать последовательность до двух равных чисел

Напишите функцию read, которая будет считывать последовательность чисел, записанных по одному в строке, пока не встретит два подряд идущих равных числа. Функция должна вернуть это число. Последующие числа считывать не нужно.

Вызов функции Входные данные Возвращаемое значение
read()
1
2
3
3
4
3

W: Читайте условия внимательно

Напишите функцию read(k), которая будет считывать список чисел, записанных в одной строке через пробел. После этого функция должна вывести список тех же чисел, увеличенных на \(k\), через пробел, и вернуть список тех же чисел, уменьшенных на \(k\).

Вызов функции Входные данные Вывод на экран Возвращаемое значение
read(7)
1 2 3
8 9 10
[-6, -5, -4]

X: Сумма элементов списка

В упражнениях на глобальные переменные функция должна модифицировать какую-то глобальную переменную. В целом, механизм глобальных переменых не одобряется и должен использоваться только в специальных случаях.

Напишите функцию sum_list(a), которая получает в качестве параметра список целых чисел, суммирует его элементы и добавляет их к глобальной переменной total_sum. Сама функция не возвращает значения.

Пример программы Вывод на экран
total_sum = 0
sum_list([1, 2, 3])
print(total_sum)
sum_list([1, 7, 9])
print(total_sum)
6
23

Y: Наибольшая цифра числа

Напишите функцию max_digit(n), которая получает в качестве параметра целое положительное число n, определяет его наибольшую цифру и сравнивает полученное значение с глобальной переменной max_digit_value. Если значение наибольшей цифры числа больше, чем max_digit_value, то необходимо обновить значение max_digit_value. Сама функция не возвращает значения.

Опять не используем работу со списками и строками, а используем целочисленную арифметику.

Пример программы Вывод на экран
max_digit_value = 0
max_digit(321)
print(max_digit_value)
max_digit(179)
print(max_digit_value)
3
9

Z: Последняя бессмысленная задача

Напишите функцию read(), которая считывает с клавиатуры целое число и сравнивает его с предыдущим считанным этой функцией числом. Значение предыдущего считанного числа сохраняется в глобальной переменной prev. Если новое значение совпадает с предыдущим считанным значением, то функция должна вернуть True, а если не совпадает (или если это первый вызов функции), то функция должна вернуть False. В любом случае, функция должна обновить значение переменной prev.

В этой задаче глобальная переменная prev не обязана существовать. Для того, чтобы проверить, существует ли глобальная переменная с именем prev можно использовать такой код:

if 'prev' in globals():

Если нужно проверить наличие переменной среди локальных переменных, то используется словарь locals().

Пример программы Ввод Вывод
print(read())
print(prev)
print(read())
print(prev)
print(read())
print(prev)
print(read())
print(prev)
8
8
7
8
False
8
True
8
False
7
False
8