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