import os
import platform
import datetime
import logging
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s')
def limpar_tela():
if platform.system() == 'Windows':
os.system('cls')
else:
os.system('clear')
def prosseguir(mensagem="Pressione Enter para continuar..."):
input(f"\n{mensagem}")
limpar_tela()
def validar_nome(nome):
if nome.isalpha():
return nome.upper()
return False
def validar_ano(ano, ano_atual):
idade = ano_atual - ano
return 1 <= idade <= 125
if __name__ == "__main__":
limpar_tela()
numeros = list(range(1, 11))
logging.info("Lista de números gerada com sucesso.\n")
print("=== ETAPA 2: COLETANDO NOMES ===")
nomes = []
for i in range(5):
while True:
nome = input(f"Digite o nome {i + 1}: ").strip()
nome_validado = validar_nome(nome)
if nome_validado:
nomes.append(nome_validado)
logging.info(f"Nome {i + 1} coletado: {nome_validado}")
break
else:
logging.error("Nome inválido. Deve conter apenas letras.")
prosseguir()
print("=== ETAPA 3: ANO DE NASCIMENTO ===")
ano_atual = datetime.datetime.now().year
while True:
try:
ano = int(input("Digite o ano de nascimento (4 dígitos): "))
if len(str(ano)) == 4 and validar_ano(ano, ano_atual):
logging.info(f"Ano de nascimento válido: {ano}")
break
else:
logging.error("Ano inválido. A idade deve estar entre 1 e 125 anos.")
except ValueError:
logging.error("Entrada inválida. Digite um ano com 4 dígitos.")
prosseguir()
print("=== RESULTADOS GERAIS ===")
logging.info("Exibindo os resultados finais.")
print(f"Números: {numeros}")
print(f"Nomes: {nomes}")
print(f"Ano atual: {ano_atual} - Ano de nascimento: {ano}")
prosseguir()
print("=== ETAPA 5: CONTAGEM DE ELEMENTOS ===")
listas = {"numeros": numeros, "nomes": nomes}
for nome_lista, lista in listas.items():
quantidade = len(lista)
logging.info(f"Lista '{nome_lista}' verificada com {quantidade} item(ns).")
prosseguir()
print("=== ETAPA 6: NÚMEROS ÍMPARES ===")
numeros_impares = [num for num in numeros if num % 2 != 0]
soma_impares = sum(numeros_impares)
print(f"Números ímpares: {numeros_impares}")
print(f"Soma dos números ímpares: {soma_impares}")
logging.info("Etapa 6 concluída: números ímpares processados.")
prosseguir()
print("=== ETAPA 7: NÚMEROS EM ORDEM DECRESCENTE ===")
print("Números em ordem decrescente:", sorted(numeros, reverse=True))
logging.info("Etapa 7 concluída: lista decrescente exibida.")
prosseguir()
print("=== ETAPA 8: TABUADA POR OPERAÇÃO ===")
operacoes = {
"ADIÇÃO": lambda a, b: f"{a} + {b} = {a + b}",
"SUBTRAÇÃO": lambda a, b: f"{a} - {b} = {a - b}",
"MULTIPLICAÇÃO": lambda a, b: f"{a} x {b} = {a * b}",
"DIVISÃO": lambda a, b: f"{a} / {b} = {a / b:.2f}",
}
while True:
try:
numero = int(input("Digite um número da lista para ver a tabuada completa: "))
if numero in numeros:
print(f"\nTabuada completa do número {numero}:\n")
for nome_op, op_func in operacoes.items():
print(f"--- {nome_op} ---")
for i in range(1, 11):
print(op_func(numero, i))
print()
logging.info(f"Etapa 8 concluída: tabuada completa do número {numero} exibida por operação.")
break
else:
logging.error("Número não encontrado na lista.")
except ValueError:
logging.error("Entrada inválida. Digite um número inteiro.")
prosseguir()
print("=== ETAPA 9: MÉDIA DOS NÚMEROS ===")
try:
media = sum(numeros) / len(numeros)
print(f"Média dos números: {media:.2f}")
logging.info(f"Etapa 9 concluída: média calculada como {media:.2f}.")
except ZeroDivisionError:
print("Não há números na lista para calcular a média.")
logging.error("Divisão por zero ao calcular a média.")
prosseguir("Fim do programa. Pressione Enter para sair...")