本投稿の趣旨
以下の問題をpythonでコーディングの解説を行います。
問題
あなたはスーパーマーケットを経営しています。
今、ある生鮮食品を m[kg] 仕入れました。
とても新鮮だったため、生のまま販売したところ、
m[kg] のうち p[%] を売ることができました。
次にその売れ残りをすべてお惣菜にして販売したところ、
売れ残った量のうち q[%] が売れました
さて、m[kg] 仕入れたこの食品は最終的に何kg 売れ残ったでしょうか。
ただし、生鮮食品をお総菜にする際は、量を変えることなく調理できるものとします。
コードの要点
- 3つの整数m,p,qを受け取る ←おそらくここが1番難点
- 生鮮食品をp%売った後の残りの量を計算
- 売れ残りを惣菜にしてq%売った後の残りの量を計算
- 最後に売れ残った量を表示
コード全体 (4行しかないが…)
# 1.m,p,qを受け取る
m, p, q = map(int, input().split())
# 2.生鮮食品の売れ残りを計算
seisen_nokori = m * (1 - p / 100)
# 3.惣菜の売れ残りを計算
souzai_nokori = seisen_nokori * (1 - q / 100)
# 4.売れ残った量を出力
print(float(f'{souzai_nokori:.4f}'))
コードの解説
1. m,p,qを受け取る
m, p, q = map(int, input().split())
このコードを実行すると入力欄が表示されます。
そこに任意の m,p,q を入力します。
-
input() は操作ユーザーからの入力を受け取る関数です。
例: 「1 80 40」→ ["1 80 40"] -
split() は上記input関数で得た文字列をスペースで分解します。
例:["1 80 40"] → ["1", "80", "40"] -
map(int, ...) は、このリストの各要素を整数 (int) に変換し、m, p, q の3つの変数に順番に割り当てます。
上記の結果として、m=100、p=20、q=30 という整数値を持ちます。
2. 生鮮食品の売れ残りを計算
seisen_nokori = m * (1 - p / 100)
p / 100 は「生鮮食品の売れた割合」、1 - p / 100 は「生鮮食品の売れ残った割合」、
m * (1 - p / 100) は「売れ残った惣菜量」を計算します。
例えば、m = 1 , p = 80 なら、1 * 0.8 で 0.2kg が売れ残ります。
3. 惣菜の売れ残りを計算
souzai_nokori = seisen_nokori * (1 - q / 100)
1 - q / 100 は「惣菜の売れ残った割合」
seisen_nokori * (1 - q / 100) は「惣菜の売れ残り量」を計算します。
例えば、seisen_nokori=0.2 , q = 40 の場合、0.12kg が売れ残ります。
4. 売れ残った量を出力
print(float(f'{souzai_nokori:.4f}'))
最後に結果の出力です。
ここでは Python のフォーマット文字列 (f-string) を使っています。
souzai_nokori の値を小数点以下4桁まで表示する形式でフォーマットします。
:.4f はフォーマット指定子で、: の後の .4f は「小数点以下4桁まで表示し、それ以上の桁は四捨五入する」という意味です。
例: souzai_nokori が 0.333333 の場合、f'{souzai_nokori:.4f}' は '0.3333' という文字列で表示します。
また、f'{souzai_nokori:.4f}' の結果は文字列 ('0.3333') ですが、それを float 関数を使って浮動小数点数に変換します。
この変換により、末尾の余分なゼロが削除されます。
例: '0.1200' という文字列が float('0.1200') によって 0.12 という浮動小数点数に変わります。