Networks/Python

SK networks AI Camp - Python을 활용한 구매 기능

코딩하는 Español되기 2024. 7. 13. 08:00

지금까지 자료형, 반복문, 조건문을 알아보았어요.이를 최대한 활용해서

사용자가 상품 구매를 하는 코드를 만들어보았습니다.

이전에 배우고 포스팅한 내용들을 활용하여 만들어 보았습니다.

2024.07.09 - [컴퓨터 공학/Networks] - SK networks AI Camp - Python 기본(1)

 

SK networks AI Camp - Python 기본(1)

두번째 시간에는 Python 기본 문법에 대해 알아보았어요.정리한 걸 포스팅 해볼게요. 변수? 상수? 계수?4x + 6 = 12   ... 4 : '계수' , x : '변수', 6 : '상수' , 12 : '상수' - 변수(Variable) : 변하는 수. 즉,

joowon582.tistory.com

2024.07.10 - [컴퓨터 공학/Networks] - SK networks AI Camp - Python 기본(2)_자료구조

 

SK networks AI Camp - Python 기본(2)

새로운 파일을 만들어서 진행해볼게요.Python version은 3.11로 가상환경을 만들어서 해볼게요.코드 보고도 모르시겠으면 아래 링크를 참조해주세요.해야 할 내용1. Python version 3.11로 가상환경 설정py

joowon582.tistory.com

2024.07.11 - [컴퓨터 공학/Networks] - SK networks AI Camp - Python 기본(3)_제어문

 

이렇게 코딩해보니까 막히는 부분도 있고

제가 아직 부족하다는 것을 알았네요 ㅠㅠ

판매 제품 : 유랑 상점 네이버 스토 베스트 상품 일부
판매 제품 선정 이유 : 귀여워서
사용 Tool : VS Code
사용 언어 : Python

https://smartstore.naver.com/yurangmall/best?cp=1

 

유랑상점 : 네이버쇼핑 스마트스토어

유랑 상점 / 굿즈 문의는 톡톡 문의 주세요!

smartstore.naver.com

1. 전체 코드

buy = {'감자 망그러진 곰 키링 인형 발그레' : 15000, '망그러진 곰 아크릴 키링 감자' : 7500, 
       '아기 망그러진 곰 20cm 시팅 인형' : 23000, '망그러진 곰 아크릴 키링 뱃살 망곰' : 7500,
       '감자 망그러진 곰 키링 인형 울먹' : 15000, '망그러진 곰 데코 스티커 팩 꼬질 망곰' : 4000,
       '망그러진 곰 그립톡 울먹' : 14000, '망그러진 곰 캐릭터 울보 얼굴 쿠션 40cm 인형' : 36000,
       '감자 망그러진 곰 키링 인형 기본' : 15000, '망그러진 곰 캐릭터 스티커 왠지 잘될..' : 2500,
       '망그러진 곰 아크릴 키링 꼬질 햄터' : 8500, '망그러진 곰 캐릭터 스티커 아기 망그러진 곰' : 2500,
       '망그러진 곰 데코 스티커 팩 감자 망곰' : 4000, '감자 망그러진 곰 키링 인형 부아앙' : 15000,
       '망그러진 곰 미니 얼굴 키링 인형 5cm' : 7600, '망그러진 곰 캐릭터 동전지갑' : 13000}
buy_index = [i for i in buy.keys()]
Total = 0
baguni = []

print('판매 종류')
j = 1
for i in buy_index:
    print('({}){} : {}원'.format(j, i, buy[i]))
    j += 1

bw = 1
while bw:
    want = int(input(f'구매를 원하시는 것을 숫자로 선택해주세요. : '))
    if want > 16 or want < 1:
        print('없는 상품 번호입니다. 존재하는 상품의 번호를 입력해주세요.')
    else:
        Total += buy[buy_index[want-1]]
        baguni.append(want)
        baguni.sort()
        print(f'원하시는 상품은 {buy[buy_index[want-1]]}원입니다.')
        print(f'전체 금액은 {Total}원 입니다.')

        more = int(input('더 구매하시면 1, 장바구니를 확인하려면 2, 구매 목록에서 제거하려면 3, 그만 사시려면 4을 눌러주세요.'))
        
        if more == 1:
            continue
        elif more == 2:
            for i in baguni:
                print(f'{buy_index[i]} ', end =' ')
            print(' 을(를) 구매하셨습니다.')
            print(f'전체 금액은 {Total}원 입니다.')
            more_in_baguni = int(input('더 구매를 원하시면 1, 그만 사시려면 2를 눌러주세요.'))
            if more_in_baguni == 1:
                continue
            elif more_in_baguni == 2:
                break
        elif more == 3:
            while True:
                remove = int(input(f'{baguni}에서 제외할 것의 번호를 눌러주세요.'))
                del baguni[baguni.index(remove)]
                Total -= buy[buy_index[remove-1]]
                print(f'전체 금액은 {Total}원 입니다.')
                action = input(('더 제외하시나요? Y/ N : '))
                if action == 'Y':
                    pass
                elif action == 'N':
                    action_action = int(input('더 구매하시려면 1, 그만 사시려면 2을 눌러주세요.'))
                    if action_action == 2:
                        bw = 0
                        break
                    else:
                        break
                
        elif more == 4:
            break
        else:
            print('1부터 4까지 중에 입력해주세요.')


