연습문제

1. 다음 보기를 입력과 관련된 함수와 출력과 관련된 함수로 분류하세요.

input(), print(), write(), read(), readline(), writeline(), readlines()

 

더보기

답 :

입력과 관련된 함수 : input(), read(), readline(), readlines()

출력과 관련된 함수 : print(), write(), writeline()

 

2. 다음은 파일의 처리단계입니다. 순서대로 나열한 것이 맞는 것을 고르세요.

A. 파일 열기
B. 파일 쓰기
C. 파일 읽기
D. 파일 닫기

① A -> C -> B -> D

A -> C -> D -> B

D -> C -> B -> A

A -> D -> B -> C

 

더보기

답 : 1

 

3. 파일의 열기 모드에 대한 설명입니다. 거리가 먼 것을 모두 고르세요.

① 생략하면 쓰기 모드가 기본으로 설정된다.

② r+는 읽기/쓰기 겸용 모드다

a는 쓰기 모드이다. 기존 파일이 있으면 삭제하고 새로 만든다.

④ t는 텍스트 모드다.

b는 이진 파일 모드다.

⑥ tb는 텍스트 파일 겸 이진 파일 모드 공용이다.

 

더보기

답 : 1, 3, 6

해설 : 1번 생략하면 읽기 모드가 기본으로 설정된다. 3번 기존 파일을 삭제하지 않고 파일 끝에 이어서 쓴다. 6번 tb는 없는 모드이다.

 

4. 다음은 data1.txt 파일에서 1개 행만 읽어서 출력하는 코드입니다. 빈칸을 채우세요.

inFp = [     ①     ]("C:/Temp/data1.txt", "r")

inStr = inFp.[     ②     ]()
print(inStr, end = "")

inFp.[     ③     ]()

 

더보기

답 : ① open, ② readline, ③ close

 

5. 파일이 있는지 확인하는 함수를 다음 중에서 고르세요.

① os.path.file(파일명)

os.path.isfile(파일명)

os.path.place(파일명)

os.path.exists(파일명)

 

더보기

답 : 4

 

6. 다음은 파일을 복사하는 코드입니다. 빈칸을 채우세요.

inFp = open("C:/Windows/win.ini", "r")
outFp = open("C:/Temp/data3.txt", "w")

inList = [     ①     ]
for inStr in inList :
    [     ②     ]

inFp.close()
outFp.close()

 

더보기

답 : inFp.readlines(), outFp.writelines(inStr)

 

7. 글자에 대응하는 고유한 숫자를 알려주는 함수와 숫자에 해당하는 글자를 알려주는 함수의 짝으로 옳은 것을 고르세요.

① number( ), char( )

order( ), character( )

ocp( ), ch( )

ord( ), chr( )

 

더보기

답 : 4

 

8. 각 설명에 맞는 os, os.path, shutil 모듈의 함수를 쓰세요.

(1) 파일 복사

(2) 디렉터리 복사

(3) 디렉터리 생성

(4) 디렉터리 삭제

(5) 폴더 여부 확인

(6) 파일 삭제

 

더보기

답 : (1) shutil.copy, (2) shutil.copytree, (3) os.mkdir, (4) shutil.rmtree, (5) os.path.isdir, (6) os.remove

 

9. 다음 각 함수의 의미를 보기에서 고르세요.

파일 복사, 디렉터리 복사, 디렉터리 생성, 디렉터리 삭제, 폴더여부 확인, 파일 삭제

(1) shutil.rmtree( )

(2) os.path.isdir( )

(3) os.remove( )

(4) shutil.copy( )

(5) shutil.copytree( )

(6) os.mkdir( )

 

더보기

답 : (1) 디렉터리 삭제, (2) 폴더여부 확인, (3) 파일 삭제, (4) 파일 복사, (5) 디렉터리 복사, (6) 디렉터리 생성

 

10. try~except 문에서 사용하는 예외 종류를 설명한 것입니다. 예외를 쓰세요.

(1) 존재하지 않는 변수에 접근할 때

(2) 파일 처리에서 오류가 발생할 때

(3) 실행에서 오류가 발생할 때

(4) 딕셔너리에 키가 없을 때

 

더보기

답 : (1) NameError, (2) IOError, (3) RuntimeError, (4) KeyError

 

11. 다음은 파일이 없을 때 또는 0으로 나눌 때 예외 처리를 하는 코드입니다. 빈칸을 채우세요.

try :
	infp = open("c:/nofile", "r")
    value = 100 / 0
[     ①     ]:
	print("파일 입출력 오류 입니다.")
{     ②     ]:
	print("0으로 나눴습니다.")
    
print("프로그램 종료!")

 

더보기

답 : ① except IOError, ② except ZeroDivisionError

 

