Interprete e resolva problemas de matemática simples em forma de texto, retornando a resposta como um número inteiro.
Problemas sem operações simplesmente resultam no número dado.
What is 5?
Resulta em 5.
Some dois números.
What is 5 plus 13?
Resulta em 18.
Lide com números grandes e números negativos.
Agora, faça as outras três operações.
What is 7 minus 5?
2
What is 6 multiplied by 4?
24
What is 25 divided by 5?
5
Lide com um conjunto de operações, em sequência.
Como são problemas escritos por extenso, avalie a expressão da esquerda para a direita, ignorando a ordem típica das operações.
What is 5 plus 13 plus 6?
24
What is 3 plus 2 multiplied by 3?
15 (ou seja, não 9)
O analisador deve rejeitar:
Às vezes é necessário levantar uma exceção. Quando você fizer isso, sempre inclua uma mensagem de erro significativa que indique qual é a origem do erro. Isso deixa o seu código mais legível e ajuda muito na hora de depurar. Nas situações em que você sabe que a origem do erro é de um tipo específico, você pode optar por levantar um dos tipos de erro internos, mas ainda assim deve incluir uma mensagem significativa.
Este exercício em particular exige que você use a instrução raise para "lançar" um ValueError se a pergunta passada para answer() estiver malformada ou for inválida, ou se contiver uma operação desconhecida. Os testes só vão passar se você fizer o raise da exception e incluir uma mensagem junto com ela.
Atenção: a mensagem necessária é diferente para cada cenário, mesmo que o mesmo tipo de erro esteja sendo lançado.
Confira os testes com atenção.
Para lançar um ValueError com uma mensagem, escreva a mensagem como argumento do tipo exception:
# if the question contains an unknown operation.
raise ValueError("unknown operation")
# if the question is malformed or invalid.
raise ValueError("syntax error")
Para tratar um erro lançado dentro de um bloco de código específico, você pode usar um try-except.
Os blocos try-except "envolvem" o código que poderia causar um erro, mapeando todas as exceções para um erro, vários erros, ou outros trechos de código que lidem com o problema:
while len(equation) > 1:
try:
# The questionable/error-prone code goes here,in an indented block
# It can contain statements, loops, if-else blocks, or other executable code.
x_value, operation, y_value, *rest = equation
...
...
except:
# Code for what to do when an error gets thrown in the code above.
# This could be one error, or more complicated logging, error checking and messaging.
raise ValueError("syntax error")
Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.