Informática, perguntado por barueriasus, 8 meses atrás

Preciso fazer um programa em Python que leia um horário(hora, minuto e segundo) de início, e a duração de um evento em segundos. O programa resultar com o novo horário(somando o horário informado com os segundos).

Soluções para a tarefa

Respondido por GeBEfte
7

O programa abaixo não conta com validação de dados ou controle/tratamento de exceções, assim espera-se que seja utilizado de forma correta, seguindo a proposta do exercício.

Se, por exemplo, enviarmos um dado em ponto flutuante ou string, será retornada uma exceção "ValueError" que interromperá o o andamento do programa.

Caso se quisesse prevenir a exceção, deveríamos adicionar uma etapa de validação dados e, para evitar interrupções, deveríamos adicionar uma etapa de tratamento de exceções para dizer ao programa o que deve ser feito na ocasião de um erro acontecer.

O exercício não deixa clara como deve ser feita a entrada de dados, a solução que será apresentada lê separadamente horas, minutos e segundos como variáveis inteiras (integer) e, também, optou-se pela não utilização de bibliotecas, já que isso tiraria quase todo desafio da tarefa.

Sem mais delongas, vamos ao código e, posteriormente, comento mais sobre a lógica adotada.

[Python 3.8]

#------------------Leitura de Dados----------------------------------

print('Preencha os campos abaixo com o horário atual')

h = int(input('Hora: '))

m = int(input('Minuto: '))

s = int(input('Segundo: '))

d = int(input('\nDuração do evento (segundos): '))

#----Determinação do Horário de Término do Evento---

s_final = (s + d) % 60

m_final = ( m + (s+d)//60 ) % 60

h_final = ( h + ( m + (s+d)//60 )//60 ) % 24

#----Apresentação do Horário de Término do Evento---

print(f'O fim do evento se dará às {h_final}h {m_final}min e {s_final} segundos')

#-----------------Fim do Programa-------------------------------------

Comentários:

--> Perceba que, nos cálculos, utilizamos várias vezes as operações "%" (resto da divisão) e "//" (divisão inteira).

--> Começamos determinando os segundos do horário final (s_final), lembre-se que 60 segundos equivalem a 1 minuto, logo apenas o resto da divisão (%) dos segundos totais por 60 nos interessa aqui, a parte inteira da divisão será "transformada" em minutos.

--> Para os minutos, lembre-se que 60 minutos equivalem a 1 hora, logo faremos algo semelhante ao que foi visto no cálculo dos segundos. Apenas  o resto da divisão (%) dos minutos totais por 60 nos interessa, no entanto precisamos considerar a parte inteira dos segundos que foi "transformada" em minutos. No código essa consideração é feita em " (s+d)//60". De novo, a parte inteira da divisão será transformada em horas.

--> Nas horas, como esperado, será feito algo semelhante ao visto para o cálculo dos segundos e minutos. Temos agora que 24 horas equivalem a 1 dia, assim apenas o resto da divisão das horas totais por 24 serão de interesse. Vale ressaltar que precisamos considerar os minutos que foram transformados" em horas, essa consideração aparece no código em "( m + (s+d)//60 )//60"

Vamos à um exemplo prático do que foi falado acima.

Considere o horário inicial 22h55min32s e uma duração do evento de 7954s.

Segundos totais: 32 + 7954 = 7986s

7986 / 60 = 133 inteiros com resto 6

Segundos = 6

Minutos totais: 55 + 133 = 188min

188 / 60 = 3 inteiros com resto 8

Minutos = 8

Horas totais: 22 + 3 = 25h

25/24 = 1 inteiro com resto 1

Horas = 1

Término do Evento: 1h 8min e 6s

\Huge{\begin{array}{c}\Delta \tt{\!\!\!\!\!\!\,\,o}\!\!\!\!\!\!\!\!\:\,\perp\end{array}}Qualquer~d\acute{u}vida,~deixe~ um~coment\acute{a}rio

Anexos:

barueriasus: O programa funcionou conforme o iniciado solicitava, muito obrigado!
Perguntas interessantes