Programming/Pyhton

파이썬: 숫자, 변수, 문자열

JunsuKim 2022. 7. 20.
728x90

변수, 이름, 객체

파이썬에서는 모든 것(부울, 정수, 실수, 문자열, 데이터 구조, 함수, 프로그램)이 객체로 구현되어 있다.

즉, 파이썬은 다른 언어에는 결여된 언어 일관성과 유용한 기능을 제공한다.

 

객체는 데이터와 함께 무엇을 처리할 수 있는지 결정하는 부울 혹은 정수와 같은 타입이다.

객체의 타입이 int라면, 또 다른 int를 더할 수 있다는 것을 의미한다.

 

타입은 데이터 값이 변수인지, 상수인지 판단할 수 있다.

파이썬은 객체의 타입을 바꿀 수 없는 강타입이다.

 

프로그래밍 언어에서는 변수를 선언하여 사용할 수 있다.

파이썬에서 변수에 값을 할당할 때 =를 사용한다.

a = 7

변수는 단지 이름일 뿐이다. 

할당한다는 의미는 값을 복사하는 것이 아닌, 데이터가 담긴 객체에 그냥 이름을 붙이는 것이다.

ex)

  1. 이전과 같이 변수 이름 a에 7을 할당한다. -> 정수 7이 담긴 객체를 생성한다.
  2. a를 b에 할당한다. -> b 객체에도 7이 담긴다.
>>> a = 7
>>> b = a
>>> print(b)
7

파이썬에서 변수 혹은 리터럴 값의 타입을 알고 싶다면 type을 사용하면 된다.

>>> a = 7
>>> b = "abc"

>>> print(type(a))
<class 'int'>

>>> print(type(b))
<class 'str'>

>>> print(type(1.2))
<class 'float'>

숫자

파이썬은 정수와 부동소수점수를 지원하는 기능이 내장되어 있다.

이들은 다음 표에 있는 간단한 수학 연산자로 결합하여 계산할 수 있다.

정수

대화식 인터프리터에서 연속된 숫자는 리터럴(literal) 정수로 간주한다.

숫자 앞에 기호가 없거나, +123과 같은 수는 양수를 의미한다.

음수를 표현하려면 -기호를 숫자 앞에 붙인다.

우선순위

수학을 배울 때

>>> 2 + 3 * 4
14

이와 같은 식이 있다면, *를 먼저 하고 +를 한다는 우선순위가 있다.

대부분의 언어도 그렇고, 파이썬 또한 이러한 우선 순위를 가진다.

 

+를 먼저 하고 싶다면, 수학에서도 배우듯이 괄호를 이용하면 된다.

>>> (2 + 3) * 4
20

진수

파이썬에서는 10진수 외에도 3가지 리터럴 정수를 표현할 수 있다.

정수 앞에 진수를 붙이지 않으면, 10진수로 간주한다.

  • 2진수(binary): 0b or 0B
  • 8진수(octal): 0o or 0O
  • 16진수(hex): 0x or 0X

인터프린터는 이러한 리터럴 정수를 10진수로 출력해준다.

# 10진수
>>> 10
10

# 2진수
>>> 0b10
2

# 8진수
>>> 0o10
8

# 16진수
>>> 0x10
16

형변환

다른 데이터 타입을 정수형으로 변환하려면 int() 함수를 사용한다.

만약 1.2와 같이 float 타입을 정수형으로 바꾸면 다음과 같다.

>>> print(int(1.2))
1

부울형 변수를 int형으로 바꿔보면 다음과 같다.

>>> print(int(True))
1

>>> print(int(False))
0

int() 함수에서 숫자가 아닌 다른 타입을 변환하려면 예외가 발생한다.

>>> int("S")

ValueError: invalid literal for int() with base 10: S

 

문자열

단일 인용 부호 혹은 이중 인용 부호를 사용해서 문자열을 만들 수 있다.

>>> 'hi'
'hi'

>>> "hello"
'hello'

대화식 인터프린터는  문자열을 단일 인용 부호로 출력한다.

이처럼 파이썬에서는 단일/이중 인용 부호를 똑같이 처리한다.

 

왜 두 가지 종류의 인용 부호가 있을까?

주요 목적은 인용 부호가 포함된 문자열을 만들기 위해서이다.

>>> "'Hi,' Hello"
"'Hi,' Hello"

또한 3개의 단일/이중 인용 부호를 사용할 수도 있다.

이는 여러 줄의 문자열을 써야 할 때 사용한다.

>>> """this
is
string"""

this
is
string

데이터 타입 변환: str()

str() 함수를 사용하면 데이터 타입을 문자열로 변환할 수 있다.

>>> str(1.3)
'1.3'

>>> str(True)
'True'

>>> str(1.0e4)
'10000.0'

변수나 상수를 문자열 안에 삽입할 때도 내부적으로 사용된다.

이스케이프 문자

파이썬은 문자열 안의 일부 문자의 의미를 다르게 해석하여 특정 효과를 줄 수 있다.

문자 앞에 백슬래시(\) 기호를 붙인다면 특별한 의미를 줄 수 있다.

