つくる:レシート表示

このレッスンで作るもの — 第 1 章の総仕上げとして、4 行のレシートを返す make_receipt を作ります。おこづかい帳アプリの誕生です。

つくる — レシート表示

ここまでで printreturn、文字列の連結、四則演算、実行順序、コメント、エラーの読み方を扱いました。この章の最後に、それらを 1 本にまとめます。

作るのは kakeibo.py の中心になる関数 make_receipt です。呼ぶと下記の 4 行を返します。

=== おこづかい帳 === りんご 120みかん 80合計 200

見出し、品物 2 行、そして合計。おこづかい帳の一番小さな完成形です。

大きなものは、小さくて動くものから育てます。まず「必ず同じ結果を返す」形で完成させておくと、あとから中身を差し替えるのが楽になります。

引数を取らない理由

make_receipt には引数を付けません。品名も金額もコードの中に書いた決め打ちです。「それでは使えないのでは」と思うところですが、これは意図した第一歩です。

第 1 章ではまだ 変数 を習っていません。値に名前を付けて持ち回る道具がないので、外から渡された値を組み立てに使うのは無理があります。そこでまず「形」だけを完成させます。

第 2 章では、この関数が make_receipt(name, price) に進化します。決め打ちだった りんご120 の場所に、外から渡された値が入るようになります。今日はその受け皿を先に作っているわけです。

diagram (will load when visible)

組み立て方

4 行を \n でつないで、1 本の文字列として返します。前回と同じ要領ですが、行が 1 つ増えます。

def make_receipt(): return "=== おこづかい帳 ===" + "\n" + "りんご 120円" + "\n" + "みかん 80円" + "\n" + "合計 200円"

1 行が長くなってきました。読みやすさのために、かっこで囲んで途中で改行する書き方もできます。

def make_receipt(): return ( "=== おこづかい帳 ===" + "\n" + "りんご 120円" + "\n" + "みかん 80円" + "\n" + "合計 200円" )

かっこの中では、コードを何行に分けても 1 つの式として扱われます。結果はまったく同じです。どちらで書いても構いません。

1 行が長すぎると、どこを間違えたのか目で追えなくなります。かっこで区切って 1 行 1 要素にすると、間違いが見つけやすくなります。

合計の 200 はどこから来たか

120 + 80200 です。ただ、この計算結果を文字列につなぐには、数値を文字列に変える str が必要になります。それは第 2 章の内容なので、今回は "合計 200円" と文字列で書いてしまいます。

代わりに、その 200 がどう出た数字なのかを # のコメントで残しておきます。前回学んだコメントの正しい使い方そのものです。

def make_receipt(): # 合計 200 は りんご 120 と みかん 80 の和 return "=== おこづかい帳 ===" + "\n" + "りんご 120円" + "\n" + "みかん 80円" + "\n" + "合計 200円"

手元で動かしてみる

kakeibo.py という名前でファイルを作り、下記のように書いて保存します。関数の定義と、それを呼び出して表示する行の 2 つが入っています。

def make_receipt(): # 合計 200 は りんご 120 と みかん 80 の和 return "=== おこづかい帳 ===" + "\n" + "りんご 120円" + "\n" + "みかん 80円" + "\n" + "合計 200円" print(make_receipt())

def の行が先、呼び出しがあと、という実行順序の規則をここでも守っています。print(make_receipt()) は「関数を呼んで戻ってきた文字列を、そのまま画面に出す」という意味です。

\nprint に渡されたときに本物の改行として解釈されるので、画面には 4 行として出ます。文字列の中では 2 文字ですが、表示されるときには改行 1 つになる、という二段構えです。

ここで作った make_receipt は、この先ずっと育て続ける関数です。第 9 章の完成形まで、名前は変わりません。今日の 4 行が出発点になります。

よくある間違い

  1. 末尾に \n を付けてしまう"合計 200円" のうしろに改行を足すと、見た目には分からない差でテストが落ちます。改行は行と行の間だけです。
  2. 半角と全角が混ざる120円1 2 0 は半角、 は全角です。数字を全角で打つと別の文字になり、一致しません。
  3. 見出しの記号を間違える — 見出しはイコール = が半角 3 つ、内側は半角スペース 1 つずつです。====== では通りません。

print で表示して満足してしまうのもよくある落とし穴です。採点は戻り値だけを見るので、必ず return で返してください。

やってみよう

関数 make_receipt を実装してください。引数は取りません。下記の 4 行を \n でつないだ 1 本の文字列を return します。

1 行目は === おこづかい帳 ===、2 行目は りんご 120円、3 行目は みかん 80円、4 行目は 合計 200円 です。末尾に改行は付けません。合計がどう出た数字なのかを # のコメントで残しておくと、第 2 章で書き換えるときに自分が助かります。

要件

  1. 関数名は make_receipt で、引数は取らない
  2. 1行目は "= おこづかい帳 ="、2行目は "りんご 120円"、3行目は "みかん 80円"、4行目は "合計 200円"
  3. 行の区切りは \n を使い、末尾には改行を付けない
  4. print ではなく return で1本の文字列を返す

入出力例

make_receipt() → "=== おこづかい帳 === りんご 120みかん 80合計 200円" make_receipt() → "=== おこづかい帳 === りんご 120みかん 80合計 200円" make_receipt() → "=== おこづかい帳 === りんご 120みかん 80合計 200円" make_receipt() → "=== おこづかい帳 === りんご 120みかん 80合計 200円" make_receipt() → "=== おこづかい帳 === りんご 120みかん 80合計 200円"

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.py
main.py
学習モード

メモ

つくる:レシート表示

⌘S で保存