본문 바로가기
카테고리 없음

복리계산기

by 엔조이홀릭 2025. 1. 29.
반응형



def simple_interest(principal, annual_interest_rate, period_type, period_count):
    """
    단리 방식으로 이자를 계산하는 함수
    :param principal: 원금 (예: 1,000,000)
    :param annual_interest_rate: 연이율 (예: 5% -> 0.05)
    :param period_type: 기간의 단위 (daily, weekly, monthly, yearly 등)
    :param period_count: 해당 단위로 몇 번 반복되는지 (예: 10일, 5주, 3개월, 2년 등)
    :return: (원리금, 총이자)
    """

    # 1년을 기준으로 한 'period_type'당 횟수
    # 예) 연이율을 일 단위로 쪼개려면, 일반적으로 1년 = 365일로 가정
    PERIODS_PER_YEAR = {
        'daily': 365,
        'weekly': 52,
        'monthly': 12,
        'yearly': 1
    }
    
    if period_type not in PERIODS_PER_YEAR:
        raise ValueError(f"지원하지 않는 기간 단위입니다: {period_type}")

    # 연이율을 해당 주기의 이자율로 변환
    # (단리의 경우 연간 이자율을 단위기간 이자율로 바꿔서, period_count 회 만큼만 적용)
    periods_in_year = PERIODS_PER_YEAR[period_type]
    
    # 1회 단위 이자율 (단리 계산을 위해 사용)
    # 예) daily면 annual_interest_rate / 365
    interest_rate_per_period = annual_interest_rate / periods_in_year

    # 단리에서는 매 기간마다 추가되는 이자가 동일
    # total_interest = 원금 * (이자율) * (기간 수)
    total_interest = principal * interest_rate_per_period * period_count

    total_amount = principal + total_interest
    return total_amount, total_interest


def compound_interest(principal, annual_interest_rate, period_type, period_count):
    """
    복리 방식으로 이자를 계산하는 함수
    :param principal: 원금
    :param annual_interest_rate: 연이율 (예: 5% -> 0.05)
    :param period_type: 기간의 단위 (daily, weekly, monthly, yearly 등)
    :param period_count: 해당 단위로 몇 번 반복되는지
    :return: (원리금, 총이자)
    """

    PERIODS_PER_YEAR = {
        'daily': 365,
        'weekly': 52,
        'monthly': 12,
        'yearly': 1
    }

    if period_type not in PERIODS_PER_YEAR:
        raise ValueError(f"지원하지 않는 기간 단위입니다: {period_type}")

    periods_in_year = PERIODS_PER_YEAR[period_type]
    
    # 1회 단위 이자율
    interest_rate_per_period = annual_interest_rate / periods_in_year

    # 복리 공식: A = P * (1 + i)^n
    # n은 전체 적용 횟수
    total_amount = principal * ((1 + interest_rate_per_period) ** period_count)
    total_interest = total_amount - principal
    return total_amount, total_interest


if __name__ == "__main__":
    # 예시 입력값
    principal = 1000000           # 원금: 1,000,000원
    annual_interest_rate = 0.05   # 연이율: 5%
    
    # 예) "매일(daily)로 30일간" 단리, 복리를 각각 계산해보자
    period_type = "daily"
    period_count = 30  # 30일
    
    # 1) 단리 계산
    si_amount, si_interest = simple_interest(principal, annual_interest_rate, period_type, period_count)
    print(f"[단리] {period_count} {period_type} 후 원리금: {si_amount:,.0f}원, 이자: {si_interest:,.0f}원")

    # 2) 복리 계산
    ci_amount, ci_interest = compound_interest(principal, annual_interest_rate, period_type, period_count)
    print(f"[복리] {period_count} {period_type} 후 원리금: {ci_amount:,.0f}원, 이자: {ci_interest:,.0f}원")

    # 기간을 예: 100년으로 바꿔서 계산하고 싶다면
    # period_type = "yearly"
    # period_count = 100
    # 로 변경 후 다시 함수에 넣으면 됩니다.

728x90

댓글