Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Praticando Python | 025 | Código | Faça como eu fiz: calculando o total de vendas

boa tarde, compartilhando conforme orientação do curso

tentei uma abordagem diferente nesse código para tentar superar minha dificuldade, pois não me vejo programando em python, acho que é mundo longe ainda.

comecei com um fluxo sequencial: começa com entrada, depois processa, depois saída.

estou muito inseguro, então tento aproveitar dos exercícios para criar cenários e estressar o máximo que conseguir para ver se consigo "pegar a linguagem", é muito detalhe mas estou me esforçando ao máximo.

nesse exercício tentei criar um relatório contábil (simples) mas pode ser util.

# Praticando Python | 025 | Código | Faça como eu fiz: calculando o total de vendas

# Carlos trabalha em um comércio e precisa saber o valor total de vendas realizadas no dia. 
# As vendas são informadas em uma única linha separadas por espaços.
# Sua tarefa é criar um programa que receba essa linha, converta os valores para números e exiba o total.

# Racional
# Entrada       - Receber uma linha com valores separados por espaço (ex.: "10.50 20.00 5.75").
# Processamento - Converter para números.
# Saida         - Somar e exibir o total.

# ===================================================================================== #
# Entrada | Interação com o usuário                                                     #
# ===================================================================================== #

'''Função | Receber os valores'''
def ler_vendas():
    linha = input("Digite os valores das vendas separados por espaço: ").strip()
    if not linha:
        print("Atenção! Você não informou nenhum valor, por favor, digite novamente.")
        return []
    return linha.split() # Quebra a string em lista: ["10.50", "20.00", "5.75"]

# ===================================================================================== #
# Processamento                                                                         #
# ===================================================================================== #

'''Função | Trocar a virgula por ponto'''
# A ideia aqui é tratar o valor caso a pessoa digite 10,50 ao inves de 10.50
def ajustar_decimal(valor_str: str) -> str:
    # Remove espaços e troca vírgula por ponto (ex.: "10,50" -> "10.50")
    return valor_str.strip().replace(",", ".")

'''Função | Converte para float'''
def converter_para_float(lista):
    convertidos = []
    erros = []
    for i, v in enumerate(lista, start=1):
        v_norm = ajustar_decimal(v)
        try:
            convertidos.append(float(v_norm))
        except ValueError:
            erros.append((i, v))  # guarda posição e valor original inválido
    return convertidos, erros

'''Função | Soma todos os valores'''
def calcular_total(lista):
    return sum(lista) if lista else 0.0

# ===================================================================================== #
# Saída                                                                                 #
# ===================================================================================== #

'''Função | Formata número no padrão pt-BR: milhar com ponto e decimal com vírgula.'''
def br_moeda(x: float) -> str:
    return f"{x:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")

'''Função | Total com formatação. '''
def exibir_total(total: float):
    print(f"Total de vendas: R$ {br_moeda(total)}")

'''Função | Relatório Contábil.'''
def exibir_relatorio(valores):
    if not valores:
        print("Não há valores válidos para relatório.")
        return

    qtd = len(valores)
    total = sum(valores)
    media = total / qtd
    menor = min(valores)
    maior = max(valores)

    print(f"Itens válidos: {qtd}")
    print(
        f"Total: R$ {br_moeda(total)} | "
        f"Média: R$ {br_moeda(media)} | "
        f"Menor: R$ {br_moeda(menor)} | "
        f"Maior: R$ {br_moeda(maior)}"
    )
# Racional do Relatório
# De forma simples, quero exibir um relatório contábil com:
# 1 - quantidade de itens válidos
# 2 - total
# 3 - média
# 4 - menor valor
# 5 - maior valor
# ===================================================================================== #
# Formulário Principal                                                                  #
# ===================================================================================== #
if __name__ == "__main__":
    vendas = ler_vendas()
    vendas_convertidas, erros = converter_para_float(vendas)

    if erros:
        print("Atenção: alguns itens não foram convertidos:")
        for pos, val in erros:
            print(f"  - Posição {pos}: '{val}' (inválido)")

    total = calcular_total(vendas_convertidas)
    exibir_total(total)
    exibir_relatorio(vendas_convertidas)
2 respostas
solução!

Olá, Estudante! Como você está?

Primeiramente, parabéns pelo esforço! É super normal sentir essa insegurança no começo, mas a forma como você "estressou" o exercício criando um relatório contábil completo mostra que você está no caminho certo para dominar o Python. Você seguiu uma lógica excelente de Entrada, Processamento e Saída, que é a base de grandes sistemas.

Sua solução ficou muito robusta! Tratar a vírgula com a função ajustar_decimal e separar os erros na conversão são práticas de pessoas desenvolvedoras experientes que se preocupam com a experiência do usuário.

Continue mergulhando fundo nos desafios. Essa insegurança vai diminuindo a cada código que você faz rodar!

Bons estudos!

Sucesso

Imagem da comunidade

Muito obrigado.