実行順序
書いたのに、その行だけ動かない
エラーは出ていないのに、書いたはずの行が実行されない。プログラムを始めて数日でだれもが一度は出会う状況です。原因はたいてい、Python が 上から下へ 1 行ずつ 実行するという規則にあります。
Python
def title():
return "見出し"
print("ここは絶対に表示されない")return に到達した時点で関数は終わります。下に何行あっても実行されず、エラーにもならず、ただ黙って無視されます。return は関数の出口で、出口を通ったあとの部屋は使われません。
定義してから呼ぶ
順番の規則は関数の呼び出しにも効きます。def の行より前でその関数を呼ぶと、まだ存在しないものを呼んだことになり NameError が出ます。
Python
def title():
return "見出し"
print(title())この並びは正しく動きます。def の行が実行されて title という名前が用意され、そのあとで呼び出しが走るからです。def の行が実行されるのは「関数を作る」ところまでで、中身の return が動くのは呼び出したその瞬間です。
改行も 1 つの文字
複数の行を 1 本の文字列にまとめるときは、改行文字 \n を使います。バックスラッシュと n の 2 文字で書きますが、表示されるときには改行 1 つになります。
Python
print("1件目" + "\n" + "2件目")画面には 2 行で出ます。連結は左から順に進むので、書いた順がそのまま表示の順です。順番を入れ替えてもエラーは出ず、並びの違う別の結果が静かにできあがるだけです。
\n は半角のバックスラッシュと半角の n です。日本語キーボードでは ¥ キーで入力できますが、全角で打つと改行になりません。
やってみよう
関数 receipt_lines を実装してください。引数は品名 name と金額の文字列 price_text の 2 つで、下記の 3 行を \n でつないだ 1 本の文字列を返します。
1 行目は === おこづかい帳 ===、2 行目は品名と金額を半角スペースでつないで末尾に 円 を付けたもの、3 行目は --- ここまで --- です。ハイフンは半角 3 つ、内側は半角スペース 1 つずつです。
末尾に \n は付けません。最後の行のうしろに改行を足すと、目には見えない差でテストが落ちます。改行は行と行の 間 にだけ入れます。
要件
- 関数名は receipt_lines で、引数は name と price_text の2つ
- 1行目は "= おこづかい帳 ="、3行目は "--- ここまで ---" にする
- 2行目は品名と金額を半角スペースでつなぎ末尾に「円」を付ける
- 行の区切りは \n を使い、末尾には改行を付けない