파이썬/파이썬(python) 중급

[25-5 파이썬] read_csv(), to_list(), textinput(title, prompt), while, with as, if break

Olivia-BlackCherry 2022. 9. 11. 19:05
import pandas as pd
data = pd.read_csv("50_states.csv")
read_csv()

괄호 안에 파일 경로를 넣으면, 판다스가 해당 csv파일을 읽어온다. 

아래는 50_states.csv파일이다.

50_states.csv
0.00MB

판다스로 csv 파일을 열어보자.

미국의 주(state)이름과 위치 좌표 (x, y) 데이터가

,(콤마)로 연결되어 있다.

 

data_list= data.state.to_list()
to_list()

데이터를 리스트로 변환하는 메소드

 

data에서 state 데이터에만 접근한 후,

to_list() 메소드를 이용해

리스트로 변환한다.

 

리스트로 변환한 까닭은, 

판다스 데이터 처리를 쉽게 하기 위해서이다.

데이터를 리스트로 변환하면 

리스트 메소드를 사용하여 데이터 처리를 할 수 있으므로, 

사용이 편리하다. 

 

 

모듈 만들기

score.py 

from turtle import Turtle

class Score(Turtle):
    def __init__(self):
        super().__init__()
        self.score = 0
        self.penup()
        self.hideturtle()

    def gain_point(self):
        self.score += 1

    def show_score(self):
        self.write(arg=f"{self.score}/50")

점수와 관련된 Score 클래스를 만든다. 

기본 Turtle 클래스를 상속받고, 

생성자를 정의한다. 

 

state_score = Score()

Score 클래스에 대한 객체를 만든다.

 

 

penup()

객체가 지나가는 자리에 펜 흔적을 남기지 않는다. 

 

hideturtle()

객체를 숨긴다. 

 

wrtie(arg=문자열)

해당 문자열을 써서 화면에 보이도록 한다. 

 

 

answer = screen.textinput(title= f"{state_score.score}/50", prompt="Let's guess another States!")
answer = answer.title()
textinput()

스크린에 빈칸이 있는 텍스트 상자를 띄운다. 사용자는 빈칸에 글자를 입력한다.

파라미터 title은 글상자 상단의 제목/ 주제가 들어간다.

prompt는 컴퓨터가 사용자의 입력을 받아들일 준비가 되었다는 신호이기도 하며,

한편으로는 빈칸에 대한 힌트를 제공한다.

 

title()

대부분 제목은 단어의 앞 글자를 대문자(Capital)로 쓴다. 

title 메소드는 문자열 안, 각 단어의 첫 글자를 대문자로 바꿔 준다.

 

 

state_list = []
if answer not in state_list:
    if answer in data.state.to_list():
        state_list.append(answer)
        letter = turtle.Turtle()
        letter.hideturtle()
        letter.penup()

        answer_data = data[data["state"]== answer]
        letter.goto(int(answer_data.x), int(answer_data.y))
        letter.write(answer)

        state_score.goto(int(answer_data.x) +10, int(answer_data.y)+10)
        state_score.gain_point()
        state_score.show_score()
A in B

A가 B에 포함되어 있다면 True

 

A not in B

A가 B에 포함되어 있지 않다면 True

 

리스트.append(요소)

요소를 해당 리스트에 집어 넣는다.

 

goto(x, y)

객체를 x, y 좌표로 이동한다.

 

 

while state_score.score < 50:
    answer = screen.textinput(title= f"{state_score.score}/50", prompt="Let's guess another States!")
    answer = answer.title()
    if answer == "Exit":
        break
    if answer not in state_list:
        if answer in data.state.to_list():
            state_list.append(answer)
            letter = turtle.Turtle()
            letter.hideturtle()
            letter.penup()

            answer_data = data[data["state"]== answer]
            letter.goto(int(answer_data.x), int(answer_data.y))
            letter.write(answer)

            state_score.goto(int(answer_data.x) +10, int(answer_data.y)+10)
            state_score.gain_point()
            state_score.show_score()

while 조건

조건이 True인 동안 계속 반복한다.

 

if~ break 

if 조건이 True라면 해당 while 구문을 빠져나온다(=> break)

 

with open("last_answer.csv", mode="a") as f:
    states_50 = data.state.to_list()
    for state in states_50:
        if state not in state_list:
            f.write(f"{state}\n")

with ~ as~

with open 파일경로 as 불릴 이름

으로 파일을 열고, 일이 끝나면 파일을 자동으로 닫는다. 

 

 

 

<최종코드>

score.py

from turtle import Turtle

class Score(Turtle):
    def __init__(self):
        super().__init__()
        self.score = 0
        self.penup()
        self.hideturtle()

    def gain_point(self):
        self.score += 1

    def show_score(self):
        self.write(arg=f"{self.score}/50")

main.py

import turtle
from score import Score
import pandas as pd

screen = turtle.Screen()
img = "blank_states_img.gif"
screen.addshape(img)
turtle.shape(img)

data = pd.read_csv("50_states.csv")

state_score = Score()
state_list = []
while state_score.score < 50:
    answer = screen.textinput(title= f"{state_score.score}/50", prompt="Let's guess another States!")
    answer = answer.title()
    if answer == "Exit":
        break
    if answer not in state_list:
        if answer in data.state.to_list():
            state_list.append(answer)
            letter = turtle.Turtle()
            letter.hideturtle()
            letter.penup()

            answer_data = data[data["state"]== answer]
            letter.goto(int(answer_data.x), int(answer_data.y))
            letter.write(answer)

            state_score.goto(int(answer_data.x) +10, int(answer_data.y)+10)
            state_score.gain_point()
            state_score.show_score()

with open("last_answer.csv", mode="a") as f:
    states_50 = data.state.to_list()
    for state in states_50:
        if state not in state_list:
            f.write(f"{state}\n")

screen.exitonclick()

 

<최종코드2>

import turtle
import pandas as pd

screen = turtle.Screen()
img = "blank_states_img.gif"
screen.addshape(img)
turtle.shape(img)

data = pd.read_csv("50_states.csv")
all_states = data.state.to_list()
guessed_states = []

while len(guessed_states) < 50:
    answer = screen.textinput(title= f"{len(guessed_states)}/50", prompt="Let's guess another States!")
    answer = answer.title()
    if answer == "Exit":
        missing_states = []
        for state in all_states:
            if state not in guessed_states:
                missing_states.append(state)
        new_data = pd.DataFrame(missing_states)
        new_data.to_csv("missing_state")
        break

    if answer in all_states:
        guessed_states.append(answer)
        t = turtle.Turtle()
        t.hideturtle()
        t.penup()

        answer_data = data[data["state"]== answer]
        t.goto(int(answer_data.x), int(answer_data.y))
        t.goto(int(answer_data.x) + 10, int(answer_data.y) + 10)
        t.write(answer)

screen.exitonclick()