A CEPA (Companhia Energética de Programação e Algoritmos) pretende disponibilizar em seu site um simulador de consumo com o qual seus clientes poderão estimar o valor de suas contas de energia com base na potência e tempo de uso de seus equipamentos elétricos. Como você está fazendo disciplina de programação e as férias estão chegando, resolveu se candidatar a uma vaga de emprego temporário na empresa, para criar o programa que fará os cálculos apresentados no site.
O consumo estimado de energia de cada equipamento de um cliente é calculado a partir do tempo médio de uso (em horas) e da potência do equipamento (Watts). O valor encontrado deve ser dividido por 1000 para que se tenha o consumo em KWH. Somando-se o consumo estimado de todos os equipamentos tem-se o consumo estimado total. Por fim, o valor final estimado da conta dependerá da bandeira em vigor naquele mês (conforme tabela 2) e do valor do ICMS (porcentagem de imposto sobre o valor total).
Faça então um programa que, tendo a tabela de potência de equipamentos abaixo (tabela 1), receba do usuário: a bandeira em vigor no mês, o valor do ICMS, a quantidade de equipamentos a ser informada e os equipamentos com o tempo médio de uso diário (em horas) e calcule o valor estimado da conta do usuário.
Obs: os dados das duas tabelas devem ser tratados como dicionários em seu programa.
Equipamento Potencia (W)
ar-condicionado 1600
computador 350
chuveiro 5000
ferro 1000
lampada 32
lavadora-roupas 600
refrigerador 350
tv 200
Eandeira Custo (KWH)
Verde R$ 0,50
amarela R$ 0,53
vermelha R$ 0,56

Passo 1

O que o enunciado pede e quais dados são fornecidos (peguei estes valores do enunciado):
  • Tabela de potências (equipamento → potência em Watts):
    • ar-condicionado: 1600
    • computador: 350
    • chuveiro: 5000
    • ferro: 1000
    • lampada: 32
    • lavadora-roupas: 600
    • refrigerador: 350
    • tv: 200
  • Tabela de bandeiras (bandeira → custo por kWh):
    • Verde: R$ 0,50
    • Amarela: R$ 0,53
    • Vermelha: R$ 0,56
  • Entradas que o programa deve receber do usuário:
    1. A bandeira em vigor no mês (uma das três: verde/amarela/vermelha).
    2. O valor do ICMS (porcentagem sobre o valor total), por exemplo \,18\%.
    3. A quantidade de equipamentos a ser informada (um inteiro n).
    4. Para cada um dos n equipamentos:
      • o nome do equipamento (deve coincidir com alguma chave da tabela de potências);
      • o tempo médio de uso diário (em horas), um número real não-negativo.
  • Observação/pressuposto necessário (porque o enunciado pede “uso diário” mas não diz o número de dias do mês):
    • Vou adotar que o mês tem D=30 dias. Essa é uma hipótese padrão para estimativas mensais quando o enunciado não especifica.

Passo 2

Quais fórmulas vamos usar — explicação didática, passo a passo.
  1. Consumo mensal de um equipamento i (em kWh):
  • A potência do equipamento P_i está em Watts. Para obter energia em kWh precisamos transformar Watts em kW (dividindo por 1000) e multiplicar pelo número de horas de uso. Como temos horas por dia h_i e D dias no mês, a fórmula é:
\text{consumo}_i \;=\; \frac{P_i \cdot h_i \cdot D}{1000}
Explicação: P_i (W) × h_i (h/dia) × D (dias) dá energia em Wh; dividir por 1000 converte Wh → kWh.
  1. Consumo total do cliente (soma de todos os equipamentos):
\text{consumo\_total} \;=\; \sum_{i=1}^{n} \text{consumo}_i
  1. Cálculo do subtotal (antes de imposto): multiplicar o consumo total pelo custo da bandeira ( c, em R$/kWh):
