본문 바로가기
SK Shieldus Rookies 19th/인프라 활용을 위한 파이썬

[SK shieldus Rookies 19기][Python] - 자료형 1

by En_Geon 2024. 3. 10.

1. 자료형이란?

프로그래밍을 할 때 쓰이는 숫자, 문자열 등과 갈이 자료 형태로 사용하는 모든 것을 뜻함
프로그램의 기본이자 핵심 단위

 

 

'어떤 프로그래밍 언어이든 그 언어의 자료형을알고 이해할 수 있다면 이미 그 언어의 절반을 터득한 것이나 다름없다'라는 말이 있다. 자료형을 충분히 이해하지 않고 프로그래밍을 시작하려는 것은 기초 공사가 마무리되지 않은 상태에서 빌딩을 세우는 것과 같다.

 

1) 변수

자료형의 값을 저장하는 공간
변수 이름 = 변수에 저장할 값

 

 

변수에 대해서는 뒤에서 더 자세히 설명한다. 여기서는 자료형을 설명하기 위한 간단한 설명이다.

 

a = 1

 

위 코드에서 a를 변수라고 한다. 변수를 만들 때는 할당 연산자(=)를 사용한다.

 

2. 숫자형

숫자 형태로 이루어진 자료형

 

1) 정수형

정수형(Integer) 말 그대로 정수를 뜻하는 자료형

 

a = 123            # 양의 정수 123을 a에 저장 
a = -178        # 음의 정수 -178을 a에 저장
a = 0            # 숫자 0을 a에 저장

 

2) 실수형

실수형(Floating-point)은 소수점이 포함된 숫자

 

a = 1.2            # 1.2를 a에 저장
a = -3.45

 

3) 8진수, 16진수

8진수(Octal)를 만들기 위해서는 숫자가 (숫자 0 + 알파벳 소문자 o 또는 대문자 O)로 시작

 

a = 0o177
print(a)

 

위 a에 저장된 8진수의 값 1 x 82 + 7 x 8 + 7 = 127

 

 

16진수(Hexadecimal)를 만들기 위해서는 0x로 시작

 

a = 0xABC
print(a)

 

위 a에 저장된 16진수의 10 x 162 + 11 X 16 + 12 = 2748

 

4) 연산자

 

(1) 산술 연산자

파이썬에서도 사칙 연사에 사용하는 산술 연산자를 사용

 

a = 3
b = 4
print(a + b)
print(a - b)
print(a * b)
print(a / b)

 

  • 출력  :  a + b = 7, a - b = -1, a * b = 12, a / b = 0.75

 

(2) ** 연산자

제곱을 나타내는 연산자 x ** y처럼 사용했을 때 x의 y제곱(xy) 값을 리턴

 

a = 3
b = 4
print(a ** b)

 

  • 출력  :  81
    34가 되어 81이 된다.

 

(3) % 연산자

나눗셈의 나머지 값을 려턴

 

a = 7
b = 3
print(a % b)
print(b % a)

 

  • 출력  :  7 % 3 = 1, 3 % 7 = 3

 

(4) // 연산자

나눗셈 수 몫을 리턴

 

a = 7
b = 4
print(a / b)
print(a // b)

 

  • 출력  :  7 / 4 = 1.75, 7 // 4 = 1

이때, 7 / 4는 위에서 말했던 산술 연산자의 나눗셈 연산으로 1.75가 나올 것을 예상할 수 있다.
반면, 7 // 4는 값이 다른 것을 볼 수 있다. 이유는 나눗셈의 몫을 리턴하기 때문이다.

 

3. 문자열

문자열(String)은 문자, 단어 등으로 구성된 문자들의 집합

 

a = """Life is too short, You need Python"""
b = """
Life is
too short, you need
Python
"""
c = '''가나다라마바사아'''
d = '''가나다라
마바사아
'''
e= "a"
f = '123'

 

위 예문들은 모두 문자열이다. d에는 123이 들어 있는데 왜 문자열인가 하는 생각이 들 수 있는데 따옴표로 묶여 있으면 문자열이 된다.
여기서 방법을 다르게 적었다. 문자열을 쓸 수 있는 모든 방법이다.

 

  • a = 큰따옴표 3개를 연속으로 사용
  • b = 큰따옴표 3개를 연속으로 사용하면 여러 줄에 걸쳐 사용 가능, 출력도 여러 줄에 나뉘어서 출력
  • c = 작은따옴표 3가를 연속으로 사용
  • d = 작은따옴표 3개를 연속으로 사용하면 여러 줄에 걸쳐 사용 가능, 출력도 여러 줄에 나뉘어서 출력
  • e = 큰따옴표로 묶음
  • f = 작은따옴표로 묶음

 

1) 문자열에 큰따옴표, 작은따옴표 포함

