Это на самом деле не отвечает на вопрос, и это почти тривиально легко, но я думаю, что стоит поделиться. Если бы была возможность «длинных комментариев», я бы использовал ее.
РЕДАКТИРОВАТЬ: только что заметил, что использование str вместо repr устранит L самостоятельно
def firstAndLastDig(k, num):
s = str(num)
return (s[:k], s[-k:])
def firstAndLastDigSelfExp(k,n):
return firstAndLastDig(k,n**n)
Переполнение не является проблемой (единственное, что имеет дело с L, если вы используете repr вместо str),
firstAndLastDigSelfExp(6,12)
('891610', '448256')
firstAndLastDigSelfExp(42,491)
('209417336844579728122309696211520194012462', '160453713040914743773217804810667483135091')
И ни один из них не является ведущим нулем
>>> firstAndLastDigSelfExp(4,9)
('3874', '0489')
Это не значит, что модульные журналы и прочее не очень крутые - напротив, мне очень понравилось читать о том, как вы это делали, не генерируя всего числа. Я ничего не знал о modf, пока не прочитал вопрос OP, и тело foo очень интересно.