\text{subtotal} \;=\; \text{consumo\_total} \cdot c
  1. Aplicar ICMS ( \text{ICMS} em porcentagem, por exemplo \text{ICMS}=18 para 18%):
\text{valor\_final} \;=\; \text{subtotal} \cdot \left(1 + \frac{\text{ICMS}}{100}\right)
Observações práticas:
  • Se o usuário digitar o nome do equipamento com maiúsculas/minúsculas diferentes, devemos normalizar (por exemplo, transformar em minúsculas e remover espaços extremos) antes de procurar na tabela.
  • Se o nome não estiver na tabela, o programa deve avisar e pedir novamente (ou listar opções), porque a tabela foi dada e deve ser usada como dicionário.

Passo 3

Um exemplo numérico simples (para fixar a ideia). Peguei os valores da tabela para a lâmpada e para a bandeira verde.
  • Suponha um equipamento “lampada” com P=32 (W) usado h=5 horas/dia. Com D=30 dias:
\text{consumo}_{\text{lampada}} = \frac{32 \cdot 5 \cdot 30}{1000} = \frac{4800}{1000} = 4{,}8\\ \text{kWh}
  • Se a bandeira for Verde com c=0{,}50 R$/kWh, o custo deste consumo (subtotal parcial) é:
\text{subtotal\_lampada} = 4{,}8 \cdot 0{,}50 = 2{,}40\\ \text{R\$}
  • Se o ICMS for \text{ICMS}=18\%, o valor final referente a essa lâmpada seria:
\text{valor\_final\_lampada} = 2{,}40 \cdot \left(1 + \frac{18}{100}\right) = 2{,}40 \cdot 1{,}18 = 2{,}832 \approx 2{,}83\\ \text{R\$}
Lição prática: fazer as contas na prova é só aplicar estas multiplicações e somas; a parte mais “chata” é organizar os dados e somar todos os equipamentos.

Passo 4

Estrutura lógica (algoritmo) para implementar o programa — passo a passo, como se fosse um roteiro que você pode transformar em código:
  1. Definir os dicionários fixos conforme as tabelas do enunciado:
    • equipments = { ‘ar-condicionado’:1600, ‘computador’:350, … }
    • bandeiras = { ‘verde’:0.50, ‘amarela’:0.53, ‘vermelha’:0.56 }
  2. Ler a entrada do usuário:
    • ler e normalizar a string da bandeira; repetir até que seja uma chave válida em bandeiras;
    • ler o valor do ICMS (float ou int);
    • ler a quantidade de equipamentos n (inteiro >= 0).
  3. Inicializar acumulador total_kwh = 0.
  4. Para i de 1 até n:
    • pedir o nome do equipamento; normalizar (por ex. lower() e strip());
    • se o nome não estiver na tabela, avisar o usuário e pedir novamente (ou opcionalmente pular e não contar);
    • ler o tempo médio diário h_i (float, >= 0);
    • calcular consumo_i usando a fórmula: \text{consumo}_i = \frac{P_i \cdot h_i \cdot D}{1000}e somar em total_kwh.
  5. Depois do laço:
    • obter o custo por kWh a partir da bandeira escolhida: c = \text{bandeiras}[\text{bandeira}];
    • calcular subtotal: \text{subtotal} = \text{total\_kwh} \cdot c;
    • calcular valor_final com ICMS: \text{valor\_final} = \text{subtotal} \cdot \left(1 + \dfrac{\text{ICMS}}{100}\right).
  6. Apresentar para o usuário:
    • consumo total em kWh (ex.: 2 ou 3 casas decimais);
    • subtotal (R$ com duas casas decimais);
    • valor final com ICMS (R$ com duas casas decimais).
Dicas de implementação:
  • Use validação de entrada para evitar nomes desconhecidos e valores negativos de horas.
  • Arredonde os valores monetários para 2 casas ao exibir (ex.: formatar com 2 casas decimais).
  • Use constantes no início do programa (por exemplo D = 30) para facilitar mudanças.

Passo 5