while ' ':
    money = int(input('돈을 주세요 : '))    
    if money < Total:
        print(f'잔액이 부족합니다. {Total - money}원을 더 주세요.')
        Total -= money
    elif money == Total:
        print('감사합니다. ^^ 또 오세요.')
        break
    else:
        print(f'거스름돈 {money - Total}원 입니다.')
        break

2. 변수명과 용도

변수명 타입 사용  용도
buy dict 제품명과 가격 저장
buy_index list 제품명을 buy에서 받아와 저장
Total int 전체 지불해야할 가격
money int 지불한 가격
baguni list 장바구니에 담긴 제품의 번호
want int 구매를 원하는 제품의 번호
more int 손님의 행동 결정(1, 2, 3, 4)
more_in_baguni int 장바구니에 들어가서의 행동 결정(1, 2)
del int 장바구니에서 제외할 제품의 번호

3. 코드 뜯어보기

1. 제품 설정 부분 구현

buy_index : buy.keys() 함수를 사용해 제품명을 담음

print('판매종류') 아래 부분 :

    ● 형태 : (제품번호)(제품명) : (제품가격)원

    ● 제품 번호(j) : 1번부터 ~ 16번까지 출력

    ● 제품명(i) : 변수 i 가 buy_index의 첫번째부터 끝까지 출력

    ● 제품가격(buy[i]) : buy에서 제품명에 해당하는 것의 value를 출력

buy = {'감자 망그러진 곰 키링 인형 발그레' : 15000, '망그러진 곰 아크릴 키링 감자' : 7500, 
       '아기 망그러진 곰 20cm 시팅 인형' : 23000, '망그러진 곰 아크릴 키링 뱃살 망곰' : 7500,
       '감자 망그러진 곰 키링 인형 울먹' : 15000, '망그러진 곰 데코 스티커 팩 꼬질 망곰' : 4000,
       '망그러진 곰 그립톡 울먹' : 14000, '망그러진 곰 캐릭터 울보 얼굴 쿠션 40cm 인형' : 36000,
       '감자 망그러진 곰 키링 인형 기본' : 15000, '망그러진 곰 캐릭터 스티커 왠지 잘될..' : 2500,
       '망그러진 곰 아크릴 키링 꼬질 햄터' : 8500, '망그러진 곰 캐릭터 스티커 아기 망그러진 곰' : 2500,
       '망그러진 곰 데코 스티커 팩 감자 망곰' : 4000, '감자 망그러진 곰 키링 인형 부아앙' : 15000,
       '망그러진 곰 미니 얼굴 키링 인형 5cm' : 7600, '망그러진 곰 캐릭터 동전지갑' : 13000}
buy_index = [i for i in buy.keys()]
Total = 0
baguni = []

print('판매 종류')
j = 1
for i in buy_index:
    print('({}){} : {}원'.format(j, i, buy[i]))
    j += 1

2. 제품 구매 부분 구현

○ want : 사용자가 원하는 제품의 번호를 입력한 것을 담는 변수

○ if문

    ● 1 ~ 16번까지 없는 제품의 번호를 선택한 경우 오류 메시지 출력 후 다시 구매 번호 요구

