第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. このプログラムを理解するのに必要な知識
新プログラムの初回なのでおさらいもまとめておきましょう
- import文で外部モジュールの読み込み
- input関数でユーザー入力
- int関数で文字列→数値変換
- =演算子で変数に代入
- print関数で文字列の表示
- 固定の文字列は""で囲む
- str関数で数値→文字列変換
- 文字列+文字列は結合
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分です
*1:数学記号として正しいかは自信がありませんが…wikipedia:数学記号の表を参照しました