문자열 안에 큰따옴표, 작은따옴표를 사용해야 할 경우 사용 방법

 

It's is an apple이라는 문자열을 fruit 변수에 저장하려고 할 때 문자열 중에 작은따옴표가 포함되어 있어 문제가 있다. 문자열에 작은따옴표가 포함되어 있을 때는 큰따옴표로 묶어 주면 된다. 큰따옴표가 있다면 반대로 해주면 된다.

 

fruit = "It's is an apple"
talk = '"내일 어디 갈까?"'

 

문자열에 각 따옴표가 포함되어 있는데 이 방법을 사용하지 않으면 구문 오류인 SyntaxError가 발생한다.

 

(1) \(백슬래시) 사용

fruit = 'It\'s is an apple'
talk = "\"내일 어디 갈까?\""

 

\을 사용하면 뒤에 나오는 각 따옴표가 문자열 시작의 따옴표가 아니라 따옴표 자체를 뜻한다.

백슬래시는 이스케이프를 의미하는 문자다.

 

(2) 이스케이프 코드

프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 문자 조합 출력물을 보기 좋게 정렬하는 용도로 사용

 

코드 설명
\n 문자열 안에서 줄을 바꿀 때 사용
\t 문자열 사이에 탭 간격을 줄 때 사용
\\ \를 그대로 표현할 때 사용
\' 작은따옴표를 그대로 표현할 때 사용
\" 큰따옴표를 그대로 표현할 때 사용
\r 캐러지 리턴(줄 바꿈 문자, 커서를 현재 줄의 가장 앞으로 이동)
\f 폼 피드(줄 바꿈 문자, 커서를 현재 줄의 다음 줄로 이동)
\a 벨 소리(출력할 때  PC 스피커에서 '삑' 소리가 난다)
\b 백 스페이스
\000 널 문자

 

  • 활용 반도가 높은 것은 \n, \t, \\, ', " 다.

 

2) 연산

파이썬에서는 문자열을 더하거나 곱할 수 있다.

 

(1) 덧셈

a = 'I like'
b = ' an apple'
print(a + b)

 

  • 출력  :  I like an apple

문자열과 문자열을 더하면 결합하는 것이다.

 

a = 3
b = 'apple'
print(a + b)

 

문자열 + 숫자 또는 숫자 + 문자열은 자료형의 타입이 맞지 않아서 류가 난다.

이 오류를 해결하기 위해서는 숫자 3을 문자열로 형변환을 해야 한다.
str() 함수를 사용하면 형변환을 해서 해결할 수 있다.
str() 함수는 매개변수로 설정된 숫자를 문자열로 변환해 주는 함수다.

a = 3
b = ' apple'
print(str(a) + b)

 

  • 출력  :  3 apple

반대로 문자열을 숫자로 변환해서 연산하는 방법이 있다.

 

a = 3
b = '10'
print(a + int(b))

 

  • 출력  :  13

이때 출력되는 결과값은 숫자형 타입을 가지고 있다.
int() 함수도 str() 함수와 같이 매개변수로 설정된 숫자로 된 문자열을 숫자로 변환해 주는 함수다.
int() 함수는 정수형 타입으로 바꾸는 것이기 때문에 int(123.453)는 타입 변환 오류가 난다.

 

(2) 곱셈

a = 'I like'
print(a * 2)

 

  • 출력  :  I likeI like

출력값을 보면 문자열이 두 번 나오는 것을 볼 수 있다. 연산 그대로 문자열을 곱한 수만큼 반복하는 것이다.

 

 

3) 길이

문자열 길이를 구할 때는 len() 항수를 사용

 

a = 'You need python'
print(lan(a))

 

  • 출력  :  15
  • 띄어쓰기 포함

 

4) 인덱싱, 슬라이싱

  • 인덱싱(Indexing)은 무엇인가를 가리킨다는 의미
  • 슬라이싱(Slicing)은 무어인가를 잘라 낸다는 의미

 

 

(1) 인덱싱

a = 'I like an apple'

 

변수 a에 저장한 문자열을 문자마다 번호를 붙여볼 수 있다.

I   l i k e   a n   a p p l e
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

 

  • 숫자를 붙일 때 0부터 붙인다는 것을 주의

 

a = 'I like an apple'
print(a[5])

 

  • 출력  :  e

a[5]는 a라는 문자열의 여섯 번째 문자 e를 뜻한다. 문자열의 숫자를 0번부터 붙이기 때문이다.
a[번호]는 문자열 안의 특정한 값을 뽑아 내는 역할을 한다. 이러한 작업을 인덱싱이라고 한다.

