Wordy

Wordy

Легка

Вказівки

Розберіть і обчисліть прості математичні текстові задачі та поверніть відповідь як ціле число.

Ітерація 0 - Числа

Задачі без операцій просто дають задане число.

What is 5?

Результат - 5.

Ітерація 1 - Додавання

Додайте два числа.

What is 5 plus 13?

Результат - 18.

Обробіть великі і відʼємні числа.

Ітерація 2 - Віднімання, множення і ділення

Тепер виконайте три інші операції.

What is 7 minus 5?

2

What is 6 multiplied by 4?

24

What is 25 divided by 5?

5

Ітерація 3 - Кілька операцій

Обробіть набір операцій послідовно.

Оскільки це словесні текстові задачі, обчислюйте вираз зліва направо, ігноруючи звичний порядок виконання операцій.

What is 5 plus 13 plus 6?

24

What is 3 plus 2 multiplied by 3?

15 (тобто не 9)

Ітерація 4 - Помилки

Парсер має відхиляти:

  • Непідтримувані операції («What is 52 cubed?»)
  • Запитання, не повʼязані з математикою («Who is the President of the United States»)
  • Текстові задачі з неправильним синтаксисом («What is 1 plus plus 2?»)

Повідомлення про помилки

Іноді потрібно викликати виняток. Коли ми це робимо, слід завжди додавати змістовне повідомлення про помилку, яке вказує на її джерело. Це робить код зрозумілішим і значно допомагає в налагодженні. Якщо ми знаємо, що джерело помилки матиме певний тип, можна викликати один із вбудованих типів помилок, але повідомлення все одно має бути змістовним.

Ця вправа вимагає використати інструкцію raise, щоб «кинути» ValueError, якщо питання, передане до answer(), має неправильний формат або є недійсним, чи містить невідому операцію. Тести пройдуть лише тоді, коли ми і виконаємо raise для exception, і додамо до нього повідомлення. Зверніть увагу: потрібне повідомлення відрізняється для кожного сценарію, навіть попри те, що викликається той самий тип помилки. Перевірте тести уважно.

Щоб викликати ValueError із повідомленням, запишемо повідомлення як аргумент типу exception:

# if the question contains an unknown operation.
raise ValueError("unknown operation")

# if the question is malformed or invalid.
raise ValueError("syntax error")

Щоб обробити викликаний виняток у межах певного блоку коду, можна скористатися конструкцією try-except. Блоки try-except «обгортають» код, який потенційно може спричинити помилку, зіставляючи всі винятки з однією помилкою, кількома помилками або іншими фрагментами коду, які мають зарадити проблемі:

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")
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Python Exercism

Час розпочати Wordy?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.