# AP3 - A1.
def hora_valida(hora, minuto):
"""
Verifica se uma hora e um minuto são valido.
Args:
hora: Um valor inteiro representando a hora.
minuto: Um valor inteiro representando o minuto.
Returns:
True se a hora for um numero inteiro entre 0 (inclusive) e 24 (exclusive),
e o minuto um valor inteiro entre 0 (inclusive) e 60 (exclusive).
Retorna False caso contrario.
"""
return 0 <= hora < 24 and 0 <= minuto < 60
# Exemplo de uso:
print(hora_valida(23,59))
print(hora_valida(24, 60))
print(hora_valida(0, 0))
print(hora_valida(12, 30))
print(hora_valida(-1, 10))
print(hora_valida(10, 60))
print(hora_valida(10.5, 30))
print(hora_valida(10, 30.5))
# AP3 - A2.
def soma_minutos(hora, minuto, periodo):
"""
Soma um periodo em minutos a uma hora e minutos validos.
Args:
hora: Um valor inteiro representando a hora (0-23).
minuto: Um valor inteiro representando o minuto (0-59).
periodo: Um valor inteiro representando o periodo em minutos a ser somado.
Returns:
Uma tupla contendo a nova hora e o novo minuto após a soma do periodo.
A hora volta a 0 quando 24:00 é ultrapassado.
"""
total_minutos = hora * 60 + minuto + periodo
nova_hora = (total_minutos // 60) % 24
novo_minuto = total_minutos % 60
return (nova_hora, novo_minuto)
# Exemplo de uso:
print(soma_minutos(20, 20, 120))
print(soma_minutos(23, 30, 120))
print(soma_minutos(23, 45, 90))
print(soma_minutos(10, 0, 30))
print(soma_minutos(10, 30, 0))
print(soma_minutos(0, 0, 1440))
print(soma_minutos(12, 0, 60))
# AP3 - B1.
def bissexto(ano):
"""
Verifica se um ano é bissexto.
Args:
ano: Um valor inteiro representando o ano.
Returns:
True se o ano for bissexto, False caso contrario.
"""
return (ano % 4 == 0 and ano % 100 != 0) or ano % 400 == 0
def dias_no_mes(mes, ano):
"""
Retorna o numero de dias em um determinado mês e ano.
Args:
mes: Um valor inteiro representando o mes (1-12).
ano: Um valor inteiro representando o ano.
Returns:
O numero de dias no mes especificado.
"""
if mes in (1, 3, 5, 7, 8, 10, 12):
return 31
elif mes == 2:
return 29 if bissexto(ano) else 28
else:
return 30
def data_valida(ano, mes, dia):
"""
Verifica se uma data é valida.
Args:
ano: Um valor inteiro representando o ano.
mes: Um valor inteiro representando o mes (1-12).
dia: Um valor inteiro representando o dia.
Returns:
True se a data for valida, false caso contrario.
"""
if not (isinstance(ano, int) and isinstance(mes, int) and isinstance(dia, int)):
return False
if not (1<= mes <= 12):
return False
if not (1 <= dia <= dias_no_mes(mes, ano)):
return False
return True
def nr_dias_passados(ano, mes, dia):
"""
Calcula o numero de dias passados desde o inicios do ano até a data especificada.
Args:
ano: Um valor inteiro representando o ano.
mes: Um valor inteiro representando o mes (1-12).
dia: Um valor inteiro representando o dia.
Returns:
O numero de dias passados desde o inicio do ano, exclusivo o dia especificado.
Retorna None se a data não for valida.
"""
if not data_valida(ano, mes, dia):
print("Data Invalida!")
return None
dias_passados = 0
mes_atual = 1
while mes_atual < mes:
dias_passados += dias_no_mes(mes_atual, ano)
mes_atual += 1
return dias_passados
# Exemplo de uso:
print(nr_dias_passados(2025, 2, 1))
print(nr_dias_passados(2024, 3, 15))
print(nr_dias_passados(2023, 12, 31))
print(nr_dias_passados(2024, 2, 29))
print(nr_dias_passados(2024, 2, 30))
print(nr_dias_passados(2024, 13, 10))
print(nr_dias_passados(2024, 2, 'a'))
# AP3 - B2.
def bissexto(ano):
"""
Verifica se um ano é bissexto.
Args:
ano: Um valor inteiro representando o ano.
Returns:
True se o ano for bissexto, False caso contrario.
"""
return (ano % 4 == 0 and ano % 100 != 0) or ano % 400 == 0
def dias_no_mes(mes, ano):
"""
Retorna o numero de dias em um determinado mes e ano.
Args:
mes: Um valor inteiro representando o mes (1-12).
ano: Um valor inteiro representando o ano.
Returns:
o numero de dias no mes especificado.
"""
if mes in(1, 3, 5, 7, 8, 10, 12):
return 31
elif mes == 2:
return 29 if bissexto(ano) else 28
else:
return 30
def data_valida(ano, mes, dia):
"""
Verifica se uma data é valida.
Args:
ano: Um valor inteiro representando ano.
mes: um valor inteeiro representando o mes (1-12).
dia: Um valor inteiro representando o dia.
Returns:
True se a data for valida, false caso contrario.
"""
if not (isinstance(ano, int) and isinstance(mes, int) and isinstance(dia, int)):
return False
if not (1 <= mes <= 12):
return False
if not (1 <= dia <= dias_no_mes(mes, ano)):
return False
return True
def nr_dias_em_falta(ano, mes, dia):
"""
Calcula o numero de deias que faltam para terminar o ano, incluindo o dia especificado.
Args:
ano: Um valor inteiro representando o ano.
mes: um valor inteiro representando o mes (1- 12).
dia: Um valor inteiro representando o dia.
Returns:
O numero de dias que faltam para terminar o ano, incluindo o dia especificado.
Retorna None se a data não for valida.
"""
if not data_valida(ano, mes, dia):
print("Data Invalida")
return None
dias_falta = 0
mes_atual = mes
while mes_atual <= mes:
if mes_atual == mes:
dias_falta += dias_no_mes(mes_atual, ano) - dia +1
else:
dias_falta += dias_no_mes(mes_atual, ano)
mes_atual += 1
return dias_falta
# Exemplo de uso:
print(nr_dias_em_falta(2025, 2, 1))
print(nr_dias_em_falta(2024, 3, 15))
print(nr_dias_em_falta(2023, 12, 31))
print(nr_dias_em_falta(2024, 2, 29))
print(nr_dias_em_falta(2024, 2, 30))
print(nr_dias_em_falta(2024, 13, 10))
print(nr_dias_em_falta(2024, 2, 'a'))
# AP3 - B3.
from datetime import date
def duracao_periodo(ano1, mes1, dia1, ano2, mes2, dia2):
"""
Calcula o numero de dias entre duas datas.
Args:
ano1: Ano da primeira data.
mes1: Mes da primeira data.
dia1: Dia da primeira data.
ano2: Ano da segunda data.
mes2: Mes da segunda data.
dia2: Dia da segunda data.
Returns:
O numero de dias entre duas data, excluindo a segunda data.
Retorna None se alguma das datas for invalida.
"""
try:
data1 = date(ano1, mes1, dia1)
data2 = date(ano2, mes2, dia2)
except ValueError:
print("Erro: uma ou ambas as datas são invalidas")
return None
if data1 > data2:
data_antiga = data2
data_recente = data1
else:
data_antiga = data1
data_recente = data2
delta = data_recente - data_antiga
return delta.days
# Exemplo de uso:
print(duracao_periodo(2025, 2, 1, 2024, 12, 28))
print(duracao_periodo(2023, 13, 1, 2024, 1, 1)) # Data Invalida
print(duracao_periodo(2025, 1, 1, 2025, 1, 1))
print(duracao_periodo(2024, 2, 29, 2024, 3, 1)) # Exemplo de um ano bissexto
# AP3 - B4.
def calcula_juros_acumulados(saldo_inicial, taxa_juro_messal, num_meses):
"""
Calcula o saldo acumulado em uma conta bancaria apos um certo numero de meses,
considerando um taxa de juro mesal fixa.
Args:
saldo_inicial: O saldo inicial da conta bancaria.
taxa_juro_messal: A taxa de juro mesal (0.05 para 5%).
num_meses: O numero de meses durante os quais os juros serão acumulados.
Returns:
O saldo acumulado apos o numero de meses especificado.
"""
saldo_atual = saldo_inicial
for _ in range (num_meses):
saldo_atual *= (1 + taxa_juro_messal)
return round (saldo_atual, 3)
# Exemplo de uso:
print(calcula_juros_acumulados(1000, 0.05, 6))
# AP3 - B5.
def calcula_media():
"""
Pede um conjunto de valores ao utilizador e calcula a média.
Se não for introduzido qualquer valor, devolve None.
"""
print("Introduza cada um dos valores para o calculo da media. Para terminar")
print("introduza -1.")
valores = []
while True:
try:
valor = float(input("Introduza o novo valor: "))
if valor == -1:
break
valores.append(valor)
except ValueError:
print("Por favor, introduza um número válido.")
if not valores:
return None
else:
return sum(valores) / len(valores)
# Exemplo de utilização:
media = calcula_media()
if media is not None:
print(f"{media:.5f}")
else:
print(media)
# AP3 - B6.
def determina_maior():
"""Pede um conjunto de valores e determina o maior deles.
Se não for introduzido qualquer valor, devolve None.
"""
print("Introduza cada um dos valores do conjunto. Para terminar introduza -1.")
maior = None
while True:
try:
valor = int(input("Introduza o novo valor: "))
if valor == -1:
break
if maior is None or valor > maior:
maior = valor
except ValueError:
print("Por favor, introduza um número inteiro.")
return maior
print(determina_maior())
# AP3 - A9.
def faz_marcacao_especialidade(hora_inicio, minuto_inicio):
"""
Permite marcar consultas médicas por especialidade, apresentando o horario de atendimento.
Args:
hora_inicio (int): A hora de inicio da atividade (0-23).
minuto_inicio (Int): O minuto de início da atividade (0-59)
"""
# AP3 - A1.
# AP3 - A1.
# AP3 - A1.
# AP3 - A1.
To embed this program on your website, copy the following code and paste it into your website's HTML: