Language/Python

파이썬 자판기 프로그램 while문, 조건문

print(blue) 2022. 10. 20. 15:17
더보기

알고리즘 순서 

 

japangi = {
    'coin_box': 3000,
    'money_box': 0,
     'product': {
            'coffee': {'stock': 5, 'price': 500},
            'cocoa': {'stock': 5, 'price': 300},
            'milk': {'stock': 5,'price': 100}}}

 

1. 메뉴판 출력

print("\n=========<< 메뉴판 >>=========")
for num,menu in enumerate(list(japangi['product'].keys())):
    print(num+1,menu,'/', japangi['product'][menu]['price'],'원 /','재고 :',japangi['product'][menu]['stock'],'잔')
print("============================== \n")
=========<< 메뉴판 >>=========
1 coffee / 500 원 / 재고 : 5 잔
2 cocoa / 300 원 / 재고 : 5 잔
3 milk / 100 원 / 재고 : 5 잔
============================== 

 

2. 총 수익과 거스름돈통에 얼마 있는지 확인

print(f"\n==> 총 수익 {japangi['money_box']}원 입니다. <==")
print(f"==> 현재 거스름돈통 : {japangi['coin_box']}원 입니다. <==")
==> 총 수익 0원 입니다. <==
==> 현재 거스름돈통 : 3000원 입니다. <==

 

3. 전메뉴가 품절 됐을 경우 (while문)

coffee_stock = japangi['product']['coffee']['stock']
cocoa_stock = japangi['product']['cocoa']['stock']
milk_stock = japangi['product']['milk']['stock']
    
if coffee_stock == 0 and cocoa_stock == 0 and milk_stock == 0: # 모든 재고가 0일 때
    print('\n====> 전 메뉴 품절 됐습니다. ====>>')
    break

 

4. 전메뉴가 품절이 아닐 경우 (while문)

money = input("\n٩( ᐛ )و : 넣으실 돈을 숫자로 입력해 주세요. : ")

if money.isnumeric():
    money = int(money) # str -> int
    print(f'==> 돈 {money}원 넣었습니다. \n')
else:
    print('\n넣으실 돈을 <<숫자로만>> 입력해 주세요.\n')

isnumeric() => 주어진 문자열이 숫자로 되어있는지 검사하는 함수

input 로 받은 값이 숫자로 입력되어있지만, type(money) 해보면 int 가 아닌 str 이다 . 

money = int(money) 해서 int로 바꿔주기

 

[Python] isdecimal(), isdigit(), isnumeric() 함수에 대해서

isdecimal() isdigit() isnumeric() => 주어진 문자열이 숫자로 되어있는지 검사하는 함수 a = '12345678' print(a.isdigit()) print(a.isdecimal()) print(a.isnumeric()) a가 그냥 평범한 숫자 문자열일때는 세..

it-neicebee.tistory.com

 

5. 받은 돈의 조건문

- 100 < money < 3000 이여야 실행되는 코드

money = input("\n٩( ᐛ )و : 넣으실 돈을 숫자로 입력해 주세요. : ")
if money.isnumeric():
    money = int(money) # str -> int
    print(f'==> 돈 {money}원 넣었습니다. \n')

    if money < 100 : # money = 100원 이하 입력시
        print('100원 이상부터 돈을 넣으실 수 있습니다.')

    elif money > 3000 : # money = 3000원 이상 입력시
        print('3000원 이하로 돈을 넣어주세요.')

    else: # money = 100~3000원 입력시
        order = input('\n٩( ᐛ )و : 원하시는 메뉴를 숫자로 입력해주세요. : ')

 

6.  money(받은 돈)에 따라 order(선택한 메뉴)의 가격에 맞춰 실행되는 코드 

