変数
同じ 1 行を 2 回書きたくない
りんご 120円 という 1 行を、レシートの本文と控えの両方に出したいとします。ここまでの道具だと、組み立てる式を 2 回書くことになります。金額を直したくなったら 2 か所とも直さなければいけません。
そこで 変数 を使います。値に名前を付けて、あとから何度でも呼び出せるようにするしくみです。イコール = の左に名前、右に入れたい値を書きます。
Python
store = "コンビニ"
print(store + " で買いました")
print("次も " + store + " に行きます")store と書くだけで "コンビニ" が取り出せます。書いたのは 1 回、使ったのは 2 回です。店名を変えたくなっても、直すのは 1 行目だけで済みます。
同じ値を 2 回書いたら、変数にする合図です。3 回目が来る前に名前を付けておきます。
イコールは「等しい」ではない
数学のイコールとは意味が違います。= は「右の値を左の名前に入れる」という命令です。右側が先に全部計算されてから、その結果が左の名前に入ります。
Python
tax = 1.1
total = 1000 * tax2 行目では、右側の掛け算が先に済んで結果ができ、それが total に入ります。あとから別の値を入れ直すこともでき、その場合は前の値が上書きされて消えます。上から順に実行されるという規則が、ここでも効いています。
= が「入れる」の記号だからこそ、count = count + 1 のような、数学ではありえない書き方が成立します。
名前の付け方
名前は自由に決められますが、規則がいくつかあります。使えるのは半角英数字と _ だけで、数字から始めることはできません。大文字と小文字は区別されるので name と Name は別の変数です。print のような Python の予約語も使えません。
単語をつなぐときは _ を使い、小文字で書くのが Python の慣習です。a や x ではなく、中身が分かる名前を付けてください。
入れる前に使うと NameError になります。名前を打ち間違えた場合は、別の変数を新しく作ったことになるので、エラーが出ないまま結果だけ狂うこともあります。
やってみよう
関数 label_with_vars を実装してください。引数は品名 name と金額の文字列 price_text の 2 つです。
まず単位の "円" を変数 unit に入れ、name と price_text と unit をつないだ 1 行を変数 label に入れます。そのうえで、label と、label に " を記録しました" を足したものを \n でつないだ文字列を返します。
label_with_vars("りんご", "120") の戻り値は下記の 2 行です。
Python
りんご 120円
りんご 120円 を記録しました組み立てる式を 2 回書かないことが、この回の要点です。1 回だけ組み立てて、それを 2 回使ってください。
要件
- 関数名は label_with_vars で、引数は name と price_text の2つ
- 変数 unit に "円" を入れ、変数 label に name と price_text と unit をつないだ1行を入れる
- 1行目は label、2行目は label に " を記録しました" を足したもの
- 2つの行は \n でつなぎ、末尾に改行は付けない
入出力例
label_with_vars("りんご", "120") → "りんご 120円
りんご 120円 を記録しました"
label_with_vars("牛乳", "198") → "牛乳 198円
牛乳 198円 を記録しました"
label_with_vars("ノート", "0") → "ノート 0円
ノート 0円 を記録しました"
label_with_vars("チョコレートアイス", "1200") → "チョコレートアイス 1200円
チョコレートアイス 1200円 を記録しました"
label_with_vars("", "50") → " 50円
50円 を記録しました"