20230313 kdt 학습 일지
2023. 3. 14. 17:03ㆍ학습일지
728x90
1. 예외처리
- 오류가 발생되었을 때 별도의 처리를 하거나 무시하고 프로그램을 실행하는 것
- 오류가 발생될 것으로 예상되는 문장을 try 블록에 코딩하고, try 블록에 코딩된 애용을 실행하다가 오류가 발생하면 더이상 try 블록의 내용을 실행하지 않고 해당 오류의 except 블록에 코딩된 내용을 실행
- 파이썬은 발생할 수 있는 모든 문제를 예외 클래스로 만들어 놓음
1-1. try except 사용하기
try :
오류가 발생할 것으로 예상되는 문장
...
...
except:
오류가 발생했을 경우 실행할 문장
In [ ]:
print(10 / 3)
print(5 / 0) # ZeroDivisionError: division by zero
print(4 / 2)
3.3333333333333335
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-1-9c5e3ff0ad94> in <module>
1 print(10 / 3)
----> 2 print(5 / 0)
3 print(4 / 2)
ZeroDivisionError: division by zero
In [ ]:
try:
print(10 / 3)
print(5 / 0)
print(4 / 2)
except:
print('으로 나눌 수 없습니다')
print('프로그램을 종료합니다')
3.3333333333333335
으로 나눌 수 없습니다
프로그램을 종료합니다
In [ ]:
data = [10,20,30,40,50] #IndexError: list index out of range
print(data[5])
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-3-115459bf04fd> in <module>
1 data = [10,20,30,40,50]
----> 2 print(data[5])
IndexError: list index out of range
In [ ]:
try:
data = [10,20,30,40,50]
print(data[0])
print(data[1])
print(data[5])
print(data[3])
except:
print('인덱스 지정이 올바르지 않습니다')
print('프로그램을 종료합니다.')
10
20
인덱스 지정이 올바르지 않습니다
프로그램을 종료합니다.
1-2. 특정 예외 처리하기
try :
오류가 발생할 것으로 예상되는 문장
...
...
except:
오류가 발생했을 경우 실행할 문장
In [ ]:
try:
data = [10,20,30,40,50]
print(10 / 3)
print(5 / 0) # ZeroDivisionError: division by zero
print(4 / 2)
except ZeroDivisionError:
print('0으로 나눌 수 없습니다.')
except IndexError:
print('인덱스 지정이 올바르지 않습니다.')
print('프로그램을 실행할 수 없습니다')
3.3333333333333335
0으로 나눌 수 없습니다.
프로그램을 실행할 수 없습니다
1-3. 예외 에러 메세지 받기
try :
오류가 발생할 것으로 예상되는 문장
...
...
except 예외이름 as 변수:
오류가 발생했을 경우 실행할 문장
In [ ]:
try:
data = [10,20,30,40,50]
print(10 / 3)
print(5 / 0) # ZeroDivisionError: division by zero
print(4 / 2)
except ZeroDivisionError as e:
print('0으로 나눌 수 없습니다.',e)
except IndexError as e:
print('인덱스 지정이 올바르지 않습니다.',e)
print('프로그램을 실행할 수 없습니다')
3.3333333333333335
0으로 나눌 수 없습니다. division by zero
프로그램을 실행할 수 없습니다
1-4. 예외가 발생하지 않았을 경우 처리하기
try :
오류가 발생할 것으로 예상되는 문장
...
...
except 예외이름 as 변수:
오류가 발생했을 경우 실행할 문장
...
else:
오류가 발생하지 않았을 경우 실행할 문장
In [ ]:
try:
data = [10,20,30,40,50]
string = '오늘은 즐거운 예외처리 시간!'
#print(10 / 3)
#print(5 / 0) # ZeroDivisionError: division by zero
print(4 / 2)
print('%d'%string)
except ZeroDivisionError as e:
print('0으로 나눌 수 없습니다.',e)
except IndexError as e:
print('인덱스 지정이 올바르지 않습니다.',e)
except TypeError as e:
print('데이터 타입이 올바르지 않습니다.',e)
else:
print('정상적인 프로그램 진행')
print('프로그램을 실행할 수 없습니다')
2.0
데이터 타입이 올바르지 않습니다. %d format: a number is required, not str
프로그램을 실행할 수 없습니다
1-5. 예외와 관계없이 코드 실행하기
try :
오류가 발생할 것으로 예상되는 문장
...
...
except 예외이름 as 변수:
오류가 발생했을 경우 실행할 문장
...
else:
오류가 발생하지 않았을 경우 실행할 문장
finally:
예외 발생 여부와 관계없이 항상 실행할 코드
In [ ]:
try:
data = [10,20,30,40,50]
string = '오늘은 즐거운 예외처리 시간!'
print(10 / 3)
#print(5 / 0) # ZeroDivisionError: division by zero
print(4 / 2)
print('%d'%string)
except ZeroDivisionError as e:
print('0으로 나눌 수 없습니다.',e)
except IndexError as e:
print('인덱스 지정이 올바르지 않습니다.',e)
except TypeError as e:
print('데이터 타입이 올바르지 않습니다.',e)
else:
print('정상적인 프로그램 진행')
finally:
print('오류에 관계없이 무조건 실행되는 문장')
print('프로그램을 실행할 수 없습니다')
3.3333333333333335
2.0
데이터 타입이 올바르지 않습니다. %d format: a number is required, not str
오류에 관계없이 무조건 실행되는 문장
프로그램을 실행할 수 없습니다
문제
데이터를 입력하면 정렬하여 출력하는 프로그램을 작성해보자 (단, 숫자와 문자를 섞어 입력하면 숫자 + 문자 형식으로 정렬)
- 데이터를 입력하세요 : abc
- 데이터를 입력하세요 : 123
- 데이터를 입력하세요 : 1
- 데이터를 입력하세요 : bbb
- 데이터를 입력하세요 : 000 결과 [1,123,'abc','bbb']
In [ ]:
num = []
string = []
while True:
data = input('데이터를 입력하세요 : ')
if data == '000':
break
try:
num. append(int(data))
except:
string.append(data)
num.sort()
string.sort()
print(num+string)
데이터를 입력하세요 : 123
데이터를 입력하세요 : 111
데이터를 입력하세요 : bbb
데이터를 입력하세요 : abc
데이터를 입력하세요 : 000
[111, 123, 'abc', 'bbb']
2. 예외 발생시키기
In [ ]:
try:
n = int(input('짝수를 입력하세요:'))
if n % 2 !=0:
raise Exception('짝수가 아닙니다') #예외를 발생시킴
print(n)
except Exception as e:
print('예외가 발생했습니다'.e)
짝수를 입력하세요:7
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<ipython-input-17-0ec057320e33> in <module>
3 if n % 2 !=0:
----> 4 raise Exception('짝수가 아닙니다') #예외를 발생시킴
5 print(n)
Exception: 짝수가 아닙니다
During handling of the above exception, another exception occurred:
AttributeError Traceback (most recent call last)
<ipython-input-17-0ec057320e33> in <module>
5 print(n)
6 except Exception as e:
----> 7 print('예외가 발생했습니다'.e)
AttributeError: 'str' object has no attribute 'e'
In [ ]:
def func1():
n = int(input(' 짝수를 입력하세요 :'))
if n % 2 != 0:
raise Exception('짝수가 아닙니다')
print(n)
func1()
print('프로그램을 종료합니다')
짝수를 입력하세요 :22
22
프로그램을 종료합니다
In [ ]:
def func1():
func2()
def func2():
func3()
def func3():
try:
print('%d' %'문자열 출력')
except TypeError:
print('타입이 올바르지 않습니다!')
func1()
타입이 올바르지 않습니다!
In [ ]:
def func1():
try:
func2()
except TypeError:
print('타입이 올바르지 않습니다!')
def func2():
func3()
def func3():
print('%d' %'문자열 출력')
func1()
타입이 올바르지 않습니다!
1. 파일 열기
파일변수 = open('파일이름', '파일 열기 모드 및 종류 모드')
- 파일 열기 모드 : w(출력), r(입력),a(추가출력)
- w는 지정된 경로에 파일이 없으면 파일을 만든 후 저장하고, 파일이 있으면 기존의 모든 데이터를 지우고 다시 저장
- r은 지정된 경로에 파일이 없으면 에러, 있으면 해당 파일의 데이터를 읽어옴
- a는 지정된 경로에 파일이 없으면 파일을 만든 후 저장하고, 파일이 있으면 기존의 데이터 뒤에 이어서 저장
- 파일 종류 모드 : t(텍스트 파일, 생략 가능), b(바이너리 파일)
파일을 출력할 때 작업이 모두 완료되면 반드시 class() 메소드를 사용해서 파일을 닫아야 정상적으로 데이터가 저장됨input = open('text.txt','r') # 텍스트파일 열기 모드 input = open('text.txt','rt') # 텍스트파일 열기 모드 input = open('apple.jpg','rb') # 바이너리파일 열기 모드
1-1. 파일 저장하기
In [ ]:
file = open('data.txt', 'wt')
for i in range(10):
file.write('파일 열기 테스트 :'+ str(i)+'\n')#\n 파일 내에서 개행
file.close()
print('data.txt 파일에 쓰기 완료!')
data.txt 파일에 쓰기 완료!
1-2. 파일 경로
- 절대 경로 : 디스크 드라이브의 최상위(root) 디렉토리부터 파일이 저장 또는 읽어올 디렉토리까지의 경로
예)C:/Python/Day2/data.txt - 항대 경로 : 현재 화면에 표시되는 소스파일이 위치한 디렉토리부터 파일이 저장 또는 읽어올 디렉토리까지의 경로
- 같은 디렉토리: 파일명
- 상위 디렉토리:../파일명 Ehsms ./ ../파일명
- 하위 디렉토리 : 디렉토리명/파일명 또는 ./ 디렉토리명/파일명
In [ ]:
file = open('data/data.txt', 'wt')
for i in range(10):
file.write('파일 열기 테스트 :'+ str(i)+'\n')#\n 파일 내에서 개행
file.close()
print('data.txt 파일에 쓰기 완료!')
data.txt 파일에 쓰기 완료!
1-3. 파일 읽어오기
- read(): 파일로부터 전체 데이터를 읽어옴
- read(size): 파일로부터 사이즈만큼 데이터를 읽어옴
In [ ]:
file = open('./data/data.txt', 'rt')
data = file.read()
print('data.txt 파일 전체 데이터 읽기 완료')
print(data)
data.txt 파일 전체 데이터 읽기 완료
파일 열기 테스트 :0
파일 열기 테스트 :1
파일 열기 테스트 :2
파일 열기 테스트 :3
파일 열기 테스트 :4
파일 열기 테스트 :5
파일 열기 테스트 :6
파일 열기 테스트 :7
파일 열기 테스트 :8
파일 열기 테스트 :9
In [ ]:
file= open('./data/data.txt','rt')
data = file.read(10)
print('data.txt 파일 일부 데이터 읽기 완료')
print(data)
file.close()
data.txt 파일 일부 데이터 읽기 완료
파일 열기 테스트
In [ ]:
#read(10)을 이용해서 data.txt에 있는 모든 데이터를 출력하기
file= open('./data/data.txt','rt')
while True:
data = file.read(10)
if not data:
break
print(data,end='')
파일 열기 테스트 :0
파일 열기 테스트 :1
파일 열기 테스트 :2
파일 열기 테스트 :3
파일 열기 테스트 :4
파일 열기 테스트 :5
파일 열기 테스트 :6
파일 열기 테스트 :7
파일 열기 테스트 :8
파일 열기 테스트 :9
문제
키보드로 데이터를 입력하고 덱스트 파일에 저장하는 프로그램을 작성해보자. (단, 'quit'가 입력되면 저장을 끝나고 프로그램을 종료)
- 단어를 입력하세요 : apple
- 단어를 입력하세요 : banana
- 단어를 입력하세요 : orange... 단어를 입력하세요 : quit 저장되었습니다.
In [ ]:
file = open('./fruit/fruit.txt','wt')
data = input('단어를 입력하세요 :')
while True :
if data.lower()== 'quit':
break
file.write(data +'\n')
file.close()
단어를 입력하세요 :apple
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
<ipython-input-1-d2a8b748a994> in <module>
4
5 while True :
----> 6 if data.lower()== 'quit':
7 break
8 file.write(data +'\n')
KeyboardInterrupt:
In [ ]:
1-4. with 문
- 자원을 획득하고 사용 후 반납해야 하는 경우 블록으로 사용하는 문장
In [ ]:
# 선생님 풀이
file = open('./data/world.txt', 'w')
while True:
data = input('단어를 입력하세요: ')
if data.lower()== 'quit':
break
file.write(data + '\n')
file.close()
단어를 입력하세요: quit
In [ ]:
with open('./fruit/fruit.txt','w') as f:
while True :
data = input('단어를 입력하세요 :')
if data.lower()== 'quit':
break
f.write(data +'\n')
file.close()
단어를 입력하세요 :apple
단어를 입력하세요 :banana
단어를 입력하세요 :quit
1-5. read line()
- 텍스트 파일을 한 줄씩 읽어서 처리
- 파일이 종료되어 더이상 읽을 수 없으면 빈 문자열''을 읽어옴
In [ ]:
with open('./data/world.txt','r') as f:
lines = []
while True:
line = f.readline()
if not line:
break
if len(line.strip()) !=0:
print(line, end='')
line.append(line.strip())
print(lines)
[]
1-6. readlines()
- 전체라인을 모두 읽어서 각 라인단위로 리스트에 raw string으로 저장
In [ ]:
with open('./data/world.txt','r') as f:
lines =f.readlines()
print(lines)
[]
In [ ]:
for i in lines:
print(i,end='')
2.인코딩과 디코딩
2-1인코딩(encoding)
- 컴퓨터에서 사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정
- 인코딩 = 코드화= 암호화= 부호화
- 예) 아스키코드 인코딩,URL 인코딩, Base64 인코딩, 유니코드 인코딩...
- 유니코드
In [ ]:
txt1 = 'hello Python'
type(txt1)
Out[ ]:
str
In [ ]:
txt2 = txt1.encode('utf-8')
type(txt2)
Out[ ]:
bytes
In [ ]:
print(txt2)
b'hello Python'
In [ ]:
txt3 ='안녕하세요 파이썬'
print(txt3.encode('utf-8'))
b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94 \xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac'
2-2 디코딩(Decoding)
- 사람이 이행할 수 있는 언어로 되돌리는 것
- 디코딩 = 역코드화 = 복호화 *유니코드 변환 사이트
In [ ]:
txt3 ='안녕하세요 파이썬'
txt4 = txt3.encode('utf-8')
print(txt4)
b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94 \xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac'
In [ ]:
print(txt4. decode('utf-8'))
안녕하세요 파이썬
In [ ]:
print(txt4.decode('ascii'))
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-51-cb2758a9e6d4> in <module>
----> 1 print(txt4.decode('ascii'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xec in position 0: ordinal not in range(128)
과제
- 영어 단어장 프로그램을 만들어보자
- 아래 번호를 선택하세요
-
- 단어 입력(단어,뜻,레벨)
-
- 단어 출력
-
- 단어 저장(word.txt)
-
- 프로그램 종료
- 아래 번호를 선택하세요1
- 단어를 입력하세요 apple,사과,1
- 입력되었습니다.
- 아래 번호를 선택하세요1
- 단어를 입력하세요 banana,바나나,1
- 입력되었습니다.
- 아래 번호를 선택하세요 2
apple(사과, level 1)
banana(바나나, level 1) - 아래 번호를 선택하세요. 3
- 저장되었습니다.
- 아래 번호를 선택하세요 4
- 프로그램을 종료합니다.
단, 저장된 파일이 있는 경우 프로그램 재실행시 데이터를 읽어서 메모리에 저장
In [ ]:
file = open('./homework/homework.txt','wt')
word=[]
while True:
num = input(' 아래의 번호를 선택하세요:')
if num == '1':
word = input('단어를 입력하세요:')
print(word+','+num)
elif num =='2':
print('apple(사과,level1)')
print('banana(바나나,lever1)')
elif num =='3':
print('저장되었습니다.')
else:
print( '프로그램을 종료합니다. ')
break
file.write(num+'\n')
file.close()
아래의 번호를 선택하세요:2
apple(사과,level1)
banana(바나나,lever1)
아래의 번호를 선택하세요:3
저장되었습니다.
아래의 번호를 선택하세요:4
프로그램을 종료합니다.
---------------------------------------------------------------------------
UnsupportedOperation Traceback (most recent call last)
<ipython-input-23-db8904d9a847> in <module>
16 print( '프로그램을 종료합니다. ')
17 break
---> 18 num=file.read()
19 file.write(num+'\n')
20 file.close()
UnsupportedOperation: not readable
In [ ]:
1. 클로저(Closure)
- 함수 안의 함수를 결과로 반환할 때, 그 내부 함수를 클로저라고 함
- 콜백함수, 함수의 순차적 실행, 데코레이터 함수에 사용
In [ ]:
def mul2(n):
return n * 2
In [ ]:
mul2(10)
Out[ ]:
20
In [ ]:
mul2(5)
Out[ ]:
10
In [ ]:
def mul5(n):
return n * 5
In [ ]:
mul5(10)
Out[ ]:
50
In [ ]:
mul5(5)
Out[ ]:
25
In [ ]:
#mul1.mul2.mul3...mul100도 만들어야 하나?
class Mul:
def __init__(self,m):
self.m = m
def mul(self,n):
return self.m*n
In [ ]:
mul2 =Mul(2)
print(mul2.mul(10))
print(mul2.mul(5))
20
10
In [ ]:
mul5 =Mul(5)
print(mul5.mul(10))
print(mul5.mul(5))
50
25
In [ ]:
class Mul:
def __init__(self,m): # 객체를 생성할 때 호출
self.m = m
def __call__(self,n): # 객체를 실행할 때 자동으로 호출
return self.m * n
In [ ]:
mul2 =Mul(2)
In [ ]:
mul2(10)
Out[ ]:
20
In [ ]:
mul5 = Mul(5)
mul5(10)
Out[ ]:
50
In [ ]:
# 클로저 사용하기
def mul(m): #외부 함수
def wrapper(n): #내부 함수(클로저)
return m * n
return wrapper
In [ ]:
mul2 = mul(2) # m= 2인 wrapper 함수가 mul2에 저장
print(mul2(10)) # m = 2인, n =10인 wrapper 함수가 실행
20
In [ ]:
mul5 = mul(5)
print(mul5(10))
50
2. 데코레이터(Decorator)
- 함수를 꾸며주는 함수
- 함수를 인수로 받는 클로저
- @(어노테이션)을 이용하여 사용
- 반복되는 작업을 여러 함수에 적용할 경우, 기존함수를 수정하지 않고 추가 기능을 구현하고 싶은 경우 사용
In [ ]:
import time
def func1(a,b):
start = time.time()
print('함수가 시작되었습니다')
result = a+b
end = time.time()
print(f'함수 수행시간 : {end - start}')
return result
In [ ]:
resut1 = func1(10,3)
print(result)
In [ ]:
print(format(5.817413330078125e-05,'f'))
0.000058
In [ ]:
import time
def func1(a,b):
start = time.time()
print('함수가 시작되었습니다')
result = a+b
end = time.time()
print(f'함수 수행시간 : {end - start}')
return result
In [ ]:
result= func2(10,3)
print(result)
30
In [ ]:
print(format(5.817413330078125e-05,'f'))
0.000058
In [ ]:
#데코레이터 만들기
def func1(a,b):
result = a + b
return result
def func2(a,b):
result = a * b
return result
In [ ]:
def elapsed(func) :
def wrapper(a,b):
start = time.time()
print('함수가 시작되었습니다')
result = func( a,b)
end= time.time()
print(f'함수 수행시간:{end-start}')
return result
return wrapper
In [ ]:
deco1 = elapsed(func1)
result = deco1(10,3)
print(deco1)
함수가 시작되었습니다
함수 수행시간:0.0008246898651123047
<function elapsed.<locals>.wrapper at 0x7f0a1b6c9820>
In [ ]:
deco2= elapsed(func2)
result= deco2(10,3)
print(result)
함수가 시작되었습니다
함수 수행시간:0.000942230224609375
30
In [ ]:
@elapsed
def func1(a,b):
result = a + b
return result
@elapsed
def func2(a,b):
result = a * b
return result
In [ ]:
result = func1(10,3)
print(result)
함수가 시작되었습니다
함수 수행시간:0.0007376670837402344
13
In [ ]:
result =func2(10,3)
print(result)
함수가 시작되었습니다
함수 수행시간:0.0004904270172119141
30
1. 변수 타입 어노테이션
1-1. 타입 어노테이션(Tyoe Annotation)
- 변수나 상수를 선언할 때 타입을 명시적으로 선언해 줌으로써 어떤 타입의 값이 저장될 것인지를 직접 알려주는 방법
- 프로그램은 수많은 함수, 클래스 등으로 복잡하게 얽혀있는 경우가 많은데 변수 타입이 맞지 않으면 에러나 버그의 발생 가능성이 매우 높아짐
- 타입 어노테이션을 사용하면 코드 가독성과 협업 효율성이 매우 높아짐
- 파이썬 3.5부터 기능이 지원되어 많은 라이브러리, 프로젝트에서 사용이 확산되는 추세
- java, c, c++ 등은 컴파일 시 변수 타입이 결정되는 정적 프로그래밍 언어이며, 파이썬은 프로그램 실행 도중에 변수 타입을 동적으로 결정하는 동적 프로그래밍 언어임
1-2. 동적 프로그래밍 언어의 장단점
- 장점
- 타입이 자유로워 유연한 코딩이 가능하므로 쉽고 빠르게 프로그램을 만들 수 있음
- 타입 체그를 위한 코드가 없으므로 깔끔한 소스 코드를 작성할 수 있음
- 단점
- 프로젝트의 규모가 커질수록 잘못된 타입 사용으로 버그가 생길 확률이 높아짐
- 정적 프로그래밍 언어의 특징상 버그 발생 시 원인을 찾기 어려움
- 실행 속도가 느림
Java
int a =10;
a = "십'; // 에러
Python
a = 1
type(a) # int
a = "십"
type(a_ # str
In [ ]:
a: int = 10
In [ ]:
print(a)
print(type(a))
10
<class 'int'>
In [ ]:
def add(a: int, b: int) -> int :# a는 int, b는 int, 결과는 int 자료형으로 처리
return a + b
In [ ]:
add(10,3)
Out[ ]:
13
In [ ]:
add("10","3") #에러가 발생하지는 않음
Out[ ]:
'103'
In [ ]:
# 타입 어노테이션을 확인
add.__annotations__
Out[ ]:
{'a': int, 'b': int, 'return': int}
In [ ]:
과제
- 영어 단어장 프로그램을 만들어보자
- 아래 번호를 선택하세요
-
- 단어 입력(단어,뜻,레벨)
-
- 단어 출력
-
- 단어 저장(word.txt)
-
- 프로그램 종료
- 아래 번호를 선택하세요1
- 단어를 입력하세요 apple,사과,1
- 입력되었습니다.
- 아래 번호를 선택하세요1
- 단어를 입력하세요 banana,바나나,1
- 입력되었습니다.
- 아래 번호를 선택하세요 2
apple(사과, level 1)
banana(바나나, level 1) - 아래 번호를 선택하세요. 3
- 저장되었습니다.
- 아래 번호를 선택하세요 4
- 프로그램을 종료합니다.
단, 저장된 파일이 있는 경우 프로그램 재실행시 데이터를 읽어서 메모리에 저장
In [ ]:
file = open('./homework/homework.txt','wt')
word=[]
while True:
num = input(' 아래의 번호를 선택하세요:')
if num == '1':
word = input('단어를 입력하세요:')
print(word+','+num)
elif num =='2':
print('apple(사과,level1)')
print('banana(바나나,lever1)')
elif num =='3':
print('저장되었습니다.')
else:
print( '프로그램을 종료합니다. ')
break
file.write(num+'\n')
file.close()
아래의 번호를 선택하세요:1
단어를 입력하세요:apple,사과
apple,사과,1
아래의 번호를 선택하세요:1
단어를 입력하세요:banana,바나나
banana,바나나,1
아래의 번호를 선택하세요:2
apple(사과,level1)
banana(바나나,lever1)
아래의 번호를 선택하세요:3
저장되었습니다.
아래의 번호를 선택하세요:4
프로그램을 종료합니다.
728x90
반응형
'학습일지' 카테고리의 다른 글
20230315 kdt 학습일지 (0) | 2023.03.15 |
---|---|
20230314 kdt 학습일지 (0) | 2023.03.14 |
20230310 KDT 학습일지 (0) | 2023.03.10 |
20230309 KDT 학습일지 (0) | 2023.03.10 |
20230308 KDT 수업일지 (0) | 2023.03.09 |