else: # money = 100~3000원 입력시
    order = input('\n٩( ᐛ )و : 원하시는 메뉴를 숫자로 입력해주세요. : ')
    if order.isnumeric(): # str -> int
        order = int(order)
        print(f'==> {order}번 선택하셨습니다. ')
        if order == 0: # order가 0일 경우 
            print('\n(メ゚皿゚) : 0번은 현재 판매중인 메뉴가 아닙니다.')

        elif order > len(list(japangi['product'].keys())): # 총 상품 수보다 높은 숫자 입력했을 때 
            print(f'\n(メ゚皿゚) : 현재 {order}번은 판매중인 메뉴가 아닙니다.')
            print(f'주문에 실패했으므로 {money}원을 돌려줍니다.')

        else: # 1~(총 상품 수) 입력시 
            order_check1 = list(japangi['product'].keys())[order-1]
            print(f'\n주문하신 메뉴가 < {order_check1} >가 맞습니까?')
            order_check2 = input('주문하신 메뉴가 맞다면 y, 틀린 경우 x를 입력해주세요. : ')

            if order_check2 == 'y' or order_check2 == 'Y':
                if order == 1:
                    #print('coffee를 선택했습니다.')

                    if japangi['product']['coffee']['stock'] > 0: # 재고가 0보다 많을 때

                        if money == 500:
                            print("==> coffee를 줍니다.")
                            japangi['product']['coffee']['stock'] = japangi['product']['coffee']['stock'] -1
                            japangi['money_box'] = japangi['money_box'] + money
                        elif money > 500:
                            거스름돈 = money - 500
                            if 거스름돈 > japangi['coin_box']:
                                print(f'\n주문에 실패했으므로 {money}원을 돌려줍니다.')
                                print('죄송합니다. 거스름돈이 부족해 \n다른 메뉴를 시켜주세요.')
                                #break
                            else:
                                print(f"==> 거스름돈 {거스름돈}원과 coffee를 줍니다.")
                                japangi['product']['coffee']['stock'] = japangi['product']['coffee']['stock'] -1
                                japangi['money_box'] =+ money
                                japangi['coin_box'] = japangi['coin_box'] - 거스름돈
                        else:
                            print(f"==> 가격과 맞지 않습니다. {money}원을 돌려줍니다.")

                    elif japangi['product']['coffee']['stock'] == 0: 
                        print(f"==> coffee가 다 떨어졌습니다. {money}원을 돌려줍니다.")


                elif order == 2:
                    #print(f'\ncocoa를 선택했습니다. \n')

                    if japangi['product']['cocoa']['stock'] > 0: # 재고가 0보다 많을 때

                        if money == 300:
                            print("==> cocoa를 줍니다.")
                            japangi['product']['cocoa']['stock'] = japangi['product']['cocoa']['stock'] -1
                            japangi['money_box'] = japangi['money_box'] + money
                        elif money > 300:
                            거스름돈 = money - 300
                            if 거스름돈 > japangi['coin_box']:
                                print(f'\n주문에 실패했으므로 {money}원을 돌려줍니다.')
                                print('죄송합니다. 거스름돈이 부족해 \n다른 메뉴를 시켜주세요.')
                                #break
                            else:
                                print(f"거스름돈 {거스름돈}원과 cocoa를 줍니다.")
                                japangi['product']['cocoa']['stock'] = japangi['product']['cocoa']['stock'] -1
                                japangi['money_box'] = japangi['money_box'] + money
                                japangi['coin_box'] = japangi['coin_box'] - 거스름돈

                        else:
                            print(f"==> 가격과 맞지 않습니다. {money}원을 돌려줍니다.")

                    elif japangi['product']['cocoa']['stock'] == 0:
                        print(f"==> cocoa가 다 떨어졌습니다. {money}원을 돌려줍니다.")


                elif order == 3:
                    #print(f'\nmilk를 선택했습니다.\n')

                    if japangi['product']['milk']['stock'] > 0: # 재고가 0보다 많을 때

                        if money == 100:
                            print("==> milk를 줍니다.")
                            japangi['product']['milk']['stock'] = japangi['product']['milk']['stock'] -1
                            japangi['money_box'] = japangi['money_box'] + money
                        elif money > 100:
                            거스름돈 = money - 100
                            if 거스름돈 > japangi['coin_box']:
                                print(f'\n주문에 실패했으므로 {money}원을 돌려줍니다.')
                                print('죄송합니다. 거스름돈이 부족해 \n다른 메뉴를 시켜주세요.')
                                #break
                            else:
                                print(f"==> 거스름돈 {거스름돈}원과 milk를 줍니다.")
                                japangi['product']['milk']['stock'] = japangi['product']['milk']['stock'] -1
                                japangi['money_box'] = japangi['money_box'] + money
                                japangi['coin_box'] = japangi['coin_box'] - 거스름돈
                        else:
                            print(f"==> 가격과 맞지 않습니다. {money}원을 돌려줍니다.")

                    elif japangi['product']['milk']['stock'] == 0:
                        print(f"==> milk가 다 떨어졌습니다. {money}원을 돌려줍니다.")

                else:
                    print("\n메뉴판에 있는 숫자만 입력해주세요.\n")

            elif order_check2 == 'x' or order_check2 == 'X':
                print(f'\n==> 주문에 실패했으므로 {money}원을 돌려줍니다.')
                print('==> 다시 주문해주시길 바랍니다.')

            else:
                print('==> x 또는 y 를 입력해주세요.')
                print(f'\n==> 주문에 실패했으므로 {money}원을 돌려줍니다.')
    else:
        print('\n(メ゚皿゚) : 메뉴는 <<숫자로만>> 입력해 주세요.\n')

 

 

