Вчера была достаточно интересная задача. Её решило 38% из 24-х человек (а что так мало участвовавших?).

Код задачи:

a = 3
b = a,
c = b * a

print(c[2] * *b)

Разбор задачи Объявляем три переменные:

  • a - Со значением 3.
  • b - Кортеж с единственным элементом из переменной a, т.е. 3
  • c - С результатом умножения кортежа b на a.

Затем в функции print выводим результат умножения третьего элемента из кортежа c на единственный элемент в кортеже b.

Очевидно, будет ошибка! Всё верно. Будет ошибка SyntaxError, поскольку нельзя распаковывать коллекцию внутри математической операции.

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

Что будет если убрать ошибку? Тут есть два варианта развития: Первый. Если мы просто убёрем распаковку:

a = 3
b = a,
c = b * a

print(c[2] * b)

То в данном случае третий элемент кортежа c - 3 будет умножен на кортеж b и мы получим ответ (3, 3, 3).

Второй. Если мы хотим умножить именно на значение в кортеже:

a = 3
b = a,
c = b * a

print(c[2] * b[0])

То в данном случае получим выражение 3 * 3 и ответ 9.