연습문제
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()
*주의사항 : 제가 직접 푼 것이므로 틀린 부분이 있을 수 있습니다. 오타나 틀린 부분 지적 환영!
'Back-End > Python' 카테고리의 다른 글
파이썬 for Beginner 3판 13장 연습문제 답(더보기 클릭) (0) | 2023.07.04 |
---|---|
파이썬 for Beginner 3판 12장 연습문제 답(더보기 클릭) (0) | 2023.06.27 |
파이썬 for Beginner 3판 10장 연습문제 답(더보기 클릭) (0) | 2023.06.14 |
파이썬 for Beginner 3판 9장 Self Study + 연습문제 답(더보기 클릭) (0) | 2023.06.01 |
파이썬 for Beginner 3판 7장 Code07-07.py 문제 오류 (0) | 2023.05.04 |