전체코드

while japangi['coin_box']:
    print("\n=========<< 메뉴판 >>=========")
    for num,menu in enumerate(list(japangi['product'].keys())):
        print(num+1,menu,'/', japangi['product'][menu]['price'],'원 /','재고 :',japangi['product'][menu]['stock'],'잔')
    print("============================== \n")
    
    print(f"\n==> 총 수익 {japangi['money_box']}원 입니다. <==")
    print(f"==> 현재 거스름돈통 : {japangi['coin_box']}원 입니다. <==")
    
    coffee_stock = japangi['product']['coffee']['stock']
    cocoa_stock = japangi['product']['cocoa']['stock']
    milk_stock = japangi['product']['milk']['stock']
    
    if coffee_stock == 0 and cocoa_stock == 0 and milk_stock == 0: # 모든 재고가 0일 때
        print('\n====> 전 메뉴 품절 됐습니다. ====>>')
        break
    
    else: 
        money = input("\n٩( ᐛ )و : 넣으실 돈을 숫자로 입력해 주세요. : ")
        if money.isnumeric():
            money = int(money) # str -> int
            print(f'==> 돈 {money}원 넣었습니다. \n')

            if money < 100 : # money = 100원 이하 입력시
                print('100원 이상부터 돈을 넣으실 수 있습니다.')

            elif money > 3000 : # money = 3000원 이상 입력시
                print('3000원 이하로 돈을 넣어주세요.')

            else: # money = 100~3000원 입력시
                order = input('\n٩( ᐛ )و : 원하시는 메뉴를 숫자로 입력해주세요. : ')
                if order.isnumeric(): # str -> int
                    order = int(order)
                    print(f'==> {order}번 선택하셨습니다. ')
                    if order == 0: # order가 0일 경우 
                        print('\n(メ゚皿゚) : 0번은 현재 판매중인 메뉴가 아닙니다.')

                    elif order > len(list(japangi['product'].keys())): # 총 상품 수보다 높은 숫자 입력했을 때 
                        print(f'\n(メ゚皿゚) : 현재 {order}번은 판매중인 메뉴가 아닙니다.')
                        print(f'주문에 실패했으므로 {money}원을 돌려줍니다.')

                    else: # 1~(총 상품 수) 입력시 
                        order_check1 = list(japangi['product'].keys())[order-1]
                        print(f'\n주문하신 메뉴가 < {order_check1} >가 맞습니까?')
                        order_check2 = input('주문하신 메뉴가 맞다면 y, 틀린 경우 x를 입력해주세요. : ')

                        if order_check2 == 'y' or order_check2 == 'Y':
                            if order == 1:
                                #print('coffee를 선택했습니다.')

                                if japangi['product']['coffee']['stock'] > 0: # 재고가 0보다 많을 때

                                    if money == 500:
                                        print("==> coffee를 줍니다.")
                                        japangi['product']['coffee']['stock'] = japangi['product']['coffee']['stock'] -1
                                        japangi['money_box'] = japangi['money_box'] + money
                                    elif money > 500:
                                        거스름돈 = money - 500
                                        if 거스름돈 > japangi['coin_box']:
                                            print(f'\n주문에 실패했으므로 {money}원을 돌려줍니다.')
                                            print('죄송합니다. 거스름돈이 부족해 \n다른 메뉴를 시켜주세요.')
                                            #break
                                        else:
                                            print(f"==> 거스름돈 {거스름돈}원과 coffee를 줍니다.")
                                            japangi['product']['coffee']['stock'] = japangi['product']['coffee']['stock'] -1
                                            japangi['money_box'] =+ money
                                            japangi['coin_box'] = japangi['coin_box'] - 거스름돈
                                    else:
                                        print(f"==> 가격과 맞지 않습니다. {money}원을 돌려줍니다.")

                                elif japangi['product']['coffee']['stock'] == 0: 
                                    print(f"==> coffee가 다 떨어졌습니다. {money}원을 돌려줍니다.")


                            elif order == 2:
                                #print(f'\ncocoa를 선택했습니다. \n')

                                if japangi['product']['cocoa']['stock'] > 0: # 재고가 0보다 많을 때

                                    if money == 300:
                                        print("==> cocoa를 줍니다.")
                                        japangi['product']['cocoa']['stock'] = japangi['product']['cocoa']['stock'] -1
                                        japangi['money_box'] = japangi['money_box'] + money
                                    elif money > 300:
                                        거스름돈 = money - 300
                                        if 거스름돈 > japangi['coin_box']:
                                            print(f'\n주문에 실패했으므로 {money}원을 돌려줍니다.')
                                            print('죄송합니다. 거스름돈이 부족해 \n다른 메뉴를 시켜주세요.')
                                            #break
                                        else:
                                            print(f"거스름돈 {거스름돈}원과 cocoa를 줍니다.")
                                            japangi['product']['cocoa']['stock'] = japangi['product']['cocoa']['stock'] -1
                                            japangi['money_box'] = japangi['money_box'] + money
                                            japangi['coin_box'] = japangi['coin_box'] - 거스름돈

                                    else:
                                        print(f"==> 가격과 맞지 않습니다. {money}원을 돌려줍니다.")

                                elif japangi['product']['cocoa']['stock'] == 0:
                                    print(f"==> cocoa가 다 떨어졌습니다. {money}원을 돌려줍니다.")


                            elif order == 3:
                                #print(f'\nmilk를 선택했습니다.\n')

                                if japangi['product']['milk']['stock'] > 0: # 재고가 0보다 많을 때

                                    if money == 100:
                                        print("==> milk를 줍니다.")
                                        japangi['product']['milk']['stock'] = japangi['product']['milk']['stock'] -1
                                        japangi['money_box'] = japangi['money_box'] + money
                                    elif money > 100:
                                        거스름돈 = money - 100
                                        if 거스름돈 > japangi['coin_box']:
                                            print(f'\n주문에 실패했으므로 {money}원을 돌려줍니다.')
                                            print('죄송합니다. 거스름돈이 부족해 \n다른 메뉴를 시켜주세요.')
                                            #break
                                        else:
                                            print(f"==> 거스름돈 {거스름돈}원과 milk를 줍니다.")
                                            japangi['product']['milk']['stock'] = japangi['product']['milk']['stock'] -1
                                            japangi['money_box'] = japangi['money_box'] + money
                                            japangi['coin_box'] = japangi['coin_box'] - 거스름돈
                                    else:
                                        print(f"==> 가격과 맞지 않습니다. {money}원을 돌려줍니다.")

                                elif japangi['product']['milk']['stock'] == 0:
                                    print(f"==> milk가 다 떨어졌습니다. {money}원을 돌려줍니다.")

                            else:
                                print("\n메뉴판에 있는 숫자만 입력해주세요.\n")

                        elif order_check2 == 'x' or order_check2 == 'X':
                            print(f'\n==> 주문에 실패했으므로 {money}원을 돌려줍니다.')
                            print('==> 다시 주문해주시길 바랍니다.')

                        else:
                            print('==> x 또는 y 를 입력해주세요.')
                            print(f'\n==> 주문에 실패했으므로 {money}원을 돌려줍니다.')
                else:
                    print('\n(メ゚皿゚) : 메뉴는 <<숫자로만>> 입력해 주세요.\n')
        else:
            print('\n넣으실 돈을 <<숫자로만>> 입력해 주세요.\n')