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

실습 : 주문 처리 함수

by ^..^v 2024. 8. 1.
728x90
반응형

사용자가 주문할 항목을 선택하고, 배달 및 결제 옵션을 지정한 후 최종 주문서를 출력하는 기능을 구현해 보겠습니다. 최종 주문서에는 각 항목의 가격, 할인 적용 여부, 최종 결제 금액 등을 계산하고 출력합니다. 

 

주문서를 출력하는 process_order 함수를 정의합니다. 

def process_order(items, total_amount, discount_amount, final_amount, discount_rate, **options):
    print("\n************************")
    print("      주   문   서      ")
    print("************************")
    print("\n주문한 항목:")
    for item, price in items:
        print(f" - {item:}:\t{price:>6,}원")
    
    print("\n옵션:")
    for option, value in options.items():
        print(f" - {option}: {value}")

    print(f"\n금액:")
    print(f" - 전체: {total_amount:>8,}원")
    print(f" - 할인: {discount_amount:>8,}원 (할인율: {discount_rate * 100:.0f}%)")
    print(f" - 결제: {final_amount:>8,}원")

items, total_amount, discount_amount, final_amount, discount_rate, **options를 매개변수로 받아 주문 항목 리스트(items)를 순회하면서 각 항목의 이름과 가격을 출력하고, 옵션 딕셔너리(**options)를 순회하면서 배달 및 결제 옵션을 출력합니다. 전체 금액(total_amount), 할인 금액(discount_amount), 최종 결제 금액(final_amount)을 보기 좋게 정렬된 형식으로 출력합니다. 

 

주문 가능한 항목과 가격, 배달 옵션, 결제 옵션을 정의합니다. 

available_items = {
    '피자': 12000,
    '음료수': 2000,
    '샐러드': 7000,
    '버거': 8000,
    '감자튀김': 3000
}
available_delivery_options = ['예', '아니오']
available_payment_options = ['신용카드', '현금']

available_items 딕셔너리는 항목 이름을 키로, 가격을 값으로 저장합니다. available_delivery_options와 available_payment_options 리스트는 사용자가 선택할 수 있는 옵션을 포함합니다. 

 

사용자 입력을 저장할 변수를 선언하고 초기화합니다.

items = []
options = {}
total_amount = 0
discount_amount = 0
discount_rate = 0
final_amount = 0

items 리스트는 사용자가 주문한 항목을 저장하고, options 딕셔너리는 배달 및 결제 옵션을 저장합니다. total_amount, discount_amount, discount_rate, final_amount는 금액 계산에 사용됩니다. 

 

사용자가 선택할 수 있는 항목과 가격을 출력합니다.

print("[[  주문 가능한 항목  ]]")
for item, price in available_items.items():
    print(f" - {item} \t{price:>6,}원")

available_items 딕셔너리를 순회하면서 각 항목과 가격을 출력합니다. 

 

사용자가 주문할 항목을 입력받습니다. 사용자가 유효한 항목을 입력할 때까지 반복합니다. 

print("\n주문할 항목을 입력하세요 >>> 아무것도 입력하지 않고 엔터 키를 누르면 입력을 종료합니다")
while True:
    item = input("항목: ")
    if not item:
        break
    if item in available_items:
        items.append((item, available_items[item]))
        total_amount += available_items[item]
    else:
        print("잘못된 항목입니다. 가능한 항목 중에서 선택하세요.")

입력된 항목이 availabe_items에 있으면 items 리스트에 추가하고, total_amount에 가격을 더합니다. 아무 것도 입력하지 않고 엔터를 누르면 입력을 종료합니다. 

 

사용자에게 배달 옵션을 입력 받습니다. 사용자가 입력한 값이 유효한 값일 때까지 반복합니다.

print("\n배달 옵션 >>> 예 / 아니오(선택 시 10% 할인)")
while True:
    delivery = input("배달: ")
    if delivery in available_delivery_options:
        options['배달'] = delivery
        break
    else:
        print("잘못된 배달 옵션입니다. '예' 또는 '아니오' 중에서 선택하세요.")

입력된 값이 available_delivery_options 에 있으면 options 딕셔너리에 추가하고, 루프를 종료합니다. 

 

