Wordy

Wordy

Fácil

Instruções

Interprete e resolva problemas de matemática simples em forma de texto, retornando a resposta como um número inteiro.

Iteração 0: Números

Problemas sem operações simplesmente resultam no número dado.

What is 5?

Resulta em 5.

Iteração 1: Adição

Some dois números.

What is 5 plus 13?

Resulta em 18.

Lide com números grandes e números negativos.

Iteração 2: Subtração, Multiplicação e Divisão

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

Iteração 3: Múltiplas operações

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)

Iteração 4: Erros

O analisador deve rejeitar:

  • Operações não suportadas ("What is 52 cubed?")
  • Perguntas que não são de matemática ("Who is the President of the United States")
  • Problemas em texto com sintaxe inválida ("What is 1 plus plus 2?")

Mensagens de exceção

À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")
Editar via GitHub O link abre em uma nova janela ou aba
Python Exercism

Tudo pronto para começar Wordy?

Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.