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]