
# Assignment Number ...... 4
# Student Name ........... 배지원
# File Name .............. hw4_배지원
# Program Description .... 주어진 식당목록에서 원하는 음식을 파는 식당을 찾아 그에 대한 정보를 출력하는 프로그램 작성 - 제어문과 반복문 활용




# 1
r1 = {'상호':'A','메뉴':'피자','가격(원)':20000}
r2 = {'상호':'B','메뉴':'치킨','가격(원)':18000}
r3 = {'상호':'C','메뉴':'짜장면','가격(원)':5000}
r4 = {'상호':'D','메뉴':'초밥','가격(원)':15000}
r5 = {'상호':'E','메뉴':'치킨','가격(원)':23000}
r6 = {'상호':'F','메뉴':'족발','가격(원)':30000}
    # 중괄호 연산자를 활용하여 각 식당마다 하나의 딕셔너리 자료형을 만들어 주었다.
    # 각 열마다 key(상호,메뉴,가격)과 그에 합치하는 value 쌍을 지정하였다.
    
    # 딕셔너리 자료형은 중괄호 {}와 dict() 함수로 만들수 있고,
    # 여기서는 편의성을 위해 보다 간단한 중괄호형식을 활용하였다.

restaurant_list = [r1,r2,r3,r4,r5,r6]
    # 이를 리스트 연산자를 통해 리스트 형식의 restaurant_list를 선언 및 생성하였다.
    # 가격의 key에 해당하는 value는 별다른 코딩을 하지 않아도
    # integer형식을 가지고 있는데, 이는 기본적으로 딕셔너리의 value 값이
    # '가격(원)':10000 형식으로 설정되었기 때문이다.
    
    # 이와 같은 value의 자료형은 type을 통해 확인할 수 있으며,
    # type(restaurant_list[5]['가격(원)'])
    # int
    # type(restaurant_list[5]['메뉴'])
    # str 의 자료형식을 가짐을 알 수 있다.
    
    
    
    
# 2    
want_to_eat = input('먹고 싶은 음식을 입력하세요 : ')
    # input 함수를 활용하여 사용자가 먹고 싶은 음식에 대한 값을 입력받아 
    # want_to_eat 변수에 할당한다.
    
    # 이는 순환문과 조건문 1 안에서 restaurant_list 의 값과 비교하여
    # 식당목록 내에서 조건을 만족 시키는 정보가 있는지 판단한다.
    
orderlist = []    
    # input함수로 입력받은 조건을 만족하는 식당의 목록을 
    # restaurant_list에서 찾아 출력하는 프로그램을 만들어야 한다.
    
    # 이를 위해, 조건을 만족하는 value를 
    # 저장할 새로운 list인 orderlist에 대한 선언을 해주었다.
    
    # 이는 빈 리스트로 현재의 길이는 0이다.

s = '식당 {}, 가격 {}원'
    # 입력 값과 식당 목록 내 일치하는 결과가 있다면, 출력될 값이다.  
    # 이는 식당 목록 내 입력받은 음식을 파는 식당이 없다면 출력되지 않는다.

    # 문장 내 중괄호는 format메소드 활용을 위함이다.
    # ( 문장 내 중괄호 사용{} )
    
    
    
    
# 순환문 & 조건문 1    
for i in restaurant_list:
    # restaurant_list 의 형식은 리스트이고
    # 각각의 원소는 딕셔너리 값이 때문에,
    
    # for i in restaurant_list 의 순환문에서는
    # 입력 순서대로 key,value를 모두 포함한 딕셔너리 전체 값을 할당한다.
    
    if i['메뉴'] == want_to_eat:
    # if i['메뉴'] == want_to_eat:
    
        # i의 값은 restaurant_list의 element인 dictionary이다.
        # dictionary에 대한 값의 접근은 value에서 할 수 있지만,
        # 메소드로 불러와진 값에 대한 인덱싱은 불가하다.
        # 때문에 [] 대괄호로 i의 key값을 한정해주어야 한다.
        
        # 사용자가 입력한 값(want_to_eat)과 
        # i의 key 중 하나인, ['메뉴']에 딸린 value 가 같은지에 대한 비교를 한다.
        # 이러한 조건이 True 라면, if문을 실행하고 아니면 실행하지 않는다.
        
        orderlist.append(i)
            # 바깥에서 선언한 빈 리스트인 orderlist에 리스트의 메소드인
            # orderlist.append()를 사용하여 i값을 추가한다.
        
            # i의 값은 key,value를 모두 포함한 딕셔너리 전체 값이다.
        
        
        
        
# 조건문 2 (if) - 조건을 만족하는 값이 존재하지 않을 때 ,     
if len(orderlist) == 0:    
    # 앞서 정의한 조건문과 순환문 1에서 want_to_eat 값과 식당목록의 메뉴를 비교하여
    # 두가지의 변수가 같다면 orderlist에 저장을 하였다. 
    
    # 이러한 orderlist는 리스트 형식으로 이에 대한 길이는 
    # 조건을 만족하는 딕셔너리의 갯수이다.
    
    # 즉, if len(orderlist) == 0: 의 뜻은
    # 조건을 만족하는 restaurant_list가 없다는 것이다.
    
    print('결과가 없습니다.')
        # 이때 결과가 없다는 메시지를 출력하기 위해 print()함수를 사용하였다.

# 순환문 3 - 조건을 만족하는 값이 존재할 때,
for j in orderlist:
    # for 문을 활용하여 j에 oderlist의 element를 순서대로 할당하였다.
    
    # 순환문과 조건문 1 에서 
    # want_to_eat 값과 restaurant_list의 메뉴가 같은 경우,
    # orderlist에 저장을 하였다. 
  
    print(s.format(j['상호'],j['가격(원)']))    
        # 이렇게 저장받은 orderlist에 대해 
        # 식당과 가격에 대한 정보를 출력해야 한다.
    
        # 저장된 orderlist는 딕셔너리 형식이기 때문에
        # 마찬가지로 키에 대한 한정을 해야한다.
        
        #      
        # 조건문의 코드를 간결히 하기 위해 format 메소드를 활용하였고,
        # 앞서 선언된 문장 s에 key(상호와 가격)에 상응하는 value를 할당하였다.
