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

[Dúvida] Por que essas soluções não funcionam? (Questão 6)

Olá para todos. Eu estava tentando resolver o desafio 6 (copiado abaixo) e não consegui. Quando fui observar o gabarito, percebi que o mesmo também não funciona 100%. Algueḿ poderia me ajudar, dizendo o porquê da programação acusar que está "tudo ok" quando na verdade não está?

Segue o enunciado da questão:

Questão 6) Você está trabalhando com processamento de linguagem natural (NLP) e, dessa vez, sua líder requisitou que você criasse um trecho de código que recebe uma lista com as palavras separadas de uma frase gerada pelo ChatGPT.

Você precisa criar uma função que avalia cada palavra desse texto e verificar se o tratamento para retirar os símbolos de pontuação (',' '.', '!' e '?') foi realizado. Caso contrário, será lançada uma exceção do tipo ValueError apontando o 1º caso em que foi detectado o uso de uma pontuação por meio da frase "O texto apresenta pontuações na palavra "[palavra]".". Essa demanda é voltada para a análise do padrão de frases geradas pela inteligência artificial.

Dica: Para verificar se uma ou mais das pontuações estão presentes em cada palavra, utilize a palavra chave or na condição if. Por exemplo, ('a' or 'b') in 'alura' ... Saída: True

Os dados para o teste do código são: (...)

  • Lista não tratada:
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!']

Eu criei uma lista apenas para testar a função. Segue a solução parcial que eu tentei:

palavras = ["testando", "vírgula,", "ponto.", "exclamação!", "interrogação?"]

def conferir_tratamento(palavras):
  for palavra in palavras:
    if ("?" or "!" or "," or ".") in palavra:
      raise ValueError(f"O texto apresenta pontuações na palavra {palavra}.")

conferir_tratamento(palavras)

E a saída acusou "tudo ok" para todos as palavras. O que, pra mim, não fez sentido.

Segue o gabarito da questão: Função para avaliar o texto:

# criando a função que recebe a lista de palavras
def avalia_texto(texto: list):
    for palavra in texto: # for para iterar por cada palavra
        if (',' or '.' or '!' or'?') in palavra: # testando se a palavra possui alguma pontuação
            raise ValueError(f'O texto apresenta pontuações na palavra "{palavra}".')
    return "Texto já tratado!" # retornando a verificação se não lançada a exceção 

Testando com exceção:

# 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:
  avaliacao = avalia_texto(lista_nao_tratada)
except Exception as e:
  print(e)
else:
  print(avaliacao)

Porém, ao testar o gabarito também não acusa algumas pontuações.

palavras = ["exclamação!", "interrogação?"]

try:
  avaliacao = avalia_texto(palavras)
except Exception as e:
  print(e)
else:
  print(avaliacao)

A saída foi "Texto já tratado!" Alguém poderia me dar uma ajudinha com isso? Pra mim nada fez sentido. rs Obrigado e um ótimo dia para todos!

2 respostas
solução!

Olá, Bruno! Como vai?

Realmente há um erro no código devido ao uso inadequado do operador or. Este operador, quando utilizado da forma colocada, não verifica cada pontuação individualmente, o que resulta em um comportamento inesperado. Para corrigir essa questão e assegurar o funcionamento adequado, sugiro a seguinte modificação:

def avalia_texto(texto: list):
    for palavra in texto:
        if ',' in palavra or '.' in palavra or '!' in palavra or '?' in palavra:
            raise ValueError(f'O texto apresenta pontuações na palavra "{palavra}".')

Essa alteração corrige a lógica, permitindo que a condição verifique cada pontuação de maneira individual.

Obrigada pelo feedback e ele será encaminhado para a equipe responsável.

Se surgirem mais dúvidas ou se precisar de esclarecimentos adicionais, estou à disposição!

Espero ter ajudado.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Muitíssimo obrigado!! Compreendi agora. Uma ótima sexta e um ótimo final de semana para todos!