이번엔 미국의 지도를 띄워두고 50개 주 이름을 입력하는 퀴즈를 만들어볼 것이다.
플레이어가 입력한 내용이 50개 주 이름에 있다면 지도 상 주 위치에 그 정답이 화면에 띄워지는 방식으로 진행할 것이다.
예를 들어 미국 지도가 화면에 있고 Alaska 를 입력하면 지도 상 Alaska 위치에 표기가 될 것이다.
주 이름과 스크린 상의 좌표는 미리 만들어놓은 csv 파일을 사용할 것이다.
먼저 csv 파일이 무엇인지 간단히 이해하고 가자.
csv 는 몇 가지 필드를 쉼표(,) 로 구분한 텍스트 및 텍스트파일이다. 확장자는 .csv 를 사용한다.
즉, 각 칼럼을 쉼표 또는 공백으로 구분하며 모든 행을 나열한 파일 형식을 의미한다.
일반적인 텍스트 파일이므로 pycharm, vscode 같은 에디터에서 그냥 열리지만, 보기에 불편할 수 있다.
더구나 파일이 크고 공백값이 존재할 경우, 열을 맞춰 데이터를 확인하기 불편해 쉽게 가공할 수 있는 기능이 필요하다.
( csv 에 대한 내용은 아래 블로그를 참고했다. )
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=resumet&logNo=221449693886
[Python] CSV 파일 읽고 쓰기 (Pandas)
파이선으로 어떤 과제를 수행하다 보면, CSV 형식의 파일을 읽고 써야 할 때가 많다. 이 때 여러가지 라...
blog.naver.com
이럴 때 우리가 사용할 것이 pandas 이다. 그렇다면 pandas 는 무엇일까?
pandas 는 Python Data Analysis Library로 빅데이터 분석을 위한 파이썬 라이브러리이다.
엑셀이나 텍스트 파일, SQL 데이터베이스 등의 분석을 위해 사용할 수 있다.
pandas 에는 여러 기능이 있지만 우리늰 csv 와 관련된 기능을 위주로 사용할 것이다.
csv 파일을 가공하기 위해 우리에게 편리한 데이터 구조로 가져와야 한다.
이 때 우리는 read_csv() 를 사용할 것이다. { ex) data = pandas.read_csv("dataset.csv") }
이름 그대로 csv 파일을 읽어 pandas 의 기본 데이터 구조인 DataFrame 으로 만들어준다.
DataFrame 은 2차원 행 방향 ( index ) 와 열 방향 ( column ) 이 존재한다.
불러온 DataFrame을 가공하는 방법은 직접 해보면서 예를 들기로 하자.
그렇다면 만들어진 데이터를 pandas 를 통해 csv 로 새로 저장하는 경우에는 어떻게 해야 할까?
이 때는 to_csv() 를 사용한다. { ex) pandas.to_csv("new_dataset.csv") }
( pandas 에 대한 내용은 여기를 참고했다. )
4) 판다스(Pandas) and 넘파이(Numpy) and 맷플롭립(Matplotlib)
데이터 분석을 위한 필수 패키지 삼대장이 있습니다. 바로 Pandas와 Numpy 그리고 Matplotlib입니다. 세 개의 패키지 모두 아나콘다를 설치했다면 추가 설치 없 ...
wikidocs.net
그럼 이제 실제적으로 위에서 말한 내용을 구현해보자.
먼저 준비한 미국의 지도이다. 우린 이 지도를 turtle.Screen 을 통해 screnn 에 불러와 활용할 것이다.
이 역시 미리 준비한 csv 파일이다.
미국의 50개 주 이름과 각 주 위치에 맞는 지도 상 좌표를 구해 row 와 column 을 구분하여 작성해 놓은 것이다.
이제 진짜로 진행해보자.
먼저 pandas 와 turtel 을 각각 import 한다.
우리가 준비한 지도를 turtle.Screen 에 집어넣어야한다. 이럴 땐 어떻게 할까?
먼저 객체 image 에 준비한 지도 파일을 할당한다. 그리고 그 image 를 sceen.addshape() 를 통해 많은 shape 중 하나로 추가한다. ( 여기서 shape 는 기존에 사용했던 circle, turtle, square 등 을 의미한다. )
그리고 turtle.shape(image) 를 통해 turtle의 모양을 image 로 변경한다.
여기까지 하면 지도가 나온는 screen 이 완료된다.
지도가 준비되었으니 마저 준비한 states 이름과 위치 좌표를 data 라는 이름의 객체로 가져오자.
( data = pandas.read_csv( "50_states.csv" )
준비해뒀던 csv 에서 state column 이 있다. 이 column 만 따로 가져와서 all_states 에 지정한다.
( all_states = data.state.to_list() -- data로 지정한 csv 파일의 state 에 해당하는 내용을 리스트 형식으로 to_list() 하는 것 )
그리고 guessed_states 라는 빈 list 를 만들것이다.
이 list 는 퀴즈 게임을 진행하면서 정답을 맞춘 주를 추가할 것이고 나중에 50개의 주에서 차감하여 앞으로 공부해야할 주 목록을 담은 states_to_learn.csv 파일을 만들 때 사용할 것이다.
이제 직접적인 게임을 실행해보자.
50개의 주를 다 입력하기 전까진 계속 진행할 것이므로 while len(guessed_states) < 50 으로 반복문을 작성한다.
screen 이 실행될 때 먼저 text 를 입력받을 textinput 과 prompt 를 사용한다.
이 때 플레이어가 입력한 내용 answer_states 가 "Exit" 일 경우, missing_states 라는 새로운 변수를 생성한다.
이 missing_states 는 all_states 의 값들을 가져오는데 guessed_states 에 없는 state 만 가져온다는 뜻이다.
( list comprehension 을 사용 )
list 인 missing_states 를 데이터형식으로 바꾸기 위해 new_data = pandas.DataFrame(missing_states) 를 사용한다.
그리고 이 new_data 를 csv 파일로 다시 변환하고 break 문을 사용하여 while 을 탈출한다.
이제 answer_state 로 입력받은 내용이 all_states 에 포함되어 있다면, 즉 정답 중 하나라면,
guessed_states list 에 그 값을 추가시키고 turtle 을 통해 준비했던 좌표에 주 이름을 작성하도록 한다.
'Studying > Python' 카테고리의 다른 글
22. miniProject(12) - password manager (feat.tkinter) (0) | 2022.08.10 |
---|---|
21. miniProject(11) - miles / km 변환기 (feat. tkinter) (0) | 2022.08.09 |
19. miniProject(9) - 길 건너기 게임 (feat. turtle) (0) | 2022.07.29 |
18. miniProject(8) - 뱀 게임 2 (feat. turtle) (0) | 2022.07.28 |
17. miniProject(8) - 뱀 게임 1 (feat. turtle) (0) | 2022.07.28 |