디필의 요모조모

파이썬 for Beginner 13장 연습문제 본문

Programming Language/Python

파이썬 for Beginner 13장 연습문제

Diphylleia12 2019. 12. 8. 22:55

1. 설명을 읽고 빈칸에 들어갈 적합한 단어를 쓰시오.

    데이터베이스은/는 대량의 데이터를 체계적으로 저장해 놓은 것 정도로 간단히 정의할 수 있다. 또 데이터베이스은/      는 여러 사용자나 시스템이 서로 공유가 가능해야 한다. 그리고 DBMS(데이터베이스 관리 시스템)은/는 이런 데이터      베이스를 관리해 주는 시스템 또는 소프트웨어를 의미한다.

 

2. 데이터베이스의 종류이다. 보기 중에서 틀린 것을 모두 고르시오.

    계단형 DBMS, 망형 DBMS, 관리형 DBMS, 객체지향형 DBMS, 객체관계형 DBMS

 

3. 설명하는 내용을 보기 중에서 고르시오.

    데이터, 테이블, 데이터베이스, DBMS, 열 이름, 데이터 형식, 행, SQL

    ① 사용자와 DBMS가 소통하는 언어를 의미한다.    SQL
    ② 회원 테이블의 회원이름 열은 문자 형식, 출생연도는 숫자 형식으로 지정하는 것을 의미한다.   데이터 형식
    ③ 데이터가표 형태로 표현된 것을 의미한다.    테이블

 

4. naverDB를 구축하고 활용하는 4단계를 SQL 문으로 차례대로 나열한 것이다. 빈칸을 채우시오.

    .open naverDB

    CREATE TABLE userTable(id char(4), userName char(15), email char(15), birthYear int);

    INSERT INTO userTable VALUES('john', 'John Bann', 'john@naver.com', 1990);

    SELECT * FROM userTable;

 

5. 파이썬에서 SQLite에 데이터를 입력하는 코드이다. 빈칸을 채우시오.

    import sqlite3

    mycon = sqlite3.connect("DB이름")

    mycur = mycon.cursor()

 

    while (True) :

        data1 = input("열 데이터1 ==> ")

        if data1 == "" :

            break;

        data2 = input("열 데이터2 ==> ")

        mystr = "INSERT INTO 테이블이름 VALUES("+data1+","+data2+")"

        mycur.execute(mystr)

 

    mycon.commit()

    mycon.close() 

 

6. 파이썬에서 SQLite 데이터를 조회하는 코드이다. 빈칸을 채우시오.

    import sqlite3

 

    sqlCon = sqlite3.connect("DB이름")

    sqlCur = sqlCon.cursor()

    sqlCur.execute("SELECT * FROM 테이블이름")

 

    print("열이름1 열이름2")

    print("---------------------")

 

    while (True) :

        sqlRow = sqlCur.fetchone()

        if sqlRow == None :

            break;

        data1 = sqlRow[0]

        data2 = sqlRow[1]

        print("%s %d" % (data1, data2))

 

    sqlCon.close()

 

7. (심화문제) 4장의 [프로그램 2]는 거북이가 마음대로 이동하는 프로그램이다. 이와 동일한 프로그램을 작성하되, 거북이의 이동 경로를 테이블에 저장하는 기능을 추가하자. 또 거북이가 모두 그린 후 화면을 깨끗하게 지우고, 마지막 선부터 처음 선까지 반대 순서로 다시 그리게 하자.

 

import turtle
import random
import sqlite3
import math

con = sqlite3.connect("turtleDB")
cur = con.cursor()

try:
    cur.execute("CREATE TABLE turtleList (선분ID int(6), 색상R float(8), 색상G float(8), 색상B float(5), 순번 INT(6), X좌표 int(6), Y좌표 int(6))")

except:
    cur.execute("DROP TABLE turtleList")
    cur.execute("CREATE TABLE turtleList (선분ID int(6), 색상R float(8), 색상G float(8), 색상B float(5), 순번 INT(6), X좌표 int(6), Y좌표 int(6))")
con.commit()

global r
global g
global b
swidth, sheight, pSize, exitCount = 300, 300, 3, 0
angle, dist, curX, curY = 0, 0, 0, 0

turtle.title("거북이가 맘대로 다니기(DB)")
turtle.shape("turtle")
turtle.pensize(pSize)
turtle.setup(width = swidth + 30, height = sheight + 30)
turtle.screensize(swidth, sheight)

idnum = 1
num = 1

while True:
    global num1
    global num2

    r = round(random.random(), 1)
    g = round(random.random(), 1)
    b = round(random.random(), 1)
    turtle.pencolor((r,g,b))

    angle = random.randrange(0, 360)
    dist = random.randrange(1, 100)
    turtle.left(angle)
    turtle.forward(dist)
    curX = round(turtle.xcor())
    curY = round(turtle.ycor())
    sql = "INSERT INTO turtleList VALUES('" + str(idnum) + "','" + str(r) + "','" + str(g) + "','"  + str(b) + "','" + str(num) + "','" + str(curX) + "','" + str(curY) + "')"
    num += 1;

    if(-swidth/2 <= curX and curX <= swidth/2) and (-sheight/2 <= curY and curY <= sheight/2):
        pass

    else:
        if exitCount < 5:
            num1 = round(turtle.xcor())
            num2 = round(turtle.ycor())
            turtle.penup()
            turtle.goto(0, 0)
            idnum += 1
            num = 1
            turtle.pendown()
            exitCount += 1
            
        if exitCount >= 5:
            break
    
    cur.execute(sql)
    
turtle.clear()

sql = "SELECT * FROM turtleList WHERE 선분ID = 5"
cur.execute(sql)
rows = cur.fetchall()
turtle.penup()
turtle.pencolor(r,g,b)
turtle.goto(num1, num2)
turtle.pendown()
turtle.goto(rows[len(rows)-1][5], rows[len(rows)-1][6])

print("----------------------------------------------------------")

cur.execute("SELECT * FROM turtleList")
while True:
    row = cur.fetchone()

    if row == None:
        break;

    data1 = row[0]
    data2 = row[1]
    data3 = row[2]
    data4 = row[3]
    data5 = row[4]
    data6 = row[5]
    data7 = row[6]
    print("%6d %5s %5s %5s %5s %5s %5s" % (data1, data2, data3, data4, data5, data6, data7))

for i in range(idnum-1, -1, -1):
    sql = "SELECT * FROM turtleList WHERE 선분ID = ('" + str(i) + "')"
    cur.execute(sql)
    rows = cur.fetchall()
    turtle.penup()
    for g in range(len(rows)-1, -1, -1):
        turtle.goto(rows[g][5], rows[g][6])
        turtle.down()
        turtle.pencolor((rows[g][1], rows[g][2], rows[g][3]))

    turtle.goto(0, 0)

turtle.done()

거북이가 마음대로 그림을 그림
다 그리면 그림을 삭제하고
다시 반대로 그림
이동경로는 모두 테이블에 저장

Comments