O tópico é antigo, mas acho que dá pra incrementar/melhorar um pouco...
Repare que o cálculo segue uma sequência lógica:
pega o total de segundos e divide por 86400 (a quantidade de segundos em um dia), o resultado (descontando as casas decimais) é o total de dias
pega o resto da divisão por 86400, assim tem-se a "sobra" (a quantidade de segundos que não é suficiente para completar um dia)
depois divide esse resultado por 3600 (a quantidade de segundos em uma hora), o resultado (descontando as casas decimais) é o total de horas
pega o resto da divisão por 3600, assim tem-se a "sobra" (a quantidade de segundos que não é suficiente para completar uma hora)
depois divide esse resultado por 60 (a quantidade de segundos em um minuto), o resultado (descontando as casas decimais) é o total de minutos
pega o resto da divisão por 60, assim tem-se a "sobra" (a quantidade de segundos que não é suficiente para completar um minuto)
A princípio daria para usar divmod, que já retorna ao mesmo tempo o resultado da divisão (sem as casas decimais) e o resto:
segundos = int(input('quantidade total de segundos:'))
dias, segundos = divmod(segundos, 86400)
horas, segundos = divmod(segundos, 3600)
minutos, segundos = divmod(segundos, 60)
print(f'{dias} dias, {horas} horas, {minutos} minutos e {segundos} segundos')
Mas se quiser generalizar, podemos usar um dicionário contendo as unidades que queremos extrair:
tempo_total = 32456876
unidades = { 'dias': 86400, 'horas': 3600, 'minutos': 60, 'segundos': 1 }
# inicializa todas as unidades com zero
resultado = dict.fromkeys(unidades.keys(), 0)
for unidade, qtd in unidades.items():
if tempo_total == 0:
break # se já zerou, não precisa continuar
resultado[unidade], tempo_total = divmod(tempo_total, qtd)
# 375 dias, 15 horas, 47 minutos, 56 segundos
print(', '.join(f'{qtd} {unidade}' for unidade, qtd in resultado.items()))
A partir do Python 3.7 é garantido que as chaves de um dicionário estão na ordem em que foram inseridas, então as unidades já estarão na ordem correta.
Assim fica mais flexível, pois bastaria alterar o dicionário de unidades para obter resultados diferentes. Por exemplo, se eu quisesse também o total de semanas, bastaria mudar para:
unidades = { 'semanas': 86400 * 7, 'dias': 86400, 'horas': 3600, 'minutos': 60, 'segundos': 1 }
E o resultado seria: "53 semanas, 4 dias, 15 horas, 47 minutos, 56 segundos".
Ou ainda, se o tempo_total fosse a quantidade de milissegundos, bastaria trocar para:
# agora é a quantidade de milissegundos
tempo_total = 32456876294
unidades = { 'semanas': 86400000 * 7, 'dias': 86400000, 'horas': 3600000, 'minutos': 60000, 'segundos': 1000, 'milissegundos': 1 }
# O resto do código é igual...
# A saída é:
# 53 semanas, 4 dias, 15 horas, 47 minutos, 56 segundos, 294 milissegundos