본문 바로가기

Python

[python] 파이썬 응용 해보기 - 영화관 좌석 예약 (에티버스러닝 - 멀티 클라우드 엔지니어 교육)

에티버스러닝의 K-Digital Training을 통해 멀티 클라우드 엔지니어 교육을 듣고 있다. 

나중에 Flask 등을 사용해서 프로젝트를 웹으로 올린다고 들었다. 그때 사용하는 프로그래밍 언어가 python이기 때문에 5주차에 파이썬 기본 강의가 진행되었다. 

 

 

파이썬 기본 강의에서 for문을 배웠다. 예제로 <영화관 좌석 지정> 문제를 풀어보았다. 이미 저장된 List를 for문을 돌려 출력하는 것까지였다. 

 

 

<영화관 좌석 지정 - 기본> 

코드

seat= [[0,0,0,0,0,0,0,0,1,0],  
      [0,0,0,1,0,0,0,0,0,0],  
      [0,0,0,0,0,0,0,0,0,0],  
      [0,0,0,0,0,0,0,0,0,0],   
      [0,0,0,0,0,0,0,0,0,0],   
      [0,0,0,0,0,0,0,0,0,0],  
      [0,0,0,0,0,0,0,0,0,0],   
      [0,0,0,0,0,0,0,0,0,0]]   
      
      
for i in range(8):
  for j in range(10):
    if seat[i][j]== 0:
      print("□", end="")
    else:
      print("■", end="")
  print()

출력

 

그런데 while문을 배우고 이 예제를 응용해보면 재미있을 거 같아서 여러 가지 조건을 추가해보기로 했다.

 

 

 

<영화관 좌석 지정 - 응용>

조건
1.  좌석을 직접 계속 입력 받는다. (input과 while 사용) 
2. end를 입력 받으면 좌석 에약을 종료하고 화면을 출력한다. 
3.  알파벳을 대소문자 상관없이 입력 받는다. (a9도 A9도 A열 9번 좌석을 예약한다. )
4. AA, A92, 123 같은 잘못된 문자를 입력하면 "잘못 입력하셨습니다. " 를 출력한다. 
5. 출력 화면을 다음 사진처럼 나올 수 있게 한다. 

 

사실 간단하게 금방 할 수 있을 줄 알았지만, 조건 4번이 꽤 까다로웠다. 

 

코드

# 관람석 빈 좌석 표시
# 행 8개 열 10개

# □ ■
seat= [[0,0,0,0,0,0,0,0,0,0],   #A
      [0,0,0,0,0,0,0,0,0,0],    #B
      [0,0,0,0,0,0,0,0,0,0],    #C
      [0,0,0,0,0,0,0,0,0,0],    #D
      [0,0,0,0,0,0,0,0,0,0],    #E
      [0,0,0,0,0,0,0,0,0,0],    #F
      [0,0,0,0,0,0,0,0,0,0],    #G
      [0,0,0,0,0,0,0,0,0,0]]    #H


#좌석 위치를 입력 받고 값을 저장한다. 
while True:
  reserve = input("좌석 위치를 입력하세요.(A1부터 H10까지)\nEND를 입력하면 종료합니다. \n").strip().upper() 
  if 'END' == reserve.upper() : 
    print("좌석 지정을 종료합니다. ")
    break 
  
  elif 65 <= ord(reserve[0]) <= 72 and reserve[1:len(reserve)].isdigit():
    seat_alp = ord(reserve[0])-65 #ord-64=1이면 A 
    seat_num = int(reserve[1:len(reserve)])
    if 1 <= seat_num < 10:
      seat[seat_alp][seat_num - 1] = 1   #num에 -1을 해준 경우 
      print(f"{reserve} 좌석이 예약되었습니다. ")
    else:
      print("잘못 입력하셨습니다. ")
  else: 
    print("잘못 입력하셨습니다. ")
    # print(ord(reserve[0]))


#화면에 좌석 배열을 출력한다. 
print()
print("-"*23)
print("{:^19}".format("[스크린]"))
for i in range(8):
  x = chr(97 + i).upper()
  print("%s열 " %x, end="")
  for j in range(10):
    if seat[i][j]== 0:
      print("□", end="")
    else:
      print("■", end="")
  print()

출력

 

왜냐하면 입력받는 값은 문자열인데다가 영어든 숫자든 정해진 범위인지도 확인해야 하기 때문이었다. 

그래서 찾아보던 와중에 두 가지 아이디어가 떠올랐다. 

1. 아스키 코드를 통해 A부터 H까지인지 확인하자. 
2. 2번째 글자부터 숫자인지 확인하고, 숫자면 1부터 10까지의 숫자인지 확인한다. (아니면 "잘못 입력하셨습니다."를 출력)

 

아스키코드 사용을 위해 

ord() 함수(아스키코드로 바꿈)와 chr() 함수(아스키코드를 숫자로 바꿈)를 사용하였다. 

또 2번 아이디어를 위해서 isdigit() 함수도 사용하였다. 

isdigit를 알기 전에는 for문을 돌려서 한글자씩 일일이 확인해야하나? 싶었는데 이런 내장 함수가 있어서 정말 다행이라고 생각했다.

 

 

 

 

 

 

 

 

 

 

https://www.eteverslearning.com/Default.asp

 

https