함수나 변수를 모아 놓은 파이썬 파일 (파일명(.py) = 모듈명 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 나든 파이썬 파일 여러 모듈을 묶어서 편리하게 관리하기 위해 패키지(디렉토리) 안에 넣어둘 수 있다. 패키지 내부 모듈 안의 특정 함수를 사용하기 위해서는 ‘패키지.모듈명.특정함수명’ 형태로 사용한다. 불러들이는 명령어 : import
r : 읽기 모드 w : 쓰기 모드 a : 추가 모드 (파일의 마지막에 새로운 내용을 추가할 때 사용) , append
1 2 3 4
# open 명령어 : 파일에 작업을 한다.
f = open("새파일.txt", 'w') # w 모드로 파일을 열면 기존 파일의 내용을 전부 지우고 처음부터 작업한다. 추가 입력은 a f.close # 작업 이후 반드시 close로 파일과 연결을 끊어줘야 함
<function TextIOWrapper.close()>
1 2 3 4 5 6 7
# 파일 쓰기 모드로 출력값 입력
f = open("새파일.txt", 'w') for i inrange(1,11): # 1부터 10까지 i에 대입 data = "%d번째 줄입니다. \n" %i #formatted str # \n은 줄바꿈 기호 f.write(data) # data를 파일 객체 f에 입력 f.close()
프로그램 외부에 저장된 파일을 읽는 방법
1 2 3 4 5 6
# readline 함수
f = open("새파일.txt", 'r') line = f.readline() # 파일의 첫 줄을 읽는다. print(line) f.close()
1번째 줄입니다.
1 2 3 4 5 6
f = open("새파일.txt", 'r') whileTrue: line = f.readline() ifnot line: break# line(str) 인 경우 공백이면 fulse , 글자인 경우 true print(line) f.close()
1번째 줄입니다.
2번째 줄입니다.
3번째 줄입니다.
4번째 줄입니다.
5번째 줄입니다.
6번째 줄입니다.
7번째 줄입니다.
8번째 줄입니다.
9번째 줄입니다.
10번째 줄입니다.
1 2 3 4 5 6
f = open("새파일.txt", 'r') lines = f.readlines() f.close() print(lines) for i inrange(1,11): print(lines[i-1])
['1번째 줄입니다. \n', '2번째 줄입니다. \n', '3번째 줄입니다. \n', '4번째 줄입니다. \n', '5번째 줄입니다. \n', '6번째 줄입니다. \n', '7번째 줄입니다. \n', '8번째 줄입니다. \n', '9번째 줄입니다. \n', '10번째 줄입니다. \n']
1번째 줄입니다.
2번째 줄입니다.
3번째 줄입니다.
4번째 줄입니다.
5번째 줄입니다.
6번째 줄입니다.
7번째 줄입니다.
8번째 줄입니다.
9번째 줄입니다.
10번째 줄입니다.
1 2 3 4 5 6
# read 함수 사용하기 f = open("새파일.txt", 'r') data = f.read() print(data) print(type(data)) f.close()
1번째 줄입니다.
2번째 줄입니다.
3번째 줄입니다.
4번째 줄입니다.
5번째 줄입니다.
6번째 줄입니다.
7번째 줄입니다.
8번째 줄입니다.
9번째 줄입니다.
10번째 줄입니다.
<class 'str'>
파일에 새로운 내용 추가하기
1 2 3 4 5
f = open("새파일.txt", 'a') for i inrange(11,20): data = "%d번째 줄입니다. \n" %i f.write(data) f.close()
write문과 함께 사용하기
1 2 3
f = open("foo.txt",'w') f.write("Life is too short") f.close()
1 2 3
# with 문 withopen("foo.txt",'w') as f: f.write("Life is too short") # 자동으로 close 되는 문장
defadd(a,b):## a 와 b는 add라는 함수를 작동시키기 위한 변수 return a+b ## 함수 이름은 ad고 입력으로 2개의 값을 받으며, 결과값은 2개의 입력값을 더한 값이다.
# 메인 프로그램
a=3 b=4 c=add(a,b) print(c)
# Or
result=add(a=3,b=4) print(result)
# Or
result=add(b=3,a=4) ## 변수 이름만 맞추면 변수 순서가 바뀌어도 작동된다. print(result)
7
7
7
1 2 3 4
# 입력값이 없는 함수
defsay(): return'Hi'
1 2
a=say() print(a)
Hi
1 2 3
# retrun(결과값)이 없는 함수 defadd(a,b): print("%d + %d = %d"%(a,b,a+b))
1
add(3,4)
3 + 4 = 7
1 2 3 4 5 6 7 8 9
# 입력값이 몇 개가 될지 모를 때는?
# 여러 개의 입력값을 받는 함수
defadd_many(*arg):# '*' 는 임의의 여러 변수 지정 result=0 for i in arg: result=result+i # *arg에 입력받는 모든 값을 더한다. return result
1 2
result = add_many(1,2,3,4,5) print(result)
15
1 2 3 4 5 6 7 8 9 10 11 12
# 사칙 연산 선택 가능
defadd_mul(choice, *args) : if choice =='add': ## choice 매개변수가 add 일 경우 result = 0 for i in args: result = result+i elif choice =='mul': ## choice 매개변수가 mul 일 경우 result = 1 for i in args: result = result*i return result
1 2 3 4 5
result = add_mul('add',1,2,3,4) print(result)
result2 = add_mul('mul',1,2,3,4) print(result2)
10
24
1 2 3 4 5 6
# 함수의 결과값은 항상 하나 # 함수 결과값은 언제나 하나이기에 오류가 나는 것이 아니라 (7,12)라는 하나의 튜플 값으로 돌려준다. defadd_mul (a,b): return a+b,a*b
result = add_mul(3,4) print(result)
(7, 12)
1 2 3 4 5 6 7 8 9
# 매개변수에 초기값 미리 정하기
defsayself(name,old,man=True):## 초기값 "Ture(or something)" 의 경우 변수 가장 끝에 지정하지 않으면 에러가 발생한다. print("이름 %s" %name) print("나이 %d" %old) if man: print("남성") else: print("여성")
1
sayself("박응",27,True)
이름 박응
나이 27
남성
1
sayself("박선",27,False)
이름 박선
나이 27
여성
1
sayself("박응",27) ## 초기값이 True로 설정되어있다.
이름 박응
나이 27
남성
함수에서 매우 중요한 부분
1 2 3 4 5 6 7 8
# 함수 안에서 선언한 변수의 효력 범위
a = 1# 함수 밖의 변수 a defvartest(a):# 여기서 a는 함수 안에서 a라서 함수 안에서만 작동한다. 함수 밖과는 다른 셀이다. a=a+1 vartest(a) # 여기서 입력값 a는 함수 바깥 a=1을 입력한다는 의미 print(a) # 함수에서 a+1 = 2 가 되었지만 retrun도 없고 함수 안에서의 a만 a=2이 되었다. 메인 셀에서 a는 여전히 1이다.
1
1 2 3 4 5 6 7 8 9
# 함수 안에서 함수 밖의 변수를 변경하는 법
a = 1 defvartest(a): a=a+1 return a # 메인 프로그램 지정변수에 결과값을 돌려준다. a = vartest(a) # 결과값을 지정변수 a에 대입 print(a)
2
1 2 3 4 5 6
# lambda (한줄 함수) 'lambda 매개변수1,매개변수2, ...: 매개변수를 사용한 표현식'
while treehit <10: ## 조건이 ture 일 경우에 실행된다. -> fulse일 경우 중단 treehit = treehit + 1 print("나무를 %d번 찍었습니다" %treehit) if treehit == 10: print("나무가 넘어갑니다")
나무를 1번 찍었습니다
나무를 2번 찍었습니다
나무를 3번 찍었습니다
나무를 4번 찍었습니다
나무를 5번 찍었습니다
나무를 6번 찍었습니다
나무를 7번 찍었습니다
나무를 8번 찍었습니다
나무를 9번 찍었습니다
나무를 10번 찍었습니다
나무가 넘어갑니다
1 2 3 4 5 6 7 8
prompt = """ 1. Add 2. Del 3. List 4. Quit Enter number:"""
1 2 3 4 5
num = 0 while num != 4: print(prompt) num = int(input())
1. Add
2. Del
3. List
4. Quit
Enter number:
1
1. Add
2. Del
3. List
4. Quit
Enter number:
1
1. Add
2. Del
3. List
4. Quit
Enter number:
3
1. Add
2. Del
3. List
4. Quit
Enter number:
2
1. Add
2. Del
3. List
4. Quit
Enter number:
4
quit 의미의 4를 입력하지 않으면 계속 prompt를 출력하는 형식 여기서 input()은 사용자의 입력을 받는 함수
for i in a: print(i) print(i[0]+i[1]) ## a : 튜플 [ ]
(1, 2)
3
(3, 4)
7
(5, 6)
11
formatted print %a
%d : 정수 , %f : 실수 , %s : 문자
%#d : # 만큼의 칸을 변수에 할당한다. %#.?f : # 만큼의 칸을 할당하고 ?만큼의 소수점 이하 자리를 표현한다. ‘.’도 #의 칸 수에 해당한다.
1 2 3 4 5 6 7 8 9 10 11 12 13
# 응용
# '총 5명의 학생이 시험을 보았는대 60점이 넘으면 합격 아니면 불합격'
marks =[90,25,97,45,80]
number = 0 for mark in marks: number = number + 1## x = x + 1 if mark >= 60: print("%4d번 학생은 합격입니다." % number) ## 문자열 외부에 % (변수) 지정 else: print("%d번 학생은 불합격입니다." % number)
1번 학생은 합격입니다.
2번 학생은 불합격입니다.
3번 학생은 합격입니다.
4번 학생은 불합격입니다.
5번 학생은 합격입니다.
1 2 3 4 5 6 7 8
# range(시작 수, 끝 수) 함수. 단 끝 수는 해당하지 않는다. (시작 수 =< range < 끝 수) # 시작 수 생략 가능 ex) range(6) == (0,1,2,3,4,5)
add = 0 for i inrange(1,11): add = add + i print(add)
55
1 2 3 4
marks = [90,25,67,45,80] for mark in marks: if mark >= 60: print("%d번 학생 합격" %(marks.index(mark)+1)) ## '+1' index의 경우 0번부터 시작하기 때문에
1번 학생 합격
3번 학생 합격
5번 학생 합격
1 2 3 4 5
marks = [90,25,67,45,80] for number inrange(len(marks)): ## for number in range(5) -> (0,1,2,3,4) if marks[number] < 60: continue## 아무 작업을 하지 않고 'for'문으로 돌아간다. print("%d번 학생 합격" %(number+1))
1번 학생 합격
3번 학생 합격
5번 학생 합격
1 2 3 4 5 6
# 2중 루프
for i inrange(2,5): for j inrange(1,5): print(i*j) print('')
2
4
6
8
3
6
9
12
4
8
12
16
1 2 3 4 5 6
# 2중 루프
for i inrange(2,5): for j inrange(1,5): print(i*j,end=' ') ## end = '' 이 문장에 끝은 \n이 아닌 '' 내부 문자로 대신한다. print('')
2 4 6 8
3 6 9 12
4 8 12 16
1 2 3 4 5 6 7 8 9 10 11 12 13
#for 구문 ## range(#1,#2,#3) 를 이용한 리스트 만들기 #1 : 시작값 / #2 : 종료값 / #3 : 간격
result = [x*y for x inrange(2,10) for y inrange(1,10)]
print(result)
range(1,30,2) print(type(range(1,30,2))) print(list(range(1,30,2))) ### range 는 list 와 비슷한 형식이다.
파이썬 프로그래밍의 첫번째 단계 : 변수(variable)를 선언해서 객체(object)를 메모리에 담는 것 파이썬 프로그래밍의 두번째 단계 : 객체로 뭔가 컴퓨터가 일을 하게 만든다. 컴퓨터가 할 수 있는 일은 크게 나누어 판단과 반복 밖에 없음을 기억한다. 1) 판단 : 컴퓨터가 객체들을 비교하여 판단하게 만들기 : if 문 2) 반복 : 사람보다 수만배 빠른 두뇌회전 속도를 이용하여 반복계산 시키기 : for 문 3) 판단 + 반복 : 두 과정을 결합하여 조건이 맞는 동안만 반복하기 : while 문
if 문
1 2 3 4 5 6
# ex1 money = True## 불(bool) 타입: True or False ; 판단에 쓰이는 자료이기에 매우 중요하다. if money: ## if 다음 불(bool)이 나온다. print("택시를 타고 가라") ## 실행문에는 반드시 들여쓰기를 해줘야 한다. else: print("걸어 가라") ## **동일한 수행 동작은 줄을 맞춰야한다.** ## Tab 이용
택시를 타고 가라
money에 True를 입력했으므로 money는 참이다. 따라서 if문 다음 문장이 수행되어 ‘택시를 타고 가라’가 출력된다.
1 2 3 4 5 6 7 8 9 10 11 12 13
# if 문 기본구조 ''' if 조건문: 수행할 문장1 ## 조건문 = ture 일 경우 수행 문장 수행할 문장2 ... else: 수행할 문장A ## 조건문 = false 일 경우 수행 문장 수행할 문장B ... '''
'\n\nif 조건문:\n 수행할 문장1 ## 조건문 = ture 일 경우 수행 문장\n 수행할 문장2\n ...\nelse:\n 수행할 문장A ## 조건문 = false 일 경우 수행 문장\n 수행할 문장B\n ...\n'
자료는 우리가 컴퓨터 메모리에 입력할 컴퓨터 외부에 존재하는 수, 문자 등을 의미 자료를 컴퓨터에 입력하기 위해서 일정한 규칙이 필요하고 그 규칙은 자료형으로 규정된다. 컴퓨터 외부에 존재하는 자료를 컴퓨터 머리에 입력하는 독특한 방식은 ‘=’ 기호를 쓰고 주로 ‘변수 = 자료’ 형태를 취한다 일단 컴퓨터 메모리에 자료를 입력하면 그 자료는 ‘자료’라 부르지 않고 파이썬에선 ‘객체(Object)’라 칭한다. 변수란 컴퓨터 메모리 어딘가에 존재하는 객체가 어디에 있는지를 알려주는 주소 개념이다. 타 프로그래밍 언어인 C나 Java에선 자료형(Data type)이 무엇인지 친절히 알려줘야한다. 반면, 파이썬은 자료를 스스로 살펴보고 자료형이 무엇인지 판단한다. 따라사 그 과정이 필요 없다. 변수를 만들 때는 반드시 ‘=’(assignment) 기호를 사용한다. 예 : a = [1,2,3] 이면, [1,2,3] 값을 가지는 리스트 자료형(객체)은 메모리에 자동생성되고 변수 a는 리스트가 저장된 메모리 주소를 가리킨다.
1 2
a = [1,2,3] id(a) # id() : 변수가 가리키고 있는 객체의 주고 값을 돌려주는 함수
2456107858688
1 2 3 4
# 여러 변수 한번에 만들기 a, b = 1, 2 print(a) print(b)
1
2
1 2 3 4
# null 변수 만들기 a = None print(a) type(a)
None
NoneType
1 2 3 4 5 6
# 변수에 변수를 할당할 경우 b = a ## 주소값 공유 print(a) print(b) print(id(a)) print(id(b))
None
None
140715255699584
140715255699584
1 2
# a와 b가 가리키는 객체가 동일한지 묻는 방법 (is) a is b
True
1 2 3 4 5
# * 주의 * a[1] = 4 print(a) print(b) ## 주소값 공유란, 자료를 복사하는 것이 아니라 메모리 주소를 서로 공유한다는 것.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-72-a5aa4d30ec01> in <module>
1 # * 주의 *
----> 2 a[1] = 4
3 print(a)
4 print(b)
5 ## 주소값 공유란, 자료를 복사하는 것이 아니라 메모리 주소를 서로 공유한다는 것.
TypeError: 'NoneType' object does not support item assignment
1 2 3 4 5 6 7 8 9
# [:] 사용
a = [1,2,3] b = a[:] a[1] = 4 print(a) print(b) ## [:]는 리스트 전체를 가리키는 방법이기에 자료를 복사하는 경우다. a is b
[1, 4, 3]
[1, 2, 3]
False
1 2 3 4
#1 자연수 a 홀수 짝수 판별 a = 13 b = a%2 print(b) # print 값이 0일 경우 짝수, 1일 경우 홀수
1
1 2 3
#2 주민등록번호 13자리를 생년월일(YYMMDD)과 그 외 숫자로 분류 a = "0101011234567" print(a[:6],"-",a[6:]) ## a[:6] : 0 =< print < 6 , a[6:] : 6 =< print
010101 - 1234567
1 2 3 4 5
#3 [1,3,5,4,2] 리스트를 [5,4,3,2,1]로 변경 ## 오름차순 내림차순 a = [1,3,5,4,2] a.sort() a.reverse() print(a)