1. 수치형
1.1 정수형
파이썬의 변수는 타입을 정해 선언하지 않지만 저장되는 값에는 여러 가지 종류가 있다. 값의 형태에 따라 표현하는 방식이나 범위가 다르다. 값의 이런 특성을 타입이라고 한다. 문자열과 수치값의 모양이 다르고 수치형도 소수점 이하를 표현할 수 있는가에 따라 정수와 실수로 나누어진다.
ex) 간단한 정수형
print(123)
print(100000)
print(-99)
ex) 파이썬은 가능한 큰 수 표현
print(2**100)
2**100의 경우 2의 100승을 나타낸다.
ex) 다양한 진법들
진법 |
접두 |
사용 가능한 숫자 |
예 |
16진법(hexadecimal) |
0x |
0~9, a~f |
0x2f |
8진법(octal) |
0o |
0~7 |
0o17 |
2진법(binary) |
0b |
0, 1 |
0b1101 |
접두나 숫자 표시에 사용되는 알파벳은 대소문자를 가리지 않는다. 0x1a 라고 써도 되고 0X1A 라 써도 된다.
a = 0x2f b = 0o17 c = 0b1101 print("0x2f =",a) print("0o17 =",b) print("0b1101 =",c
a = 0x2f
b = 0o17
c = 0b1101
print("0x2f =",a)
print("0o17 =",b)
print("0b1101 =",c)
print 명령은 정수를 어떤 진법으로 표현하든 항상 10진수로 출력한다. 10 진수 이외의 진법으로 정수를 출력하려면 hex, oct, bin 함수를 사용한다. 이 함수들은 10 진수를 접두까지 붙여 문자열 형태로 변환한다. 변환한 결과는 문자열이므로 계산에는 사용할 수 없고 출력만 할 수 있다.
print(hex(47))
print(oct(15))
print(bin(13))
1.2 실수형
실수형은 소수점 이하의 정밀한 값을 표현하며 부호가 있어 음수도 표현할 수 있다. 평균이나 무게처럼 세밀한 값을 저장하기에 적당하다. 다음이 실수의 예이다.
가수E지수
영문자 E 또는 e를 가운데 두고 왼쪽으로 가수를 쓰고 오른쪽에 지수를 쓴다. 가수는 값의 모양을 나타내고 지수는 값의 크기를 나타낸다. 9조 4600억은 9.46의 *10의 12승 이므로 다음과 같이 표기한다.
print(9.46e12)
1.3 복소수형
복소수는 제곱해서 음수가 되는 수 이다. 실제로 존재하지 않는 허수여서 실생활에서 쓸 일은 없지만 과학 분야에서는 중간 과정 계산을 위해 종종 사용된다. 표기는 방식은 다음과 같다.
실수부 + 허수부j
a = 1 + 2j
b = 3 + 4j
print(a+b)
복소수임을 나타내는 접미 j 는 대소문자를 가리지 않지만 보통 소문자 j 를 쓴다. 복소수를 다루는 여러가지 메서드와 함수가 있는데 복소수.real은 실수부, 복소수.image는 허수부를 리턴하며 복소수.conjugate는 켤레 복소수를 구한다. abs함수는 복소수의 절대값을 구한다.
2. 문자열
2.1 문자열
문자열(string)은 일련의 문자를 따옴표로 감싸 나열해 놓은 것이다. 수치형이 숫자라면 문자열은 "말" 또는 "문장"이다. 따옴표 안에 어떤 글자든 마음대로 적으면 된다. 파이썬은 세계의 모든 문자를 포함하는 유니코드를 지원하여 영문, 기호, 숫자는 물론이고 한글이나 한자도 포함할 수 있다. 길이의 제한도 없어 단어 뿐만 아니라 긴 문장을 써 넣을 수 도 있다.
ex) welcome to "HELL" world 출력해보기
print("welcome to "HELL" world")
문자열을 감싸는 기호인 따옴표는 따옴표 안에 적을 수 없다. 위처럼 에러가 나게 된다. "welcome to "에서 문자열은 이미 끝나버렸으므로 뒤쪽은 에러 처리된다. 꼭 큰 따옴표를 포함시키려면 작은 따옴표로 감싼다.
print('welcome to "HELL" world')
반대로 작은 따옴표를 포함시키고 싶다면 "welcome to 'HELL' world" 라고 적으면 된다.
프로그래밍을 할 때는 암묵적으로 짧은 단어는 작은 따옴표를, 긴 문장은 큰 따옴표를 쓰는 경향이 있다.
2.2 확장열
문자열 안에 큰 따옴표와 작은 따옴표가 동시에 있을 경우에는 어떤 따옴표로 감싸든 문제가 발생한다. 따옴표 외에 개행이나 탭 등의 문자열 안에 담기 힘든 문자가 있다 이런 특수한 문자는 \ 뒤에 특별한 기호로 표기하는데 이를 확장열(Escape Sequence)라고 한다.
확장열 |
설명 |
\n |
개행 |
\t |
탭 |
\" |
큰 따옴표 |
\' |
작은 따옴표 |
\\ |
\문자 |
따라서 "welcome to "HELL" world" 같은 경우 다음과 같이 표시 가능하다.
print("welcome to \"HELL\" world")
백준 문제중에 위를 활용하는 문제를 소개하자면,
https://www.acmicpc.net/problem/10172
10172번: 개
10172번 제출 맞은 사람 숏코딩 풀이 풀이 작성 풀이 요청 재채점/수정 채점 현황 강의 개 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 107356 38372 35011 38.774% 문제 아래 예제와 같이 개를 출력하시오. 입력 없음. 출력 개를 출력한다. 예제 입력 1 복사 예제 출력 1 복사 |\_/| |q p| /} ( 0 )"""\ |"^"` | ||_/=\\__| 출처 High School > PLU High School Programming Contest > PLU 2014 -...
www.acmicpc.net
print("|\_/|")
print("|q p| /}")
print("( 0 )\"\"\"\\")
print("|\"^\"` |")
print("||_/=\\\\__|")
ex) "old/new" 표시해보기
print("old\new")
\ 다음의 new 첫 글자인 n이 확장열로 해석되어 이 자리에서 개행되며 \ 문자와 n은 출력되지 않는다. \을 쓰고 싶다면 \\과 같이 써야한다. 그렇지 않으면 다음 글자가 무엇인가에 따라 엉뚱하게 해석되는 위험이 있다.
print("old\\new")
ex) "c:\temp\new.txt" 출력하기
print("c:\temp\new.txt")
문자열 중간에 \t 와 \n 가 확장열로 인식되어 발생한 문제이다. 경로를 그대로 출력하려면 모든 \ 앞에 \를 \\로 두번써야하는데 이는 무척 성가신 일이다. 따라서 이럴 때는 문자열 앞에 r 접두를 붙인다.
print(r"c:\temp\new.txt")
r 접두가 붙어있으면 문자열 내의 확장열을 적용하지 않고 있는 그대로(Raw) 기억한다. 파일의 경로 문자열을 표기할 때는 이 방법이 편리하다.
2.3 긴문자열
긴 문자열의 경우 다음과 같이 두 행에 나누어 쓸수없다.
a = "가끔 씩 문자의 길이가 너무 길고
복잡하여 한줄에 쓸 수 없는 경우가 많아
이런식으로 쓰게된다."
==>> error 발생!
따옴표를 열었으면 그 줄에서 닫아야 하며 중간에 개행되면 안된다. 이런 긴 문자열을 정의할 때는 따옴표 세 개를 연거푸 쓴다. """로 시작한 문자열은 중간에 개행되더라도 다음 """를 만날 때까지 전체를 하나의 문자열로 정의한다. 작은 따옴표인 '''를 써도 상관없다.
a = "가끔 씩 문자의 길이가 너무 길고 복잡하여 한줄에 쓸 수 없는 경우가 많아 이런식으로 쓰게된다."
b = """가끔 씩 문자의 길이가 너무 길고
복잡하여 한줄에 쓸 수 없는 경우가 많아
이런식으로 쓰게된다."""
print(a)
print()
print(b)
개행 코드까지 문자열의 일부로 포함되기 때문에 \n을 쓰지 않아도 상관없으며 코드상으로 개행한 곳에서 실제 개행이 발생하여 있는 그대로 적어 넣으면 된다. 심지어 들여쓰기 까지도 문자열의 일부로 인식되므로 2행 이후에 들여쓰기를 해서는 안 된다.
삼겹 따옴표를 쓰는 대신 행 계속 문자인 \를 사용하는 방법도 있다. 행 끝에 \를 붙이면 이 줄이 아직 끝나지 않고 다음 줄에 계속 이어진다는 뜻이며 다음 줄까지 하나로 합친다. 여는 따옴표 하나만 쓰고 행 끝에 \를 붙이면 이후 줄이 하나의 문자열로 정의된다. 닫는 따옴표는 제일 마지막 줄에 쓴다.
a = "가끔 씩 문자의 길이가 너무 길고 \
복잡하여 한줄에 쓸 수 없는 경우가 많아 \
이런식으로 쓰게된다."
print(a)
(뒷 문장 생략....)
그리고 행 계속 문자는 행을 이어줄 뿐 개행 코드르 삽입하지는 않아 이어진 긴 문자열이 만들어진다. 개행하고 싶다면 원하는 곳에 \n확장열을 적는다. \는 문자열 정의 뿐만 아니라 코드에도 사용할 수 있다. 코드가 너무 길어진다 싶으면 행 끝에 \를 두고 다음 행에 식을 계속 쓰면 된다.
a = 2*3*\
4*5
print(a)
이때 계속되는 행 들여쓰기는 아무래도 상관없으며 공백이 더 들어갈 뿐 수식에는 영향을 미치지 않는다. 첫 열부터 코드를 작성해도 상관없지만 보통은 이어지는 줄임을 표시하기 위해 약간 안쪽으로 들여쓴다. 파이썬 문자열의 또 다른 특성은 인접한 문자열을 하나로 합친다는 점이다.
a = "seoul " "daegu " "busan "
b = ("seoul "
"daegu "
"busan ")
print(a)
print(b)
콤마로 구분하지 않고 짧은 문자열을 쭉 나열하면 하나로 합쳐진다, 중간에 공백은 얼마든지 들어가도 상관없으며 모두 무시된다. 그러나 개행 코드는 무시되지 않으며 다음 줄로 내려간 문자열은 합쳐지지 않는다. 여러 개의 문자열을 개행해서 긴 문자열로 만들고 싶다면 전체를 괄호로 감싸야 한다.
파이썬은 문자열 타임만 제공하며 다른 언어에 있는 문자형은 별도로 없다. 길이 1의 문자열로 문자형을 표현한다. 문자는 내부적으로 문자 코드로 저장되는데 ord 함수는 문자의 코드를 조사하고 chr 함수는 코드로부터 문자를 구한다.
print(ord('A'))
print(chr(65))
for i in range(ord('A'), ord('Z')+1):
print(chr(i), end='')
대문자 'A'의 문자 코드는 65이며 for문을 사용해 A부터Z 까지 출력을 해보았다.
3. 그 외의 타입
3.1 진위형
진위형은 참 또는 거짓 딱 두 가지 상태만을 표현하는 타입이다. 참일 때는 True 값을 가지고 거짓일 때는 False 값을 가진다. 참, 거짓을 나타내는 True 와 False의 첫 자가 대문자임을 유의한다. 변수의 값을 비교하는 연산자는 비교 결과를 진위형으로 리턴한다.
a = 1
print(a==1)
if a == 1:
print("a는 1입니다.")
3.2 컬렉션 소개
정수, 실수, 문자열 등의 단순 변수는 단 하나의 값만을 저장하는데 비해 컬렉션은 여러 개의 값을 모아서 저장한다. 값의 집합을 담는 통이라는 의미로 컨테이너라고도 부르며 다른 언어의 배열이나 구조체와 유사하다. 간단히 소개만하고 차후에 포스팅 하겠습니다.
컬렉션의 대표적인 예는 리스트이다. 리스트는 여러 개의 값을 하나의 변수에 순서대로 모아 놓은 것이며 [ ] 괄호 안에 콤마로 구분하여 나열한다. 개수에 상관없이 얼마든지 많은 값을 하나의 리스트에 저장할 수 있다.
fruits = ['사과','딸기','수박','멜론']
print(fruits)
fruits라는 이름의 리스트에 4개의 문자열을 저장했다. 정수나 실수를 모아 둘 수도 있다. 메모리상에는 요소가 순서대로 저장된다.
print 명령으로 리스트 변수를 출력하면 포함된 모든 값이 [ ] 괄호로 묶여 출력된다.
fruits = ['사과','딸기','수박','멜론']
for i in fruits:
print(i,"은/는 맛있다.",sep='')
튜플은 리스트와 거의 비슷하되 ( ) 괄호로 멤버를 나열하고 실행 중에 값을 변경할 수 없다는 점이 다르다. 리스트는 요소를 삽입, 삭제, 추가할 수 있는데 비해 튜플은 한번 정의한 값을 읽을 수만 있어 내부 구조가 단순하고 빠르다.
fruits = ('사과','딸기','수박','멜론')
for i in fruits:
print(i,"은/는 맛있다.",sep='')
이 외 사전(Dictionary), 집합 등의 컬렉션이 있는데 값을 저장하는 방식과 순서 유지 여부, 중복 허용 여부 등이 조금씩 다르다. 사전은 키와 값의 쌍을 저장하여 실시간 검색을 지원하며 집합은 요소의 모음을 관리하고 교집합, 합집합 등의 집합 연산을 지원한다.
감사합니다.
'🐍PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 루프(Loop)의 활용(구구단, 삼각형, 피라미드) (0) | 2020.02.16 |
---|---|
[PYTHON] 파이썬 조건문 (if 조건문, 논리연산자, 비교연산자, 블록구조, else문, elif문, 중첩문) (0) | 2020.02.16 |
[PYTHON] 파이썬 연산자(대입 연산자, 산술 연산자, 타입변환, 우선순위, 결합순서) (0) | 2020.02.16 |
[PYTHON] 파이썬 입출력(print, input, 구분자 sep, 끝문자 end) (0) | 2020.02.16 |
[PYTHON] 파이썬 반복문 (For, Range, While, Break, Continue) (0) | 2020.02.16 |