Juni_Dev_log

20.11.28 (MyPick-31) TIL 본문

Project/MyPick-31(Dev)

20.11.28 (MyPick-31) TIL

Juni_K 2020. 11. 28. 15:23

(문제1) 베이스, 토핑, 시럽을 모두 체크해서 필터링을 하면 정상적으로 아이스크림을 가져오지만, 셋 중에서 하나라도 고르지않으면 오류 발생.

지난번 프로젝트 개발 중 마지막으로 발생됐던 오류이다.

DB에 있는 데이터 중에서 base / topping / syrup 중에서 한 개라도 없는 아이스크림의 경우, 필터링을 할 때 오류가 발생한다.

예를 들어서 "사랑에 빠진 딸기" 라는 플레이버를 살펴보도록한다.

/* 16 */
{
    "_id" : ObjectId("5f918a30d9241646728d4ab9"),
    "id" : "16",
    "name" : "사랑에 빠진 딸기",
    "name_eng" : "love struck strawberry",
    "base" : "딸기, 치즈",
    "topping" : "딸기, 크런치 초콜릿, 치즈케이크",
    "syrup" : "",
    "kcal" : "292",
    "allergens" : "우유,밀,대두,계란,땅콩",
    "img" : ""
}

base : 딸기, 치즈

topping : 딸기, 크런치 초콜릿, 치즈케이크

syrup : 없음

 

시럽이 없는 아이스크림을 조회하려면 결국, 체크박스에서 시럽을 클릭하지 말아야한다.

 

temp_flavor 라는 변수가 사용자가 고른 base, topping, syrup 을 담은 배열인데,

이 배열의 길이를 활용하려는 방법은 지금의 상태로는 사용할 수 없다.

 

원래 temp_flavor 라는 변수의 값은 보통 이런 식으로 나온다.

['바닐라', '무설탕 바닐라', '캔디', '팝핑캔디, 스프링클, 브리틀, 달고나, 토피', '과일', '딸기, 블루베리, 체리, 망고, 블랙베리, 라즈베리, 크랜베리, 카시스']

[0] : base1

[1] : base2 ( base1 의 하위 요소)

[2] : topping1

[3] : topping2 (topping1의 하위 요소)

[4] : syrup1 

[5] : syrup2 (syrup1의 하위 요소)

 

 

여기서 만약 base를 체크하지 않은 경우가 되면

['', '', '캔디', '팝핑캔디, 스프링클, 브리틀, 달고나, 토피', '과일', '딸기, 블루베리, 체리, 망고, 블랙베리, 라즈베리, 크랜베리, 카시스']

아무 값도 들어가지 않는 문자열이 들어간다. 이러한 경우에는 문제가 없는 것을 확인할 수 있다.

 

만약, topping을 체크하지 않은 경우라면,

['바닐라', '무설탕 바닐라', '과일', '딸기, 블루베리, 체리, 망고, 블랙베리, 라즈베리, 크랜베리, 카시스']

아무 값도 들어가지 않는 문자열이 들어가야하지만, 아무런 값도 들어가지 않은 것을 확인할 수 있다.

 

syrup을 체크하지 않은 경우에는,

['바닐라', '무설탕 바닐라', '캔디', '팝핑캔디, 스프링클, 브리틀, 달고나, 토피']

빈 값이 들어가지 않아서 계속해서 오류가 발생한다.

 

File "C:\Users\kks13\OneDrive\바탕 화면\Dev\MyPick31\MyPick-31\app\run.py", line 540, in bring_season_ice_cream temp7 = temp_flavor[4].split(',') IndexError: list index out of range

temp_flavor[4] 가 존재하지 않기 때문에 발생하는 오류이다.

 

그래서, topping과 syrup이 체크되지않았을 때도 빈 값의 문자열이 들어가도록 코딩을 해야한다.

자바스크립트의 코드 부분에서 빈 체크박스일 경우에는 ["",""] 형태의 값을 가지도록 코딩을 했다.

 

// topping data가 없는 경우
if(data.length == 0) {
	Topping_data = ["",""]
    return Topping_data;
}

...

// Syrup data가 없는 경우
if(data.length == 0){
	Syrup_data = ["",""]
	return Syrup_data;
}

 

이를 통해서 체크되지 않은 경우에는 빈 값이 들어가도록 설정했다.

 

(syrup을 체크하지 않은 경우)

['바닐라', '무설탕 바닐라', '캔디', '팝핑캔디, 스프링클, 브리틀, 달고나, 토피', '', '']

이를 통해서 해당 문제는 해결했다.

(문제2) 필터링 결과. 중복된 아이스크림이 결과로 나오기 시작했다.

base = 바닐라 / topping = 캔디 를 고른 경우, "팝핑 슈렉" 이라는 아이스크림이 결과로 나왔다.

그런데, 똑같은 팝핑 슈렉이 두 개가 나오는 경우가 발생했다.

왜 같은 아이스크림이 두 개가 나온 것일까?

 

코드를 읽어보니, 만약 빈 배열의 값이 들어갔을 때, 필터링을 위한 if for 구문들이 제대로 걸러지지 않는다는 것을 확인할 수 있었다.

 

# 테스트 코드 (베이스와 토핑 그리고 시럽을 확인하는 for , if 구문)
for j in temp_base:
	print(j)
	for k in temp:
 		print(k)
		# base 검사하는 if 구문
        if j == k:
        	print('베이스가 같습니다.')
            for l in temp_topping:
            	print(l)
                for p in temp3:
                	print(p)
                    # topping 검사하는 if 구문
                    if l == p:
                    	print('토핑이 같습니다.')
                        for b in temp_syrup:
                       		print(temp_syrup)
                            print(b)
                            for s in temp6:
                            	print(temp6)
                                print(s)
                                if b == s:
                                	print('시럽이 같습니다.')
                                    print(season_db)
                                    bring_filter_season_db.append(season_db)
                                else:
                                    print('시럽이 다릅니다.')
                    else:
                        print('토핑이 다릅니다.')
         else:
             print('베이스가 다릅니다.')

 

이 코드에서 중복으로 필터링을 검사해서 똑같은 두 개의 아이스크림이 들어가게된 것이다.

 

마지막 과정에서 중복되는 값을 제거해주는 코드를 추가하면 마무리 될 것으로 예상한다.

 

hogni.tistory.com/45

 

파이썬 리스트 중복 제거, 유일한 값 찾기

파이썬 리스트에 중복된 값을 제거하고 싶다면 어떻게 해야 하는지 알아보겠습니다. 크게 두 가지 방법이 있습니다. 1) 집합(set) 자료형을 이용한다. 2) for문을 이용해 리스트 요소를 순회하며 중

hogni.tistory.com

 

'Project > MyPick-31(Dev)' 카테고리의 다른 글

MyPick-31 정리  (0) 2021.02.01
20.11.22 (MyPick-31) TIL  (0) 2020.11.23
20.11.21 (MyPick-31) TIL  (0) 2020.11.22
20.11.15 (MyPick-31) TIL  (0) 2020.11.15
20.11.14 (MyPick-31) TIL  (0) 2020.11.15
Comments