Вчера была достаточно интересная задача. Её решило 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.