106 lines
5.2 KiB
Markdown
106 lines
5.2 KiB
Markdown
![]() |
---
|
||
|
id: 5e44412c903586ffb414c94c
|
||
|
title: 計算の縦書き整形プログラム
|
||
|
challengeType: 10
|
||
|
forumTopicId: 462359
|
||
|
dashedName: arithmetic-formatter
|
||
|
---
|
||
|
|
||
|
# --description--
|
||
|
|
||
|
このプロジェクトは [Replit スターターコード](https://replit.com/github/freeCodeCamp/boilerplate-arithmetic-formatter)を使用して作業を行います。
|
||
|
|
||
|
Python カリキュラムの対話式教育コンテンツを引き続き開発中です。 現在、下記の freeCodeCamp.org YouTube チャンネルで、このプロジェクトの完了に必要なすべての知識について説明する動画をいくつか公開しています。
|
||
|
|
||
|
- [「みんなで Python」ビデオコース](https://www.freecodecamp.org/news/python-for-everybody/) (14 時間)
|
||
|
- [「Python を学ぶ」ビデオコース](https://www.freecodecamp.org/news/learn-python-video-course/) (10 時間)
|
||
|
|
||
|
# --instructions--
|
||
|
|
||
|
小学校の算数では計算問題を解きやすくるために縦書きにすることが多くあります。 たとえば「235 + 52」を次のように記述します。
|
||
|
|
||
|
```py
|
||
|
235
|
||
|
+ 52
|
||
|
-----
|
||
|
```
|
||
|
|
||
|
計算問題を表す文字列のリストを受け取り、問題を縦書きに整形して返す関数を作成してください。 この関数はオプションで第 2 引数を受け取る必要があります。 第 2 引数が `True` に設定されている場合は、解答を表示する必要があります。
|
||
|
|
||
|
## 例
|
||
|
|
||
|
関数呼び出し:
|
||
|
|
||
|
```py
|
||
|
arithmetic_arranger(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
|
||
|
```
|
||
|
|
||
|
出力:
|
||
|
|
||
|
```py
|
||
|
32 3801 45 123
|
||
|
+ 698 - 2 + 43 + 49
|
||
|
----- ------ ---- -----
|
||
|
```
|
||
|
|
||
|
関数呼び出し:
|
||
|
|
||
|
```py
|
||
|
arithmetic_arranger(["32 + 8", "1 - 3801", "9999 + 9999", "523 - 49"], True)
|
||
|
```
|
||
|
|
||
|
出力:
|
||
|
|
||
|
```py
|
||
|
32 1 9999 523
|
||
|
+ 8 - 3801 + 9999 - 49
|
||
|
---- ------ ------ -----
|
||
|
40 -3800 19998 474
|
||
|
```
|
||
|
|
||
|
## ルール
|
||
|
|
||
|
入力された問題が正しく整形されている場合、この関数は正しい変換結果を返します。それ以外の場合は、**ユーザーにとって意味のあるエラーを記述した****文字列**を返します。
|
||
|
|
||
|
|
||
|
- エラーを返す場合:
|
||
|
- 関数に入力した**問題の数が多すぎる**場合。 上限を **5** つとし、それを超える場合は `Error: Too many problems.` (エラー: 問題が多すぎます) を返します。
|
||
|
- 関数が受け取ることのできる適切な演算子は**足し算**と**引き算**です。 掛け算と割り算はエラーを返します。 この箇条書きで指示していない他の演算子についてはテストする必要はありません。 次のようなエラーを返します: `Error: Operator must be '+' or '-'.` (エラー: '+' または '-' の演算子を使用してください)。
|
||
|
- 数値 (オペランド) にはそれぞれ数字のみを含める必要があります。 数値以外の場合、関数は次のエラーを返します: `Error: Numbers must only contain digits.` (エラー: 数値には数字のみを含める必要があります)。
|
||
|
- それぞれのオペランド (演算子の両側の数値) の幅は最大 4 桁です。 それ以外の場合は、次のようなエラー文字列を返します: `Error: Numbers cannot be more than four digits.` (エラー: 数値は 4 桁以内にする必要があります)。
|
||
|
- ユーザーが問題を正しい形式で入力した場合は、次のルールに従って変換結果を返します。
|
||
|
- 演算子と、2 つのオペランドのうち最も長いオペランドとの間に、スペースを 1 つ含めます。演算子は 2 つ目のオペランドと同じ行に表示し、両方のオペランドは入力されたとおりの順序で表示します (1 つ目のオペランドを上側に、2 つ目のオペランドを下側に表示します)。
|
||
|
- 数値は右揃えにする必要があります。
|
||
|
- それぞれの問題の間に 4 つのスペースが必要です。
|
||
|
- それぞれの問題の一番下にダッシュが必要です。 ダッシュは、各問題の全体の長さに沿った長さにする必要があります (上の表示例を参考にしてください)
|
||
|
|
||
|
## 開発
|
||
|
|
||
|
`arithmetic_arranger.py` でコードを記述してください。 開発には `main.py` を使用して `arithmetic_arranger()` 関数をテストすることができます。 「実行」ボタンをクリックすると `main.py` が実行されます。
|
||
|
|
||
|
## テスト
|
||
|
|
||
|
このプロジェクトの単体テストは `test_module.py` にあります。 `test_module.py` のテストを `main.py` で実行できるようになっています。 「実行」ボタンを押すと自動的にテストが実行されます。 または、コンソールに `pytest` と入力してテストを実行することもできます。
|
||
|
|
||
|
## 提出
|
||
|
|
||
|
プロジェクトの URL をコピーし、下記に提出してください。
|
||
|
|
||
|
# --hints--
|
||
|
|
||
|
計算問題を正しく整形し、すべてのテストに合格する必要があります。
|
||
|
|
||
|
```js
|
||
|
|
||
|
```
|
||
|
|
||
|
# --solutions--
|
||
|
|
||
|
```js
|
||
|
/**
|
||
|
Backend challenges don't need solutions,
|
||
|
because they would need to be tested against a full working project.
|
||
|
Please check our contributing guidelines to learn more.
|
||
|
*/
|
||
|
```
|