buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

【python】割り勘計算~改良版~

割り勘して小数点が出るっていうのは・・・

だめですよね~(端数が出ている前回の記事)整数で割り勘できるように改良しよう!

コマンドラインから引数を受け取る

コマンドラインに「金額を入力」と表示され、金額を入力するような対話型にしました input()で入力した値を受け取れます

print('割り勘する合計金額を入力してください')
total_amount = int(input())  # 引数は文字列で渡される  

整数の割り算

divmod(arg1,arg2)という割り算の商(整数)とあまりを返してくれる便利な関数があった! ちなみに「商とあまりを返す」といった複数の返り値はタプルという型で返ってきました Pythonのタプルとは一体?わかりやすく解説をしてみた 「要素の変更ができないリスト=finalなリスト」と覚えておきます

関数・if文 今知っているものを駆使した!

割り勘できてるっぽい!!!(チェック甘いからあんまりテストしない) f:id:butorisa:20201020131129p:plain

import sys

def warikan(amount, member):
    """
    割り勘実行
    @param amount 金額
    @param member 人数
    @return calc_result 割り勘金額, あまり
    """
    calc_result = divmod(amount, member)
    return calc_result

def disp_result(min ,max, member):
    """
    結果表示
    @param min 割り勘金額
    @param max 割り勘金額+あまり
    """
    print('安いほう {}人:{}円'.format(member, min))
    print('高いほう 1人:{}円'.format(max))

def main():
    # 合計金額  
    print('割り勘する合計金額を入力してください')
    total_amount = int(input())  # 引数は文字列で渡される  
    if total_amount<2:
        print('割り勘は2円以上で行ってください')
        sys.exit()
    
    # 人数  
    print('人数を入力してください')
    member = int(input())
    if member<2:
        print('割り勘には2人以上が必要です')
        sys.exit()
    
    print('スポンサーはいますか?[Y/N]')
    sponsor = input()
    
    if sponsor == 'Y':
        print('スポンサーが出す合計金額を入力してください')
        sponsor_amount = int(input())
        
        if total_amount<sponsor_amount:
            print('スポンサー金額が合計金額を超えています')
            sys.exit()
            
        print('スポンサーの人数を入力してください')
        sponsor_member = int(input())
        if sponsor_member<1:
            print('スポンサーには1人以上を入力してください')
            sys.exit()
        
        # 割り勘する金額と人数
        wari_amount = total_amount-sponsor_amount
        wari_member = member-sponsor_member
        
        if wari_member<2:
            print('割り勘には2人以上が必要です')
            sys.exit()
        
        result = warikan(wari_amount, wari_member)
        disp_result(result[0], result[0]+result[1], wari_member-1)
        
    elif sponsor == 'N':
        result = warikan(total_amount, member)
        disp_result(result[0], result[0]+result[1], member-1)
        
    else:
        print('YまたはNを入力してください')

# メイン関数実行
main()

参考記事 Pythonでコマンドライン引数を受け取る Pythonのdivmodで割り算の商と余りを同時に取得 Pythonでプログラムを終了させる:sys.exit() Pythonスクリプトの書き方(4パターン) Python コメント、Pydoc