문자열 연산
'NH' + 3 불가
3 + 'NH' 불가
'NH' + str(7) 가능
의미 문자 = 메타 문자 = 특수 문자
- URL에서 파라미터의 시작을 나타낼 때 → ?
- 이름과 값을 구분할 때 → =
- 파라미터와 파라미터를 구분할 때 → &
http://www.example.com/test.do?name=hong&age=24&...
- SQL문에서 홑따옴표는 문자열 데이터를 나타낼 때 사용
select * from members where name = 'hong'
의미 문자에서 의미를 제거하고 문자 그 자체만 사용할(남길) 경우 → 이스케이프
- 웹 서버로 전달하는 내용이 vendName이라는 파라미터의 값으로 Bandi & Luice 값을 전달해야 하는 경우
http://www.example.com/test.do?vendName=Bandi & Luice
위 처럼 보낼 시 Bandi 까지만 인식함
- 회원 정보 중에서 이름이 "John's Junior"을 조회할 경우
select * from members where name = 'John's Junior'
위 처럼 보낼 시 'John'까지만 문자열로 인식하여 Syntax Error가 발생
방법1. 이스케이프를 의미하는 의미 문자를 사용 → \ (역슬래쉬)
select * from members where name = 'John\'s Junior'
방법2. 해당 기능에서 제공하는 일정 규칙에 따라서 문자열을 변경 (데이터를 변형)
인코딩/디코딩
URL 인코딩 & → %26
http://www.example.com/test.do?vendName=Bandi%20%26%20Luice
select * from members where name = 'John''s Junior'
정해진 규칙에 따라 변형
개행 문자
ASCII 코드의 약어 ASCII 코드의 번호 프로그램에서 특수기호
CR(Carriage Return) 0D \r : 커서를 처음으로 이동
LF(Line Feed) 0A \n : 커서를 다음 줄로 이동
booltype
공백,0,None → none
단락 평가
평가를 멈출만한 충분한 정보를 얻으면 아직 평가하지 않은 피연산자가 있어도 바로 멈춤
문자열 비교
ASCII코드 숫자로 비교.
빈 문자열은 항상 모든 문자열의 부분 문자열
( input < 3 ) or ( 100 / input )
( #1 ) | ( #2 ) => #3
( #1 ) || ( #1이 true 이면 생략, 그렇지 않으면 #2 ) => #3(#1이 true이면 true를 반환)
( #1 ) & ( #2 ) => #3
( #1 ) && ( #1이 false 이면 생략, 그렇지 않으면 #2 ) => #3(#1이 false이면 false를 반환)
모듈
처음 import하면 내용이 출력됨
내용 바뀐 모듈을 다시 import하려면
import importlib
importlib.reload(모듈명)을 해주어야한다.
__name__변수
#echo.py
print("__name__ is", __name__)
#echo.py를 실행하면 __name__ 변수에 "__main__"이 값으로 할당
__name__ is __main__
#echo 모듈을 임포트 → __name__ 변수에 모듈명(echo)이 값으로 할당
__name__ is echo
#어떤 모듈에서 호출했는지 알 수 있다.
print("After import, __name__ is", __name__, "and echo.__name__is", echo.__name__) After import, __name__is __main__ and echo.__name__is echo
#임포트 할 때 실행할 코드를 지정.
if __name__ == "__main__":
print("main program.")
else:
print("Another module is importing me")
메서드
밑줄 두개로 시작하고 끝나는 메서드는 파이썬에서 특수하게 간주되며, 특정 문법에 의해서 자동으로 호출
주의
3.__add__(5) 모듈 호출하는것인지 특수 메서드인지 인식불가
3 .__add__(5) 한칸 띄어서 해결
format 출력형식
>>> for noble in nobles:
... print(noble, 'is noble.')
... print('{} is noble.'.format(noble))
... print(f '{noble} is noble.' )
... print('%s is noble.' %noble)
리스트
빈 리스트 참조하면 오류발생!
list[i:j] 인덱스 i부터 인덱스j전까지
[:] 전부다
에일리어싱 : 두 변수의 메모리 주소가 같음
list.copy()메서드는 list객체를 반환(메모리 주소는 다름)
>>> a = [ 0, 1, 2 ]
>>> b = a.copy() ⇐ a 리스트와 동일한 내용을 가지는 (새) 리스트를 반환
>>> a
[0, 1, 2]
>>> b
[0, 1, 2]
>>> a[2] = 9 ⇐ a 리스트의 값을 변경해도
>>> a
[0, 1, 9]
>>> b ⇐ b 리스트에 영향을 미치지 않음
[0, 1, 2]
>>> id(a) ⇐ a와 b가 다른 주소를 가지고 있는 것을 확인할 수 있음
1845602192256
>>> id(b)
1845602101504
b = a 와의 차이점
>>> a = [ 1, 2, 3 ]
>>> b = a ⇐ a와 b가 동일한 리스트의 주소를 공유
>>> id(a)
1845602215360
>>> id(b)
1845602215360
>>> a[2] = 0 ⇐ a 리스트의 값을 변경하면
>>> a
[1, 2, 0]
>>> b ⇐ b 리스트에도 반영
[1, 2, 0]
슬라이싱하면 새로운 리스트가 만들어짐
>>> a = [ 1, 2, 3 ]
>>> b = a[:]
>>> id(a)
1845602101504
>>> id(b)
1845602192256
리스트 메서드 대부분이 None을 반환
루프로 코드 반복
문자열 내 문자 처리
for <variable> in <str>:
문자 하나마다 0,1,2....에 할당
범위 순회
곱셈표 출력
무한루프 차이
>>> time, population, growth_rate = 0, 1000, 0.21
>>> while population != 2000:
... population = population + growth_rate * population
... print(round(population))
~~~~~~~~~~~~~~~~~ ⇒ 정수형 숫자를 반환
실행결과 오류가 나옴
>>> time, population, growth_rate = 0, 1000, 0.21
>>> while population != 2000:
... population = population + growth_rate * population
... print(round(population, 2))
~~~~~~~~~~~~~~~~~~~~ ⇒ 실수형 숫자를 반환
실행결과 무한루프(inf) 나옴
파일 읽기와 쓰기
- with open
with open('echo.py', 'r') as file:
content = file.read()
0 / 1
print(content)
중간에 0 / 1같은 오류가 있더라도
with open구문을 쓰면 자동으로 close해줌
파일 읽기
- 읽으면서 커서는 움직이기 때문에 last(끝)까지 커서가 움직였다면 파일을 다시 열어야 한다.
- 특정 문자 반환 > read()
- 한줄마다 문자열 형태로 반환 > readline()
- 전체줄을 문자열 형태로 반환 > readlines()
strip() 문자열에 포함된 공백문자 (탭, 개행문자, 스페이스 등)를 제거
나의 파일 읽기
인터넷상의 파일 읽기
파일 쓰기
- 쓰기 모드 (write) ⇒ 동일한 파일이 없으면 새로 생성, 있으면 기존 파일을 삭제 후 새로 생성
- 덧붙이기 모드 (append) ⇒ 기존 파일이 있으면 파일 내용을 추가
with open('./test.txt', 'w') as output_file:
output_file.write('new message')
⇒ test.txt 파일이 생성된 것을 확인
with open('./test.txt', 'w') as output_file:
output_file.write('new message 2')
⇒ test.txt 파일 내용이 새 내용으로 변경된 것을 확인
with open('./test2.txt', 'a') as output_file:
output_file.write('new message')
⇒ test2.txt 파일이 생성된 것을 확인
with open('./test2.txt', 'a') as output_file:
output_file.write('new message 2')
⇒ test2.txt 파일의 기존 내용에 새 내용이 추가된 것을 확인
예제
input_number.txt 파일을 읽어서 output_number.txt 파일을 생성
input_number.txt 파일에는 2개의 실수로 구성된 데이터가 저장
ouput_number.txt 파일에는 2개의 실수와 그 합을 저장