12. [응용예제 02]를 수정해서 다음의 기능을 구현하세요.

 ·마우스 왼쪽 버튼을 누르면 10씩 화면이 밝아진다.

 ·마우스 오른쪽 버튼을 누르면 10씩 화면이 어두워진다.

 ·마우스 가운데 버튼을 누르면 화면이 반전된다. (또 누르면 원래 화면)

 

더보기

답 :

from tkinter import *
from tkinter.filedialog import *
from tkinter.simpledialog import *
import os.path
import math

## 함수 선언 부분 ##
def  loadImage(fname) :
    global window, canvas, paper, filename, XSIZE, YSIZE, inImage, filename

    inImage=[]
    fsize = os.path.getsize(fname)              # 파일의 크기
    XSIZE = YSIZE = int(math.sqrt(fsize))      # 정방형으로 가정하고 크기 구함
    
    fp = open(fname, 'rb')   

    for i in range(0, XSIZE) :
        tmpList = []
        for k in range(0, YSIZE) :
            data = int(ord(fp.read(1)))
            tmpList.append(data)
        inImage.append(tmpList)

    fp.close()

def displayImage(image) :
    global window, canvas, paper, filename, XSIZE, YSIZE, inImage, filename
    rgbString = ""
    for i in range(0, XSIZE) :
        tmpString = ""
        for k in range(0, YSIZE) :
            data = image[i][k]
            tmpString += "#%02x%02x%02x " % (data, data, data) # x 뒤에 한칸 공백
        rgbString += "{" + tmpString +  "} " # } 뒤에 한칸 공백
    paper.put(rgbString)

def func_open() :
    global window, canvas, paper, filename, XSIZE, YSIZE, inImage, filename

    filename = askopenfilename(parent = window, filetypes = (("RAW 파일", "*.raw"),  ("모든 파일", "*.*")))
    if filename == '' : # 대화상자에서 취소를 눌렀으면
        return
    
    if canvas != None : # 기존에 열린 적이 있으면 제거
        canvas.destroy()

     # 파일 --> 메모리
    loadImage(filename)
    
    window.geometry(str(XSIZE) + 'x' + str(YSIZE)) # 윈도창 크기
    canvas = Canvas(window, height = XSIZE, width = YSIZE)
    paper = PhotoImage(width = XSIZE, height = YSIZE)
    canvas.create_image( (XSIZE / 2, YSIZE / 2), image = paper, state = "normal")
   
    # 메모리 --> 화면 
    displayImage(inImage)
    
    canvas.pack()

def func_exit() :
    window.quit()
    window.destroy()

def brightPhoto(event) :
    global window, canvas, paper, filename, XSIZE, YSIZE, inImage, filename, addValue
    addValue += 10

    for i  in range(0, XSIZE) :
        for k in range(0, YSIZE) :
            data = inImage[i][k] + addValue
            if  data > 255 :
                newData = 255
            elif data < 0 :
                newData = 0
            else :
                newData = data
            inImage[i][k] = newData

    displayImage(inImage)

def darkPhoto(event) :
    global window, canvas, paper, filename, XSIZE, YSIZE, inImage, filename, addValue
    addValue -= 10
    for i in range(0, XSIZE) :
        for k in range(0, YSIZE) :
            data = inImage[i][k] + addValue
            if  data > 255 :
                newData = 255
            elif data < 0 :
                newData = 0
            else :
                newData = data
            inImage[i][k] = newData

    displayImage(inImage)

def reversePhoto(event) :
    global window, canvas, paper, filename, XSIZE, YSIZE, inImage, filename

    for  i  in  range(0, XSIZE) :
        for  k  in  range(0, YSIZE) :
            data = inImage[i][k]
            newData = 255 - data
            inImage[i][k] = newData

    displayImage(inImage)

## 전역 변수 선언 부분 ##
window = None
canvas = None
XSIZE, YSIZE=0, 0
inImage = []    # 2차원 리스트 (메모리)
filename = '' # 파일이름 (전역 변수)
addValue = 0

## 메인 코드 부분 ##
if __name__ == "__main__" :
    window=Tk()
    window.title("연습문제")

    # 메뉴 추가
    mainMenu = Menu(window)
    window.config(menu=mainMenu)
    fileMenu = Menu(mainMenu)
    mainMenu.add_cascade(label="파일", menu=fileMenu)
    fileMenu.add_command(label="파일 열기", command=func_open)
    fileMenu.add_separator()
    fileMenu.add_command(label="프로그램 종료", command=func_exit)

    window.bind("<Button-1>", brightPhoto)
    window.bind("<Button-2>", reversePhoto)
    window.bind("<Button-3>", darkPhoto)

    window.mainloop()

 

 

*주의사항 : 제가 직접 푼 것이므로 틀린 부분이 있을 수 있습니다. 오타나 틀린 부분 지적 환영!

+ Recent posts