○ else문

     buy[buy_idex[want-1]] :

        want가 1번부터 시작하지만 인덱스는 0부터 시작해서 -1

        buy_index[숫자] : buy.keys() 함수를 통해 받아온 제품의 인덱스로 검색하여 제품명 확보

        buy[제품명] : buy에 있는 제품명의 value 값 확보

        Total : Total에 해당 제품 가격 담기

    ● baguni.append(want)   / baguni.sort()

        바구니에 제품 번호 저장

        바구니에 제품 번호 정렬

    ● more

        사용자에게 추가 행동을 물어봄

        1번을 클릭하면 다시 구매 실행

        2번을 클릭하면 : 장바구니 확인

           ■ more_in_baguni : 바구니 안에서 구매 | 종료 코드 선택

        3번을 클릭하면 구매목록에서 제거

            remove : 제외할 번호를 클릭하면 해당 변수에 저장

            del baguni[baguni.index(remove)]

              -  baguni.index(remove) : 제거할 제품의 번호 인덱스 찾기

              -  baguni[제거할 제품 번호 인덱스] : 제품 번호

            ■ 제거 후 행동 요구(Y | N)

              - 'N' 을 입력하면 더 구매(1), 종료(2)를 물어봄

              - 2를 클릭하면 bw를 0으로 만들어 while문 종료

       □ 4번을 클릭하면 구매 페이지로 이동& 종료 

       □ 그 외의 번호를 클릭하면 오류를 설명

       [여기서 바로 while문 위로 올라가는 데 else 문의 more을 물어보는 위치로 이동하는 기능 추가해야 할듯 합니다.]

bw = 1
while bw:
    want = int(input(f'구매를 원하시는 것을 숫자로 선택해주세요. : '))
    if want > 16 or want < 1:
        print('없는 상품 번호입니다. 존재하는 상품의 번호를 입력해주세요.')
    else:
        Total += buy[buy_index[want-1]]
        baguni.append(want)
        baguni.sort()
        print(f'원하시는 상품은 {buy[buy_index[want-1]]}원입니다.')
        print(f'전체 금액은 {Total}원 입니다.')

        more = int(input('더 구매하시면 1, 장바구니를 확인하려면 2, 구매 목록에서 제거하려면 3, 그만 사시려면 4을 눌러주세요.'))
        
        if more == 1:
            continue
        elif more == 2:
            for i in baguni:
                print(f'{buy_index[i]} ', end =' ')
            print(' 을(를) 구매하셨습니다.')
            print(f'전체 금액은 {Total}원 입니다.')
            more_in_baguni = int(input('더 구매를 원하시면 1, 그만 사시려면 2를 눌러주세요.'))
            if more_in_baguni == 1:
                continue
            elif more_in_baguni == 2:
                break
        elif more == 3:
            while True:
                remove = int(input(f'{baguni}에서 제외할 것의 번호를 눌러주세요.'))
                del baguni[baguni.index(remove)]
                Total -= buy[buy_index[remove-1]]
                print(f'전체 금액은 {Total}원 입니다.')
                action = input(('더 제외하시나요? Y/ N : '))
                if action == 'Y':
                    pass
                elif action == 'N':
                    action_action = int(input('더 구매하시려면 1, 그만 사시려면 2을 눌러주세요.'))
                    if action_action == 2:
                        bw = 0
                        break
                    else:
                        break
                
        elif more == 4:
            break
        else:
            print('1부터 4까지 중에 입력해주세요.')

3. 제품 구매 부분 구현

○ while ' ' : 스페이스 바 한개(띄어쓰기)가 들어가있는 문자열은 True

bool('공백') ==> bool(len('공백')) = 1 So, True가 출력

    ● money < Total: Total에서 지분한 금액(money)를 빼고, 추가 금액 요구 

    ● money = Total: 지불한 돈이 같으면 종료 

    ● money > Total: 지불한 돈이 크면 거스름돈 지불하고 종료

while ' ':
    money = int(input('돈을 주세요 : '))    
    if money < Total:
        print(f'잔액이 부족합니다. {Total - money}원을 더 주세요.')
        Total -= money
    elif money == Total:
        print('감사합니다. ^^ 또 오세요.')
        break
    else:
        print(f'거스름돈 {money - Total}원 입니다.')
        break

 


4. 더 보완해야 할 사항

1. 코드 단순화 & while문 안에 수정 및 보완

3. 기능 추가
    ● 한 번에 여러개의 제품 번호를 치는 경우(split 사용과 for문 사용)

4. 예외 처리

    ● 더 고민 해봐야 할듯

5. 더 귀여운 망곰이 제품 추가

    ● 너무너무 귀여워 

 

그냥 귀여워서 넣은 내가 따라그린 망곰 그림

1번 그림 원본 출처(유랑상점 네이버 블로그) : https://m.blog.naver.com/yurangcorp/223171794666

 

[망그러진곰] 8월 핸드폰 / 아이패드 / 컴퓨터 배경화면

안녕하세요 여러분! 잘 지내셨어요? 장마가 끝났더니 정말 덥네요.. 🫠 이번 8월 달력은 바다로 휴가 떠...

blog.naver.com

2번 그림 원본 출처(망그러진 곰 인스타) : https://www.instagram.com/yurang_official/?hl=ko