사용자로부터 결제 옵션을 입력 받습니다. 유효한 값이 입력될 때까지 반복합니다.

print("\n결제 옵션 >>> 신용카드 / 현금(선택 시 10% 할인)")
while True:
    payment = input("결제: ")
    if payment in available_payment_options:
        options['결제'] = payment
        break
    else:
        print("잘못된 결제 옵션입니다. '신용카드' 또는 '현금' 중에서 선택하세요.")

입력된 값이 available_payment_options에 있으면 options 딕셔너리에 추가하고, 루프를 종료합니다. 

 

결제 및 배달 옵션에 따라 할인을 적용합니다. 

if options['결제'] == '현금':
    discount_rate += 0.1
if options['배달'] == '아니오':
    discount_rate += 0.1

discount_amount = int(total_amount * discount_rate)
final_amount = total_amount - discount_amount

결제 옵션이 현금이면 10% 할인을 적용합니다. 배달 옵션이 아니오이면 10% 할인을 적용합니다. discount_rate를 계산해 discount_amount와 final_amount를 계산합니다. 

 

process_order 함수를 호출해 최종 주문서를 출력합니다. 

process_order(items, total_amount, discount_amount, final_amount, discount_rate, **options)

process_order 함수를 호출해 주문 항목, 전체 금액, 할인 금액, 최종 금액, 할인율, 옵션을 전달합니다.

 

전체 소스 코드는 다음과 같습니다.  

def process_order(items, total_amount, discount_amount, final_amount, discount_rate, **options):
    print("\n************************")
    print("      주   문   서      ")
    print("************************")
    print("\n주문한 항목:")
    for item, price in items:
        print(f" - {item:}:\t{price:>6,}원")
    
    print("\n옵션:")
    for option, value in options.items():
        print(f" - {option}: {value}")

    print(f"\n금액:")
    print(f" - 전체: {total_amount:>8,}원")
    print(f" - 할인: {discount_amount:>8,}원 (할인율: {discount_rate * 100:.0f}%)")
    print(f" - 결제: {final_amount:>8,}원")

# 주문 가능한 항목과 옵션 정의
available_items = {
    '피자': 12000,
    '음료수': 2000,
    '샐러드': 7000,
    '버거': 8000,
    '감자튀김': 3000
}
available_delivery_options = ['예', '아니오']
available_payment_options = ['신용카드', '현금']

# 사용자 입력 받기
items = []
options = {}
total_amount = 0
discount_amount = 0
discount_rate = 0
final_amount = 0

# 주문 가능한 항목 보여주기
print("[[  주문 가능한 항목  ]]")
for item, price in available_items.items():
    print(f" - {item} \t{price:>6,}원")

# 주문 항목 입력
print("\n주문할 항목을 입력하세요 >>> 아무것도 입력하지 않고 엔터 키를 누르면 입력을 종료합니다")
while True:
    item = input("항목: ")
    if not item:
        break
    if item in available_items:
        items.append((item, available_items[item]))
        total_amount += available_items[item]
    else:
        print("잘못된 항목입니다. 가능한 항목 중에서 선택하세요.")

# 배달 옵션 입력
print("\n배달 옵션 >>> 예 / 아니오(선택 시 10% 할인)")
while True:
    delivery = input("배달: ")
    if delivery in available_delivery_options:
        options['배달'] = delivery
        break
    else:
        print("잘못된 배달 옵션입니다. '예' 또는 '아니오' 중에서 선택하세요.")

# 결제 옵션 입력
print("\n결제 옵션 >>> 신용카드 / 현금(선택 시 10% 할인)")
while True:
    payment = input("결제: ")
    if payment in available_payment_options:
        options['결제'] = payment
        break
    else:
        print("잘못된 결제 옵션입니다. '신용카드' 또는 '현금' 중에서 선택하세요.")

# 할인 적용
if options['결제'] == '현금':
    discount_rate += 0.1
if options['배달'] == '아니오':
    discount_rate += 0.1

discount_amount = int(total_amount * discount_rate)
final_amount = total_amount - discount_amount

# 함수 호출
process_order(items, total_amount, discount_amount, final_amount, discount_rate, **options)

 

728x90
반응형

댓글