대표적으로 줄바꿈을 의미하는 \n이 있다.

이를 통해 한 줄의 문자열을 여러 줄의 문자열로 만들 수 있다.

>>> str = 'Hi\nHello'
>>> print(str)

Hi
Hello

결합, 복제(+, *, )

>>> 'Hi ' + 'Hello'
'Hi Hello'

이처럼 +연산자를 이용하여 리터럴 문자열 또는 문자열 변수를 결합할 수 있다.

>>> 'Hi' * 4
'HiHiHiHi'

*연산자를 사용하면 문자열을 원하는 수만큼 복제할 수 있다.

문자 추출: [ ]

문자열에서 한 문자를 얻기 위해서는 문자열 이름 뒤에 대괄호([ ])와 오프셋을 지정한다.

가장 왼쪽의 오프셋은 0이고, 차례로 1, 2 .....로 진행된다.

쉽게 말해 몇 번째 위치에 있는 것을 뽑을 것인지를 의미한다.

 

만약 맨 뒤의 값을 뽑고 싶다면 오프셋은 -1이 된다.

맨 처음 오프셋인 0에서 -1을 하면 맨 뒤로 가는 것이다.

>>> str = 'abcdefg'
>>> letters[0]
'a'

>>>letters[1]
'b'

>>> letters[-1]
'g'

>>> letters[-2]
'f'

>>> letters[6]
'g'

슬라이스: [start : end : step]

슬라이스를 사용하면 한 문자열에서 문자열의 일부를 추출할 수 있다.

대괄호를 사용하여 start(시작), end(끝) 그리고 옵션으로 step을 명시하여 슬라이스를 정의한다.

이들 중 일부는 생략이 가능하다.

  • [ : ] - 처음부터 끝까지 전체 시퀀스를 추출한다.
  • [start : ] - start 오프셋부터 끝까지 시퀀스를 추출한다.
  • [ : end] - 처음부터 (end - 1) 오프셋까지 시퀀스를 추출한다.
  • [start : end] - start 오프셋부터 (end - 1) 오프셋까지 시퀀스를 추출한다.
  • [start : end : step] - step만큼 문자를 건너뛰면서, start 오프셋부터 (end - 1) 오프셋까지 시퀀스를 추출한다. 
>>> str = 'abcdefg'
>>> str[:]
abcdefg

>>> str[3:]
defg

>>> str[:3]
abc

>>> str[2:5]
cde

>>> str[-3:]
efg

>>> str[-3:6]
efg

>>> str[::3]
adg

슬라이스는 단일 인덱스 조회라기보단 까다로운 오프셋 조건을 광범위하게 조회하는 것이 더 가깝다.

문자열 길이: len()

이젠 파이썬의 내장 함수를 사용해보자.

len() 함수를 사용하여 문자열의 길이를 알 수 있다.

>>> len("abc")
3

>>> str = '123456'
>>> print(str)
6

문자열 나누기: split()

len()과는 달리 문자열에 특정한 함수도 있다.

문자열 함수는 string.function(arguments) 형태로 입력하여 사용한다.

즉, 문자열 이름을 입력하고, .을 입력한 후 함수 이름을 입력한다.

또한 함수에 필요한 인자도 입력한다.

 

특정 구분자를 기준으로 하나의 문자열을 작은 문자열들의 리스트로 나누기 위해서는 문자열 내장 함수 split()을 사용한다.

여기서 리스트란 대괄호로 둘러싸여 ,(콤마)로 구분된 값들의 시퀀스이다.

>>> str = 'abc,def,ghi'
>>> str.split(',')
[abc, def, ghi]

만약 구분자를 지정하지 않으면, split() 함수는 문자열에 등장하는 공백 문자(줄바꿈, 스페이스, 탭)를 사용한다.

>>> str = 'abc def ghi'
>>> str.split()
[abc, def, ghi]

문자열로 결합하기: join()

join() 함수는 split() 함수와 반대이다.

join() 함수는 문자열 리스트를 하나의 문자열로 결합한다.

먼저 결합할 문자열을 지정한 다음, 문자열 리스트를 결합한다.

join() 함수의 형태는 string.join(list) 형태이다.

>>> crypto_list = ['Hi', 'Hello']
>>> crypto_string = ','.join(crypto_list)
>>> print(crypto_string)
Hi, Hello

문자열 대체하기: replace()

문자열의 일부를 대체하기 위해서는 replace()를 사용한다.

인자로 바꿀 문자열, 대체할 문자열, 바꿀 문자열에 대한 횟수를 입력한다.

마지막 인자를 생략하면 모든 인스턴스를 바꾼다는 의미이다.

>>> str = 'My python grade is F'
>>> str = str.replace('F', 'A+')
>>> print(str)
My python grade is A+

만약 한 문자열에 같은 단어가 많이 있고, 그 단어 중 몇 개만을 바꾸고 싶을 대는 횟수를 입력하면 된다.

>>> str = 'aaaaa'
>>> str = str.replace('a', 'e', 2)
>>> print(str)
eeaaa
728x90

댓글