인덱싱을 할 때 a[2], a[3]으로 하는데 위 표를 보면 -숫자를 적어 둔 것을 볼 수 있다.
-숫자는 a[-1]을 했을 때 마지막 글자인 'e'를 반환한다. 문자열을 뒤에서부터 읽기 위해 붙이는 것이다.
이때 -0과 0은 똑같은 것이기 때문에 제일 앞에 있는 문자를 가리킨다.

 

(2) 슬라이싱

인덱싱은 번호에 해당하는 한 자리의 문자를 반환하지만 슬라이싱은 범위를 정해 문자열을 반환받는다.

 

a = 'I like an apple'
print(a[0:5])

 

  • 출력  :  I lik
  • 수식  :  0<= a < 5

 

a = 'I like an apple'
print(a[0:4])

 

  • 출력  :  I li
  • 수식  :  0<= a < 4

위 두 예제를 보면 0부터 4까지, 0부터 5까지 반환받아야 하는데 그렇지 않다.
이유는 슬라이싱 기법으로 a[시작 번호 : 끝 번호]를 지정할 때 끝 번호에 해당하는 문자는 포함하지 않기 때문이다.

 

  • a[시작 번호 : 끝 번호]에서 끝 번호를 생략하면 시작 번호부터 문자열의 끝까지 반환한다.

 

a = 'I like an apple'
print(a[5:])

 

 

  • 출력  :  e an apple

 

  • a[시작 번호 : 끝 번호]에서 시작 번호를 생략하면 처음 번호부터 문자열의 끝까지 반환한다.

 

 

a = 'I like an apple'
print(a[:9])

 

 

  • 출력  :  I like an

 

  • a[시작 번호 : 끝 번호]에서 시작 번호화 끝 번호를 생략하면 문자열의 처음부터 끝까지 반환한다.
a = 'I like an apple'
print(a[:])

 

  • 출력  :  I like an apple

 

슬라이싱으로 문자열을 나눌 수 있다.

 

a = "20240101Sunny"
year = a[:4]
day = a[4:8]
weather = a[8:]
print(year)
print(day)
print(weather)

 

  • 출력
    • 2024
    • 0101
    • Sunny

 

a는 하나의 문자열이지만 슬라이싱을 사용하면 문자열을 나눠서 사용할 수 있다.

 

 

5) 포매팅

문자열 안의 특정한 값을 바꿔야 할 경우가 일을 때 문자열 안에 어떤 값을 삽입하는 방법

 

(1) 숫자 바로 대입

문자열 안에 정수 3을 삽입하는 방법

 

a = "I have %d dogs" % 3
print(a)

 

  • 출력  :  I have 3 dogs.

숫자를 넣고 싶은 자리에 %d 문자를 넣고 숫자 3은 가장 뒤에 % 문자 다음에 쓴다.

 

 

(2) 문자열 바로 대입

문자열 안에 문자열 넣은 방법

 

a = "I have %s dogs" % three
print(a)

 

  • 출력  :  I have three dogs.

문자열을 넣고 싶다면 %s를 사용한다.

 

(3) 변수로 대입

number = 3
a = "I have %d dogs" % number
print(a)

 

  • 출력  :  I have 3 dogs.

 

 

dogs = 3
cats = 'three'
a = "I have %d dogs and %s cats." % (number, three) 
print(a)

 

  • 출력  :  I have 3 dogs and three cats.

두 개 이상의 값을 넣으려면 마지막 % 다음에 괄호 안에 쉼표로 구분하여 각각의 값을 넣어 준다.

 

(4) 문자열 포맷 코드

코드 설명
%s 문자열(string)
%c 문자 1개(character)
%d 정수(integer)
%f 부동소수(floating-point)
%o 8진수
%x 16진수
%% Literal %(문자 % 자체)

 

a = "I have %s dogs" % 3
print(a)

 

  • 출력  :  I have 3 dogs.

 

a = "파이는 %s다." % 3.14
print(a)

 

  • 출력  :  파이는 3.14다.

 

문자열 안에 정수를 사용할 때는 %d, 소수를 사용할 때는 %f를 사용해야 한다. 하지만 위 예제와 같이 %s를 사용해도 오류없이 잘 된다. 그 이유는 %s는 % 뒤에 있는 숫자, 소수를 문자열로 바꾸어 대입하기 때문이다.

 

(5) 포맷 코드와 숫자 함께 사용

 

a = "%10s" % "hi"
print(a)

 

  • 출력  :  '        hi'
  • 10%s는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽 정렬하고 그 앞의 나머지는 공백으로 남겨 두라는 의미 즉, hi 앞에 8개의 공백이 있음

 

