[python] python3 힘들게 배우기 #12

4 분 소요

ex34. List 에서 Oridinal 과 Cardinal의 개념

list는 어떤 요소들의 집합임을 이미 배운 적이 있다. 이 요소들 중 특정 순서의 요소에 바로 접근하기 위해서는 어떻게 해야 할까 ?

다음 같은 리스트가 있을 때, element = ['apple', 'pear', 'strawberry']

첫 번째 요소에 접근하기 위해서는? element[0] 이다.

왜 1이 아니고 0부터 시작하는 것일까? 이를 이해하기 위해서는 서수와 기수 개념 - ordinal & cardinal 을 다음과 같이 이해해 보자.

세 개의 과일 중 첫 번째로 맛있는 것은? 이라고 물을 때 우리는 ‘첫 번째’ 라고 하지 ‘0번째’라고 하지는 않는다. 왜냐하면 이 때 중요한 것은 숫서이기 때문이다. 0번째 순서라는 것은 존재하지 않는다. 그래서 우리는 서수를 order(순서)에서 따온 ordinal이라고 한다.

반대로 3개의 과일 중에 특정 위치에 있는 것에 접근하기 위해서는? 이것은 마치 card deck에서 어떤 카드를 뽑느냐와 같다. 그래서 ‘cardinal’이라고 하는 것이다. 이 때는 0부터 시작하는 것이고 이로 인해 엄청난 수학적 이득이 발생하게 되는데, 차차 설명하기로 한다.

다른말로는 index라고 한다. element list의 인덱스 0 는 바로 apple이지만, 동시에 첫 번째 요소가 되는 것이다.

ex35. 가지와 함수를 이용해 게임 만들기

이번에는 여러 가지 경우의 수로 뻗어나가는 가지들(branches)와 함수(functions)를 이용해 게임을 만들어 보도록 하자.

아래 두 가지 새 개념이 나오니 주의하면서 보자.

1) While loop을 이요한 infinite loop: 사용자가 잘못된 input을 넣었을 때, 제대로 된 input을 넣을 때까지 지속할 때 이용.

2) exit() 함수: 프로그램 종료 명령. 인수가 0일때 exit(0) 는 일반적으로 정상 종료를 뜻하고 그 이외의 숫자가 들어갈 때는 에러와 함께 종료를 뜻한다고 한다.

아래의 예제를 작성해 보자..

#황금을 갖고 나갈 수 있는 방
def gold_room():
    print("황금방에 잘 오셨습니다.")
    print("가져가고 싶은 황금의 양을 숫자로 대답하세요.")
    answer = input("> ")
    number = int(answer) #input은 문자로 인식되니 숫자로 변환
    if number > 50: #50이상 입력하면 dead func 실행 
        dead("욕심이 많군요.") #exit()와 같은 기능이지만, 하고싶은 말을 하나 하고 종료하는 함수
    else:
        print("욕심이 없군요.")
        exit(0)
        
#돌로 막혀있는 방 
def rock_room():
    print("""당신의 앞에 큰 돌 하나가 통로를 막고 있습니다.
    어떻게 지나갈지 다음의 방법들 중 하나를 선택하여 텍스트로 입력하세요.
    주먹/곡괭이/삽""")
    rock_status = False
    #곡괭이를 한번 거쳐야 삽으로 통과할 수 있는 바윗덩어리를 while 무한루프를 이용해 만듦
    while True:
        answer = input("> ")
        if answer == "주먹":
            dead("주먹이 깨져버렸네요.")
        elif answer == "곡괭이":
            print("바위가 산산조각 났습니다.")
            rock_status = True
        elif answer == "삽" and rock_status:
            print("바위를 잘 치웠습니다. 다음 방으로 들어갑니다.")
            gold_room()
        elif answer == "삽" and not rock_status:
            print("바위가 너무 커서 옮길 수가 없어요.")
        else:
            print("주먹/곡괭이/삽 중 하나로 대답하십시오.")
            

#시작함수
def start():
    print("당신의 앞에 동굴이 있습니다. 들어가시겠습니까? Y/N")
    answer = input("> ")
    if answer == "Y":
        rock_room()
    else:
        dead("겁쟁이시군요.")

#custom 종료함수 dead()
def dead(why):
    print(why, "안녕!")
    exit(0)
    
#여기서 시작!
start()

실행 예제는 다음과 같다.

당신의 앞에 동굴이 있습니다. 들어가시겠습니까? Y/N
> Y
당신의 앞에 큰 돌 하나가 통로를 막고 있습니다.
    어떻게 지나갈지 다음의 방법들 중 하나를 선택하여 텍스트로 입력하세요.
    주먹/곡괭이/삽
> 삽
바위가 너무 커서 옮길 수가 없어요.
> 곡괭이
바위가 산산조각 났습니다.
> 삽
바위를 잘 치웠습니다. 다음 방으로 들어갑니다.
황금방에 잘 오셨습니다.
가져가고 싶은 황금의 양을 숫자로 대답하세요.
> 5000
욕심이 많군요. 안녕!

댓글남기기