Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta
import numpy as np

# 1. Definir os estados do clima e um mapeamento para índices numéricos
clima_estados = ['Ensolarado', 'Nublado', 'Chuvoso']
estado_para_indice = {estado: i for i, estado in enumerate(clima_estados)}
indice_para_estado = {i: estado for i, estado in enumerate(clima_estados)}

print(f"Estados do Clima: {clima_estados}")
print(f"Mapeamento Estado -> Índice: {estado_para_indice}")
print(f"Mapeamento Índice -> Estado: {indice_para_estado}"

# 2. Definir a matriz de transição de probabilidades

matriz_transicao = np.array([
    [0.7, 0.2, 0.1],  # De Ensolarado
    [0.3, 0.4, 0.3],  # De Nublado
    [0.2, 0.3, 0.5]   # De Chuvoso
])

print("Matriz de Transição:")
print(matriz_transicao)

# 3. Função para prever o próximo estado
def prever_proximo_estado(estado_atual_indice, matriz_transicao):
    probabilidades = matriz_transicao[estado_atual_indice]
    # np.random.choice seleciona um índice baseado nas probabilidades fornecidas
    proximo_estado_indice = np.random.choice(len(probabilidades), p=probabilidades)
    return proximo_estado_indice

# Exemplo rápido:
print(f"Próximo estado a partir de Ensolarado: {indice_para_estado[prever_proximo_estado(estado_para_indice['Ensolarado'], matriz_transicao)]}")

# 4. Função para simular o clima por N dias
def simular_clima(estado_inicial, num_dias, matriz_transicao, estado_para_indice, indice_para_estado):
    historico_clima = [estado_inicial]
    estado_atual_indice = estado_para_indice[estado_inicial]

    for _ in range(num_dias - 1):
        proximo_estado_indice = prever_proximo_estado(estado_atual_indice, matriz_transicao)
        historico_clima.append(indice_para_estado[proximo_estado_indice])
        estado_atual_indice = proximo_estado_indice

    return historico_clima
    
# 5. Testando o modelo com um exemplo

estado_inicial = 'Ensolarado'
num_dias = 7

previsao_clima = simular_clima(estado_inicial, num_dias, matriz_transicao, estado_para_indice, indice_para_estado)

print(f"Previsão do tempo para os próximos {num_dias} dias começando com '{estado_inicial}':")
for i, estado in enumerate(previsao_clima):
    print(f"Dia {i+1}: {estado}")
1 resposta

Oii Paulo, tudo bem?

Obrigada por compartilhar seu projeto aqui no fórum! A estrutura que você montou ficou bem organizada: separar os dicionários de mapeamento (estado_para_indice e indice_para_estado), isolar a lógica de previsão em uma função própria e depois compor a simulação em cima disso é exatamente o tipo de design que deixa o código mais legível e fácil de manter.

Vale notar que há um parêntese faltando no print da linha 10:

print(f"Mapeamento Índice -> Estado: {indice_para_estado}")  # fechando o parêntese aqui

Pequeno detalhe, mas que causaria um SyntaxError na execução. Fora isso, tudo certo!

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade