第7回 割り勘電卓を作ってみよう

8. 割り勘電卓を作ってみる

次は計算処理を中心としたプログラムを作って、演算について学んでいきます。

■要件

まず、金額と人数を入力します。1,000円単位で切り上げて端数(幹事の金額)を計算します。

ソースコード

import math

total = int(input("合計金額: "))
num = int(input("人数: "))
per_capita = math.ceil(total / num / 1000) * 1000
surplus = total - per_capita * (num - 1)
print("1,000円単位では、一人あたり" + str(per_capita) + "円で、余りは" + str(surplus) + "円です。")

■実行結果

合計金額: 12400
人数: 5
1,000円単位では、一人あたり3000円で、余りは400円です。

■解説

0. このプログラムを理解するのに必要な知識
  1. math. ceil関数で切り上げ
  2. -演算子で減算、*演算子で乗算、/演算子で除算

新プログラムの初回なのでおさらいもまとめておきましょう

  1. import文で外部モジュールの読み込み
  2. input関数でユーザー入力
  3. int関数で文字列→数値変換
  4. =演算子で変数に代入
  5. print関数で文字列の表示
  6. 固定の文字列は""で囲む
  7. str関数で数値→文字列変換
  8. 文字列+文字列は結合
1. 切り上げをする

math.ceil関数を使います。

math.ceil(切り上げ対象の数値)

小数点以下を切り上げた数値を返します。

切り捨てにはmath.floor関数を、 四捨五入にはround関数を使います。 round関数には外部モジュールが必要ありません。
指定桁数での切り上げには以下のようなテクニックを使います。
math.ceil(数値 / 切り上げ単位) * 切り上げ単位
12500円という数値を、12.5千円と単位変換することで整数の切り上げ問題に変換しています。実際に欲しい数値が円単位であれば切り上げた後に戻します。
math.ceil(12500円 / 1000円) * 1000# 円→千円変換
math.ceil(12.5千円) * 1000# 切り上げ
13千円 * 1000# 千円→円変換
13000
実はこのテクニックは桁だけではなく、切り上げ(切り捨てや四捨五入も)を任意の単位で処理することを意味します。 例えば、タイムカードを押した時刻から15分刻みで始業時刻を求めるようなプログラムです。分だけですが。
import math
punched = 18
start = math.ceil(punched / 15) * 15
print(str(punched) + "分に打刻した場合の始業時刻は" + str(start) + "分です")
18分に打刻した場合の始業時刻は30分です
2. 四則演算をする

四則演算も普通の数学と同じように行えます。記号が少し違うのと、数学では変わった書き方をするもの(2乗とか)も、コードに出来るよう演算子が割り当てられています。
いくつか挙げておきます。

処理 数学記号 演算子 結果
加算 + 1+2 3
減算 - 3-1 1
乗算 × * 2*3 3
乗算 ÷ / 10/4 2.5
剰余 x mod y*1 % 10%4 2
べき乗 x^y ** 5**3 125

*1:数学記号として正しいかは自信がありませんが…wikipedia:数学記号の表を参照しました