1
resposta

[Solução] Calculando o total de vendas

import re

def validar_lista_de_numeros(texto: str) -> bool:
    """
    Verifica se uma string é composta exclusivamente por números válidos
    (inteiros ou de ponto flutuante com '.' ou ',') separados por espaços.

    A validação é feita token a token, garantindo que cada parte
    corresponda exatamente ao padrão de um número.

    Args:
        texto (str): A string a ser validada, contendo tokens separados por espaço.

    Returns:
        bool: True se todos os tokens forem números válidos, False caso contrário.
    """
    
    REGEX_POR_NUMERO = re.compile(r'^[-+]?(\d+([.,]\d+)?|[.,]\d+)$')

    texto_limpo: str = texto.strip()

    if not texto_limpo:
        return False
    
    tokens = re.split(r'\s+', texto_limpo)

    for token in tokens:
        if not REGEX_POR_NUMERO.fullmatch(token):
            return False
    
    return True

def converter_string_para_lista_de_floats(string_numeros: str) -> list[float]:
    """
    Converte uma string de números separados por espaço (com '.' ou ',' como decimal)
    em uma lista de números de ponto flutuante (float).

    Args:
        string_numeros (str): A string contendo os números a serem convertidos.

    Returns:
        list[float]: Uma lista contendo os valores de ponto flutuante.

    Raises:
        ValueError: Se a string falhar na validação (contiver tokens não numéricos
                    ou separadores inválidos).
    """

    if not validar_lista_de_numeros(string_numeros):
        raise ValueError("A string contém formatos não numéricos inválidos ou separadores múltiplos não permitidos.")

    string_limpa: str = string_numeros.strip().replace(',', '.')
    tokens = re.split(r'\s+', string_limpa)
    
    return [float(token) for token in tokens]

def main() -> None:
    entrada: str = ''
    lista_de_numeros: list[float] = []

    while True:
        try:
            entrada = input('\nDigite os valores das vendas: ').strip()
            lista_de_numeros = converter_string_para_lista_de_floats(entrada)
            break
        except ValueError as e:
            print(f'{e}')
         
    print(f'\nO total de vendas foi: R$ {sum(lista_de_numeros):.2f}')


if __name__ == '__main__':
    main()

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá Mozert.
Seu projeto está ficando top.
Continue seu desenvolvimento.
Bons estudos.