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

Desafio: hora da prática (Aquecimento - Cont)

# Questão 6: criando a função que recebe a lista de palavras

def verifica_pontuacao(lista_palavras):

    # verificação de cada palavra
    for palavra in lista_palavras:

        # verificação de pontuações
        if ',' in palavra or '.' in palavra or '!' in palavra or '?' in palavra:

            raise ValueError(
                f'O texto apresenta pontuações na palavra "{palavra}".'
            )

    return "Texto sem pontuações."
# Questão 6: Testando no exemplo que não lança exceção

lista_tratada = [
    'Python', 'é', 'uma', 'linguagem', 'de', 'programação',
    'poderosa', 'versátil', 'e', 'fácil', 'de', 'aprender',
    'utilizada', 'em', 'diversos', 'campos', 'desde',
    'análise', 'de', 'dados', 'até', 'inteligência',
    'artificial'
]

try:

    resultado = verifica_pontuacao(lista_tratada)

    print(resultado)

except ValueError as erro:

    print(erro)
# Questão 6: Testando no exemplo que lança exceção

lista_nao_tratada = [
    'Python', 'é', 'uma', 'linguagem', 'de', 'programação',
    'poderosa,', 'versátil', 'e', 'fácil,', 'de', 'aprender',
    'utilizada', 'em', 'diversos', 'campos,', 'desde',
    'análise', 'de', 'dados', 'até', 'inteligência',
    'artificial!'
]

try:

    resultado = verifica_pontuacao(lista_nao_tratada)

    print(resultado)

except ValueError as erro:

    print(erro)
# Questão 7: Função para dividir os valores das colunas

def divide_colunas(pressoes, temperaturas):

    try:

        # verificação do tamanho das listas
        if len(pressoes) != len(temperaturas):

            raise ValueError(
                "As listas possuem tamanhos diferentes."
            )

        # cálculo das divisões
        resultado = [
            pressao / temperatura
            for pressao, temperatura in zip(pressoes, temperaturas)
        ]

        return resultado

    except ZeroDivisionError:

        print("Erro: divisão por zero.")

    except ValueError as erro:

        print(erro)
# Questão 7: Testando no exemplo que não lança exceção

pressoes = [100, 120, 140, 160, 180]
temperaturas = [20, 25, 30, 35, 40]

resultado = divide_colunas(pressoes, temperaturas)

print(resultado)
# Questão 7: Testando no exemplo que lança exceção (ValueError)

pressoes = [100, 120, 140, 160]
temperaturas = [20, 25, 30, 35, 40]

resultado = divide_colunas(pressoes, temperaturas)

print(resultado)
2 respostas
solução!

Olá, Estudante! Como vai?

Você está em uma excelente sequência! As Questões 6 e 7 tocam em pontos cruciais da Engenharia de Dados: o tratamento de strings e o alinhamento de coleções numéricas.

Aqui estão alguns destaques técnicos sobre como você resolveu esses desafios:

1. Limpeza de Strings e Validação (Questão 6)

Na Questão 6, você criou um "filtro de pureza" para as palavras.

  • O uso do operador in dentro do laço for é a forma mais legível de verificar a presença de caracteres indesejados.
  • Ao lançar o ValueError, você impede que um processo de Processamento de Linguagem Natural (NLP) receba dados "sujos", o que poderia causar erros em análises de frequência de palavras ou modelos de Machine Learning.

2. Sincronização com zip() (Questão 7)

Na Questão 7, você utilizou a função zip(). Essa é uma das funções mais elegantes do Python para Data Science.

  • O zip(pressoes, temperaturas) cria pares ordenados, garantindo que a pressão do índice 0 seja dividida pela temperatura do índice 0.
  • O detalhe de mestre: Como o zip para de iterar assim que a menor lista termina, sua verificação manual de len(pressoes) != len(temperaturas) com o raise ValueError é fundamental. Sem ela, o código rodaria "silenciosamente" ignorando os dados extras da lista maior, o que seria um erro grave de análise.

3. Hierarquia de Exceções

Seu bloco try-except na Questão 7 está muito bem hierarquizado:

  1. Primeiro, você trata o erro de lógica de negócio (tamanhos diferentes).
  2. Depois, trata o erro aritmético (ZeroDivisionError).
    Isso garante que cada falha receba a mensagem adequada, facilitando o debug (correção de erros).

Uma curiosidade de performance:

Na Questão 6, se a sua lista de caracteres proibidos crescer muito (ex: vírgula, ponto, exclamação, hashtag, parênteses), você pode otimizar a verificação usando Conjuntos (Sets) ou Expressões Regulares (Regex).

Por exemplo, com Regex:

import re
if re.search(r'[.,!?]', palavra):
    raise ValueError(...)

Você está construindo uma base de lógica de programação muito sólida, Estudante. Saber prever onde o código pode quebrar é o que define um desenvolvedor sênior.

Espero que possa ter lhe ajudado!

Agora que você dominou a divisão de colunas com tratamento de erros, como você faria se precisasse salvar apenas os resultados válidos em uma nova lista, ignorando os casos de divisão por zero em vez de interromper o programa?

Obrigado pela dica