Comportamento em casos-limite e estilo de usuário (boas práticas, para não perder pontos na prova):
  • Se n=0 — reportar consumo zero e valor zero.
  • Se alguma potência fosse 0 (não ocorre nas tabelas), o consumo seria zero.
  • Se o usuário informar um equipamento com grafia diferente (ex.: “Ar-CondicionaDO” ou com acento), normalizar para minúsculas e, se quiser, aceitar sinônimos (por exemplo “ar condicionado” sem traço) mapeando esses sinônimos no dicionário.
  • Documente no código que a suposição é D=30 dias (o enunciado não definiu isso).
  • Complexidade: o algoritmo é linear no número de equipamentos O(n) — trivial para qualquer entrada de prova.

Resposta

# Programa para estimativa de conta de energia (usa as tabelas do enunciado como dicionários)

def main():
    # Dicionário de potências (Watts) — tabela 1
    equipamentos = {
        'ar-condicionado': 1600,
        'computador': 350,
        'chuveiro': 5000,
        'ferro': 1000,
        'lampada': 32,
        'lavadora-roupas': 600,
        'refrigerador': 350,
        'tv': 200
    }

    # Dicionário de bandeiras (custo em R$/kWh) — tabela 2
    bandeiras = {
        'verde': 0.50,
        'amarela': 0.53,
        'vermelha': 0.56
    }

    D = 30  # dias do mês (pressuposto)

    # Ler bandeira (validar)
    while True:
        bandeira = input("Bandeira (verde / amarela / vermelha): ").strip().lower()
        if bandeira in bandeiras:
            break
        print("Bandeira inválida. Opções válidas:", ", ".join(bandeiras.keys()))

    # Ler ICMS (porcentagem)
    while True:
        try:
            icms = float(input("ICMS (%) (por exemplo, 18 para 18%): ").strip().replace(',', '.'))
            if icms < 0:
                print("ICMS não pode ser negativo.")
                continue
            break
        except ValueError:
            print("Digite um número válido para o ICMS.")

    # Ler quantidade de equipamentos
    while True:
        try:
            n = int(input("Quantidade de equipamentos a informar: ").strip())
            if n < 0:
                print("Quantidade não pode ser negativa.")
                continue
            break
        except ValueError:
            print("Digite um inteiro válido para a quantidade.")

    total_kwh = 0.0

    # Loop para ler cada equipamento
    for i in range(1, n + 1):
        # Ler nome do equipamento e validar com o dicionário
        while True:
            nome = input(f"Nome do equipamento {i} (use a grafia da tabela): ").strip().lower()
            if nome in equipamentos:
                potencia = equipamentos[nome]  # em Watts
                break
            else:
                print("Equipamento não encontrado na tabela. Opções válidas:", ", ".join(equipamentos.keys()))

        # Ler tempo médio diário em horas
        while True:
            try:
                horas = float(input(f"Tempo médio diário de uso do '{nome}' (horas): ").strip().replace(',', '.'))
                if horas < 0:
                    print("Horas não podem ser negativas.")
                    continue
                break
            except ValueError:
                print("Digite um número válido de horas (p.ex. 3.5).")

        # Calcular consumo mensal em kWh para este equipamento
        consumo_i = potencia * horas * D / 1000.0  # P(W) * h(dia) * D(dias) -> Wh; /1000 -> kWh
        total_kwh += consumo_i

    # Cálculo do custo
    custo_kwh = bandeiras[bandeira]
    subtotal = total_kwh * custo_kwh
    valor_final = subtotal * (1 + icms / 100.0)

    # Apresentar resultados formatados
    print()
    print("Resumo da estimativa:")
    print(f"Consumo total estimado: {total_kwh:.3f} kWh")
    print(f"Subtotal (sem ICMS): R$ {subtotal:.2f}")
    print(f"ICMS: {icms:.2f} %")
    print(f"Valor final estimado (com ICMS): R$ {valor_final:.2f}")

if __name__ == "__main__":
    main()

Exercícios relacionados