Да, я понимаю, почему это может сбивать с толку.
Был ли f(f(f(...(f(x)))) = x
заключен в тройные двойные кавычки? Это строка документации функции, вроде как комментирует ваш код. Он не должен был быть изолированным, если бы что-то его не защищало.
Представьте, что f назывался increment_by_one.
Вызов increment_by_one в 10 раз больше, чем при x, равном 2, даст 12. Независимо от того, сколько раз вы увеличиваете, кажется, вы никогда не вернетесь 2. 2. 1008 *
Теперь представьте, что f назывался multiply_by_one.
Вызов multiply_by_one 5 раз, как это при x 3, даст 3. Sweet.
Итак, некоторые примеры выходных данных, с которыми вы можете проверить (вы должны написать функции)
knice(increment_by_one, 1, 3, 5)
вернет 0.
knice(multiply_by_one, 1, 3, 5)
вернул бы 1.
Как еще один совет, отступы важны в python.