Ir para conteúdo
Fórum Script Brasil
  • 0

Converter segundos em dia, horas, min e segundos


mariogottinari

Pergunta

Boa noite, sou iniciante e gostaria de saber se tem algo errado nesta código, pois o corretor automático do curso que faço sinaliza que há erro. Se algum poder ajudar, Obrigado!

segundos_str = input("Por favor, entre com o número de segundos que deseja converter:")
total_segs = int(segundos_str)


horas = total_segs // 3600
dias = horas//86400

segs_restantes = total_segs % 3600
minutos = segs_restantes // 60
segs_restantes_final = segs_restantes % 60

if (horas >= 24): 

	dias = int(horas / 24)
	horas = int(horas % 24)


print(dias,"dias,",horas,"horas,",minutos,"minutos e",segs_restantes_final,"segundos.")

 

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Bom!

Alem de tambem ser iniciante no mundo da programação, não sou lá muito bom em termos de matematica, mas . . . vamos lá!

Dando uma olhada simples, não vi nada de errado, executei o seu codigo tanto em Python 2X quanto Python 3X, na plataforma Linux Ubuntu 32-bit e o codigo aparentemente faz corretamente o que deveria fazer.

Se o erro existe provavelmente deve ser um ( erro de logica ), tente ver extamente o que o corretor automatico do seu curso, diz exatamente, para ver se isso ajuda a encontrar o erro de forma mais rapida!

Caso contrario, você terá de realizar teste calculando valores, exemplo:

32456876 = 375 dias, 15 horas, 47 minutos e 56 segundos

Aqui deu o resultado certinho, pelo menos pelos testes que fiz!

Link para o comentário
Compartilhar em outros sites

  • 0

segundos = int(input("Por favor, entre com o número de segundos que deseja converter: "))

dias = segundos // 86400
segundos_rest = segundos % 86400
horas = segundos_rest // 3600
segundos_rest = segundos_rest % 3600
minutos = segundos_rest // 60
segundos_rest = segundos_rest % 60

print(dias,"dias,",horas,"horas,",minutos,"minutos e",segundos_rest,"segundos.")

Link para o comentário
Compartilhar em outros sites

  • 0
Em 09/02/2017 em 13:12, Camilla Zuba disse:

segundos = int(input("Por favor, entre com o número de segundos que deseja converter: "))

dias = segundos // 86400
segundos_rest = segundos % 86400
horas = segundos_rest // 3600
segundos_rest = segundos_rest % 3600
minutos = segundos_rest // 60
segundos_rest = segundos_rest % 60

print(dias,"dias,",horas,"horas,",minutos,"minutos e",segundos_rest,"segundos.")

Boa tarde! eu gostaria de saber o que significa // e o % antes dos numeros....obrigado, poderia explicar linha a linha o que foi feito? obrigado
 

Link para o comentário
Compartilhar em outros sites

  • 0

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

 

Editado por hkotsubo
Sério que não aceita markdown aqui?
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...