Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Desafio: hora da prática | Python para Dados: trabalhando com funções, estruturas de dados e exceções PT 2

5. Correção de provas

def corrigir_provas(gabarito, testes):
    notas = []

    for teste in testes:
        nota = 0

        for resposta, gabarito_questao in zip(teste, gabarito):

            if resposta not in ['A', 'B', 'C', 'D']:
                raise ValueError(
                    f'A alternativa {resposta} não é uma opção de alternativa válida'
                )

            if resposta == gabarito_questao:
                nota += 1

        notas.append(nota)

    return notas


gabarito = ['D', 'A', 'B', 'C', 'A']

testes_sem_ex = [
    ['D', 'A', 'B', 'C', 'A'],
    ['C', 'A', 'A', 'C', 'A'],
    ['D', 'B', 'A', 'C', 'A']
]

testes_com_ex = [
    ['D', 'A', 'B', 'C', 'A'],
    ['C', 'A', 'A', 'E', 'A'],
    ['D', 'B', 'A', 'C', 'A']
]

try:
    print(corrigir_provas(gabarito, testes_sem_ex))
except ValueError as erro:
    print(erro)

try:
    print(corrigir_provas(gabarito, testes_com_ex))
except ValueError as erro:
    print(erro)

Saída esperada:

[5, 3, 2]

e

A alternativa E não é uma opção de alternativa válida

6. Verificação de pontuação em palavras

def verificar_texto(lista_palavras):

    for palavra in lista_palavras:

        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 tratado corretamente."


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'
]

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:
    print(verificar_texto(lista_tratada))
except ValueError as erro:
    print(erro)

try:
    print(verificar_texto(lista_nao_tratada))
except ValueError as erro:
    print(erro)

7. Divisão entre colunas de pressão e temperatura

def divide_colunas(pressoes, temperaturas):

    try:

        if len(pressoes) != len(temperaturas):
            raise ValueError(
                "As listas possuem tamanhos diferentes."
            )

        resultado = []

        for pressao, temperatura in zip(pressoes, temperaturas):
            resultado.append(pressao / temperatura)

        return resultado

    except ZeroDivisionError as erro:
        print(f"Erro: {type(erro).__name__} - Divisão por zero.")

    except ValueError as erro:
        print(f"Erro: {type(erro).__name__} - {erro}")


# Sem exceção
pressoes = [100, 120, 140, 160, 180]
temperaturas = [20, 25, 30, 35, 40]

print(divide_colunas(pressoes, temperaturas))

# ZeroDivisionError
pressoes = [60, 120, 140, 160, 180]
temperaturas = [0, 25, 30, 35, 40]

print(divide_colunas(pressoes, temperaturas))

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

print(divide_colunas(pressoes, temperaturas))

Saída esperada (caso sem erro):

[5.0, 4.8, 4.666666666666667, 4.571428571428571, 4.5]
1 resposta
solução!

Oi! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Você aplicou bem o uso de exceções nos três desafios. A forma como utilizou ValueError para validar entradas inválidas nas provas e no tratamento de texto, além da verificação do tamanho das listas antes da divisão entre colunas estão corretas. Isso demonstra atenção à qualidade dos dados e à prevenção de erros durante a execução do programa.

Uma dica interessante para o futuro é utilizar o método isalpha() para verificar se uma palavra possui apenas letras. Veja este exemplo:


palavra = "Python"

if palavra.isalpha():
    print("Somente letras")

Nesse exemplo, o método verifica se a string contém apenas caracteres alfabéticos, o que pode ser útil em validações de textos.

Entre os três desafios, qual deles você considera mais próximo de uma situação real do mercado?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!