a = "%-10sjin" % "hi"
print(a)

 

  • 출력  :  'hi        jin'
  • -10%s는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 왼쪽 정렬하고 그 앞의 나머지는 공백으로 남겨 두라는 의미 즉, hi 뒤에 8개의 공백 후 jin이 출력

 

a = "%0.4f" % 3.141592
print(a)

 

  • 출력  :  3.1416
  • 소수점 네 번째 자리까지만 나타내고 싶은 경우 사용

 

(6) format 함수를 사용한 포매팅

 

a = "I have {0} dogs".format(3)
print(a)

 

  • 출력  :  I have 3 dogs.
  • 문자열의 {0} 부분이 3으로 바뀜

문자열 대입, 변수 대입, 2개 이상 값 대입 등은 위에서 봤던 방법과 동일하다.

 

 

a = "{0:<10}"  "hi"
print(a)

 

  • 출력  :  'hi        '
  • 왼쪽 정렬, 문자열 총 자릿수 10

 

a = "{0:>10}"  "hi"
print(a)

 

  • 출력  :  '        hi'
  • 오른쪽 정렬, 문자열 총 자릿수 10

 

a = "{0:^10}"  "hi"
print(a)

 

  • 출력  :  '    hi    '
  • 가운데 정렬, 문자열 총 자릿수 10

 

a = "{0:=^10}"  "hi"
print(a)

 

  • 출력  :  '====hi===='
  • 가운데 정렬, 공백 =로 채우기, 문자열 총 자릿수 10

 

a = "{0:!<10}"  "hi"
print(a)

 

  • 출력  :  'hi!!!!!!!!'
  • 왼쪽 정렬, 공백 !로 채우기, 문자열 총 자릿수 10

 

(7) f 문자열 포매팅

파이썬 3.6 버전부터 f 문자열 포매팅 기능 제공
문자열 앞에 f 접두사를 붙이면 f 문자열 포매팅 가능 사용 가능

 

 

name = '고길동'
age = 25
print(f"이름은 {name}, 나이는 {age}입니다.")

 

  • 출력  :  이름은 고길동, 나이는 25입니다.
  • 변숫값을 생성한 수 그 값을 참조할 수 있다.

 

name = '고길동'
age = 25
print(f"이름은 {name}, 나이는 {age} 입니다. 내년에 {age+1} 됩니다.")

 

  • 출력  :  이름은 고길동, 나이는 25 입니다. 내년에 26 됩니다.
  • f 문자열 포매팅은 표현식을 지원하기 때문에 중괄호 안의 변수를 계산식과 함께 사용할 수 있다.

 

(8) 관련 함수

함수를 다른 말로 '문자열 내장 함수'라고 한다. 내장 함수를 사용하려면 문자열 변수 이름 뒤에 '.'을 붙인 후 함수 이름을 써 주면 된다.

 

  • count 함수로 문자열 중 문자 b의 개수를 리턴

 

a = "lbigdbfjeowblk" print(a.count('b'))

 

  • 출력  :  3

 

  • find 함수로 문자열이 처음 나온 위치 리턴
a = "lbigdbfjeowblk" print(a.find('b'))

 

  • 출력  :  1

 

  • indxe 함수로 find와 마찬가지로, 찾는 문자열이 처음 나온 위치 리턴
  • 단, 찾는 문자열이 없으면 오류 발생
a = "lbigdbfjeowblk" print(a.index('b'))

 

  • 출력  :  1

 

  • upper() - 소문자를 대문자로 바꾸기
  • lower() - 대문자를 소문자로 바꾸기
  • lstrip() - 왼쪽 공백 지우기
  • rstrip() - 오른쪽 공백 지우기
  • strip() - 양쪽 공백 지우기
  • replace() - 문자열 바꾸기 replace(바뀔_문자열, 바꿀 문자열)
  • split() - 문자열 나누기 - 공백 또는 특정 문자열을 구분자로 해서 문자열 분리, 분리된 문자열은 리스트로 반환됨

 

  • print() - 사람이 읽을 수 있는 형태로 문자열 출력

 

print('a', 'b', 'c', sep = '|', end = "...")

 

  • 출력  :  a|b|c...
  • sep는 주어진 옵션(|)으로 출력할 문자들을 어떻게 구분할지를 정하는 것이다. 기본 설정은 공백
  • end는 주이진 옵션(...)으로 바꾸면 마지막에 ...이 들어가게 된다. 이때 ...은 단순 문자로 들어간다. 기본 설정은 \n 개행문자

 

  • input() - 키보드에서 한 즐의 텍스트를 읽어들임

 

a = input()
print(a)

 

 

input 함수로 a에 저장하게 되면 사용자에게 키보드로 입력을 받을 수 있다. 입력받은 데이터의 타입은 str타입이다.

댓글