[Python] 첫 미니 프로젝트! 리뷰

hyem·2021년 7월 17일
0
post-thumbnail

플레이데이터 인공지능을 활용한 웹서비스 개발자 12기 수업이 벌써 3주차를 맞이했다.
🎉🎉🎉

3주차 과목은 python인데, 파이썬은 기본 문법을 이미 알고 있는 수강생들이 많아서 일찌감치 조별 프로젝트를 진행하게 되었다.

우리 조는 뭔가 재밌는걸 만들어보고 싶어서 처음에는 게임을 만들어보려고 했는데, 그러면 pygame이라는 라이브러리 사용법 찾아보는데 급급할 것 같고, 구냥 클론코딩하는 그 이상이 될 수 없을 것 같아서..

💡 Playdata 교육 수강생들을 위한 Python 봇 만들기

수업시간에 배우는 내용만 활용해서 스스로 만들 수 있는 주제를 다시 고민해본 결과, 사용자 입력을 받아 그에 맞는 결과를 출력해주는 간단한 봇을 만들기로 했다!

(금손 팀원이 그려주신 우리조 봇의 기능도.. 👏👏)

  • 입실/퇴실QR : (우리 수업은 09시 이전, 18시 이후에 입실/퇴실 체크를 위해 QR코드 찍어야함. 안그러면 결석처리됨. 자꾸 퇴실체크 까먹고 결석처리되는 불상사가 일어나자 팀원분이 만드신 개쩌는 기능.) 사용자 접속 시간을 읽어와 09시 이전이나 18시 이후면 QR을 띄워준다..
  • 시간표 : 사용자 접속 날짜를 읽어와 오늘 교육 시간표 출력해줌
  • 점심메뉴 : 점심메뉴 랜덤으로 출력, 밥값 사다리게임 가능
  • 미니게임 : 콘솔창에서 실행가능한 간단한 게임
  • 날씨 : 사용자 접속 위치를 읽어와 해당 위치의 날씨정보 출력(네이버 날씨 크롤링)
  • 코로나 : 사용자 접속 날짜를 읽어와 코로나 확진현황 출력(네이버 크롤링)
  • 뉴스 : 사용자에게 키워드 입력받아 뉴스 헤드라인 출력(네이버 뉴스 크롤링)

나의 첫 프로그램 짜기 도전

게임만들기에 미련을 못 버린 나는 외부 라이브러리를 사용하지 않고 간단히 콘솔창에서 실행할 수 있는 미니게임 몇 가지를 만들어보기로 했다.

내가 만든 게임은

  • 기억력 테스트 게임
  • 애너그램 맞추기 게임
  • 행맨 게임

3가지이다.
으아니, 반복문이랑 if문만 가지고도 프로그램이 만들어지네????
신나게 코드를 짜고, 잘 실행되는 것까지 확인하고,
팀원들과 서로 코드리뷰를 해보기로 해서 나의 코드를 멋지게 설명하려고 했는데...


출처: 인스타툰 @waterglasstoon

코드리뷰의 중요성.. 깨달아버림..

ㅋㅋㅋ몇주가 지나기는커녕 불과 하루전에 짠 코드를 읽을수가 없는것이다!!
다른 팀원들이 자신의 코드를 설명해줄때는 처음 보는 나도 술술 읽혔는데, 어찌된 일인가?
그 이유를 살펴보니 하나의 기능을 하는 코드들을 함수로 만들어서 사용했기 때문에 훨씬 가독성이 좋다는 것을 깨달았다.

팀원들의 코드를 통해 내 코드를 돌아보게 되는건... 교육 시작하기 전, 2달동안 혼자서 유투브만 보면서 공부할 때랑은 정말 다른 경험이었다.


그래서 코드를 열심히 뜯어고쳐 보았다.. 내인생 첫 리팩토링... 상대는 과거의 나자신...
예를 들어 첫번째 게임인 기억력 게임(랜덤 숫자를 0.5초씩 보여주고 뭐였는지 맞추는 게임)의 경우

👇 반복문과 if문이 중첩 난리되어 혼란스럽던 코드를

import random
import time

def memoryGame():

    num_length = [6, 8, 10]  
    
    print('\n*********************** 기억력 테스트 게임 ***********************')
    time.sleep(1.5)
    print('숫자가 나온 순서대로 입력해주세요!')
    time.sleep(1.5)
    print('(숫자 사이 스페이스바, 완료 후 엔터)')
    time.sleep(2)

	# 각 라운드 시작
        for length in num_length:  
        answer = [] 
        user_input = []
        print('시작!')
        time.sleep(2)        
    
        for i in range(length):
            n = random.randrange(0,10)
            answer.append(n)    
            print(' '*i, n, end='\r')  
            time.sleep(0.5)
            print(' '*(length+2), end='\r')

       
        while 1:                    
            try: 
                user_input = list(map(int, input('정답 >> ').strip().split(' ')))
                if user_input == answer:
                    print('정답입니다!')
                    time.sleep(1)
                    # 마지막 라운드 아니면 print출력, 마지막 라운드면 종료
                    if length != num_length[-1]:
                        print('다음 단계로 넘어갑니다.')
                        time.sleep(1)  
                    else:
                        break
                else: 
                    print('틀렸습니다ㅠㅠ')
                    time.sleep(1)
                    print('정답은', answer, '입니다.')
                    break
            except:
                print('숫자와 스페이스바만 입력해 주세요 ^_^')                
        
    print('게임이 끝났습니다 :)')

👇 이렇게..

import random
import time

def memoryGame():
    level = [6, 8, 10]    

    print('\n*********************** 기억력 테스트 게임 ***********************')
    time.sleep(1.5)
    print('숫자가 나온 순서대로 입력해주세요!')
    time.sleep(1.5)
    print('(숫자 사이 스페이스바, 완료 후 엔터)')
    time.sleep(1.5)
      

    for lv in level:
        print('시작!')
        time.sleep(2)  
        # 문제 출력
        printRandomNum(lv)
        # 사용자 정답 입력
        user_input = input('정답 >> ')
        # 정답 확인
        answerCheck(user_input, answer)    

        if success == False:
            break
        if lv != level[-1]:
            print('다음 단계로 넘어갑니다.')
            time.sleep(1) 
            
    print('게임이 끝났습니다 :)')


def printRandomNum(lv):
    global answer
    answer = []
    for i in range(lv):
        n = random.randrange(0, 10)
        answer.append(n)
        print(' '*i, n, end='\r')  
        time.sleep(0.5)
        print(' '*(lv+2), end='\r')
    
   
def answerCheck(user_input, answer): 
    global success 
    try: 
        user_answer = list(map(int, user_input.strip().split(' ')))
        if user_answer == answer:
            print('정답입니다!')
            time.sleep(1)   
            success = True     
        else:
            print('틀렸습니다ㅠㅠ')
            time.sleep(1)
            print('정답은', answer, '입니다.')
            time.sleep(1)
            success = False
    except:
        print('숫자와 스페이스바만 입력해 주세요 ^_^')
        user_input = input('정답 >> ')
        answerCheck(user_input, answer)

아직 부족한것 투성이인 엉망진창 코드겠지만... 나름 기능별로 함수를 만들어서, 메인 함수인 memoryGame()을 읽었을때 흐름이 파악되도록 해보려고 노력했다...
지금은 여기서 더 뭘 고쳐야할지도 모르는 무지랭이의 상태^^ 피드백 대환영

💎 소중한 교훈을 얻었다

앞으로도 다른 사람의 코드를 잘 뜯어보면서 깔끔하고 효율적인 코드로 발전시킬수 있도록 해야겠다!!

0개의 댓글