[PYTHON] Ch1. 변수와 자료형

2023. 2. 15. 07:12IT/PYTHON

인프런에 있는 남박사님의 강의 남박사의 파이썬 기초부터 실전 100% 활용 를 듣고 정리한 필기입니다. 😀

변수 및 사용 방법

변수란?

  • 변수는 데이터를 저장하는 바구니 입니다.

👱 변수 이름 정하는 규칙

  • 변수명은 반드시 영문자로 시작해야합니다.
  • 변수명은 대소문자를 구분합니다.
  • 변수명은 권장하진 않지만 한글로도 가능합니다.
  • 변수명은 띄어쓰기를 할 수 없습니다.
  • 변수명은 내장 키워드를 사용 할 수 없습니다.

자료형 int, float, bool, None

파이썬에서의 자료형

파이썬에서는 변수를 선언할 때 자료형을 따로 선언하지 않고 사용합니다.

C# 에선 var 썼는데 파이썬에서는 이것조차 생략하나보다.

정수(int)

  • 정수는 수학에서 자연수, 자연수의 음수 및 0을 통틀어 이르는 말입니다. 즉, ...-2, -1, 0, 1, 2... 등의 따위의 수를 말합니다.
a = 0
b = -1
c = 1

print(a)
print(type(a))

print(b)
print(type(b))

print(c)
print(type(c))
💎출력💎

0
<class 'int'>
-1
<class 'int'>
1
<class 'int'>
  • type()
    • 괄호안에 임의의 자료형을 넣으면 어떤 자료형인지 알려주는 역할을 합니다.
  • print()
    • C#의 Console.WriteLine()과 동일하게 화면에 문자열을 출력하는 역할을 합니다.

실수(float)

  • 실수는 유리수와 무리수를 통틀어 이르는 말입니다. 즉, 정수에 소숫점이 달려있는듯한 모습을 하고 있습니다.
a = 0.0
b = -0.1
c = 0.1

print(a)
print(type(a))

print(b)
print(type(b))

print(c)
print(type(c))
💎출력💎

0.0
<class 'float'>
-0.1
<class 'float'>
0.1
<class 'float'>

불리언(bool)

  • True, False만을 가지는 자료형입니다. 주로 조건문의 결과, 함수를 실행했는데 실행 결과가 참이냐 거짓이냐 판별할 때 사용합니다.

    True와 False의 첫글자는 꼭 대문자를 써야만 인식하네요.

a = True
b = bool(False)
c = 2 > 1
d = bool(1)
e = bool(0)

print(a)
print(type(a))

print(b)
print(type(b))

print(c)
print(type(c))

print(d)
print(type(d))

print(e)
print(type(e))
💎출력💎

True
<class 'bool'>
False
<class 'bool'>
True
<class 'bool'>
True
<class 'bool'>
False
<class 'bool'>
  • bool()
    • 0이외의 숫자를 입력하면 True가 되고, 0이 입력되면 Fasle가 됩니다.

      C언어에서 동작했던거랑 똑같네!

None

  • 아무것도 없는 자료형입니다.

    C#에서는 null과 동급입니다.

a = None

print(a)
print(type(a))
💎출력💎

None
<class 'NoneType'>

문자열(str)

  • 문자열은 문자들의 모임을 말합니다. 파이썬에서는 문자면 모두 문자열이라고 생각하면 됩니다.
a = "Hello python"
b = """Hello python

"""
c = '''Hello python


'''

print(a)
print(b)
print(c)

print(type(a))
print(type(b))
print(type(c))
💎출력💎

Hello python
Hello python


Hello python



<class 'str'>
<class 'str'>
<class 'str'>
  • "Hello python"
    • 쌍따옴표를 문자열 시작점과 끝점에 붙이면 파이썬은 str자료형으로 인식합니다.
  • """ """
    • 쌍따옴표 3개를 붙이고 문자열 안에 [Enter]를 입력하면, 자동으로 \n 이 붙습니다. 따옴표 3개도 동일하게 동작합니다.

이스케이프 문자

  • 문자열 중간에 \n과 같이 입력되는 형태를 이스케이프 문자라고 합니다.
    • \n : 줄바꿈
    • \t : 탭
    • \ : ''(역슬래쉬)
    • ' : '(따옴표)
    • " : "(쌍따옴표)

문자열 연산

  • 문자열끼리 합치거나, 특정 문자열을 몇 번 반복할 지 표현할 수 있는것이 문자열 연산입니다.
a = "Hello"
b = "python"

print(a + "\t" + b)

print("*" * 40)
💎출력💎

Hello   python
****************************************

👱문자열 인덱싱

  • 문자열 인덱싱은 어떤 요소들의 집합에서 내가 원하는 뭔가 한개를 꺼내오는 것을 말합니다. 예를 들어서, a = "test python string" 이라는 문자열에서 첫번째 글자인 't'를 가지고 오려면 a[0] 이라고 표현하면 됩니다. 맨 마지막 글자인 'g'를 가지고 오려면 a[17]로 표현 할 수 있지만 a[-1]로도 표현이 가능합니다.
a = "test python string"

print(a[0])
print(a[17])
print(a[-1])
💎출력💎

t
g
g

👱문자열 슬라이싱

  • 문자열 슬라이싱은 어떤 요소들의 집합에서 내가 원하는 범위 만큼 잘라내는것을 말합니다. 예를 들어서, a = "test python string" 이라는 문자열에서 첫번째 글자부터 2개의 문자열을 잘라낼려면 a[0:2]로 표현합니다. 또한 a[:2] 처럼 첫번째 글자부터 슬라이싱 하는 경우라면 0은 생략이 가능합니다. 세번째 글자부터 맨끝까지 슬라이싱 하려면 a[3:]으로 표현 할 수 있습니다.
a = "test python string"

print(a[0:2])
print(a[0:10])
print(a[0:1000])
print(a[:10])
print(a[3:])
💎출력💎

te
test pytho
test python string
test pytho
t python string

👱문자열 포맷팅

  • 문자열 속 특정한 위치에 특정한 값을 삽입해주는것을 의미합니다. 문자열의 {} 순서에 맞게 format()안에 표시할 변수나 상수를 입력합니다.
old = 40
speed = 12.5

print("나는 {}살이고 100미터 기록은 {}초 입니다.".format(old,speed))
💎출력💎

나는 40살이고 100미터 기록은 12.5초 입니다.
  • 파이썬 3.6 이상부터는 보간법을 지원합니다. f"난 {country}사람이고 이름은 {name} 입니다" 형태 처럼 순서를 생각할 필요 없이 문자열 알에 바로 변수를 넣어주는 방식입니다.

    개인적으로는 이게 제일 직관적이고 코딩양도 적어보임.

name = "쿠루가이"
country = "한국"
age = 40

print(f"난 {country}사람이고 이름은 {name}이며 나이는 {age}입니다.")
💎출력💎

난 한국사람이고 이름은 쿠루가이이며 나이는 40입니다.

문자열 메서드

  • 문자열에는 특정 문자열 찾기, 치환하기, 공백 지우기 등 여러 유용한 메서드들이 있습니다.

    메서드는 어떤 행위를 해서 결과를 알려주는 목적으로 기능을 하는 놈입니다. C언어의 함수랑 동일한 기능을 합니다.

👱문자열에서 특정 문자열을 찾는데 사용하는 메서드

  • str.find()str.index()는 사용법도 같고, 문자열을 찾았을 때 문자열 인덱스를 리턴하는 값도 동일합니다. 다른점은 문자열을 찾지 못했을 때 입니다. str.find()는 -1을 리턴하는것에 반해 str.index()는 에러를 표시합니다.
test = "abcd 가나다라마바사"

print(test.find("가"))
print(test.index("가"))

print(test.find("zz"))
print(test.index("zz"))
💎출력💎

5
5
-1
Traceback (most recent call last):
  File "c:\Users\hwyoo\Documents\int.py", line 7, in <module>
    print(test.index("zz"))
ValueError: substring not found
  • str.find()메소드는 찾은 문자열의 인덱스를 리턴하니까 문자열 슬라이싱에 응용할 수 있습니다. 가령 path = "C:\\test\\abcd\\abcde.jpg"의 경로를 가진 문자열이 있는데 경로명은 지우고 파일명만 가져오고 싶다면 str.rfind() 메서드와 문자열 슬라이싱 조합을 이용하면 됩니다.
path = "C:\\test\\abcd\\abcde.jpg"

print(path[path.rfind("\\") + 1:])
💎출력💎

abcde.jpg
  • str.rfind("\\")+1
    • 찾는 방향이 문자열을 오른쪽 부터 찾아서 인덱스 값을 리턴하는 메소드입니다. 여기서 +1을 해준 이유는 우리가 원하는 파일명만 출력할 수 없기 때문입니다. +1 없이 사용한다면"\abcde.jpg" 형태로 리턴합니다.

      파일명은 오른쪽에 위치하므로 str.rfind()와는 찰떡 궁합입니다.

특정 문자열을 기준으로 문자열을 잘라서 리스트 형태로 저장하는 메서드

  • str.split()메서드를 사용하면 지정한 문자열을 기준으로 문자열을 잘라서 리스트 형태로 저장합니다.
path = "C:\\test\\abcd\\abcde.jpg"

result = path.split("\\")

print(result)
print(result[0])
💎출력💎

['C:', 'test', 'abcd', 'abcde.jpg']
C:
  • str.split("\\")
    • \\을 기준으로 4개의 문자열 리스트가 만들어졌습니다. 이 잘라진 문자열 리스트에 접근하기 위해서는 문자열 인덱싱에서 표현했던것과 동일하게 하면 됩니다. 소스에서와 같이 0번째 인덱싱하려면 result[0]으로 표현합니다.

      남박사님이 리스트는 아직 배우지 않았기 때문에 여기서는 간단하게만 설명한다고 합니다.

👱문자열을 치환하는 메서드

  • str.find()가 문자열을 찾는 기능이였다면 str.replace()는 찾은 문자열을 지정한 문자열로 치환(바꿔주는)하는 기능입니다.

    MS OFFICE의 찾아 바꾸기 기능이라고 이해하면 편합니다.

a = "안녕"
result = a.replace("안녕","헬로")

print(result)
💎출력💎

헬로
  • str.replace("안녕","헬로)
    • "안녕" 이라는 문자열을 찾아서 "헬로"로 변경하였습니다.

      C#에서는 정규 표현식 써서 바꿨었는데 파이썬은 엄청 쉽게 되네~

👱문자열의 공백을 지워주는 메서드

  • 공백은 눈에 보이지 않아서 문자열 처리를 할 때 의도치 않은 결과를 낳는 경우가 비일비재합니다. 이때 사용하는 것이 str.strip()을 사용하면 문자열 기준으로 앞뒤 공백을 지워줍니다.

    가운데 공백은 못 지우네~

a = "     안  녕     "
result = a.strip()

print(a)
print(result)
💎출력💎

     안  녕     
안  녕

대문자와 소문자로 바꿔주는 메서드

  • "AbCd"라는 대소문자가 섞여 있는 문자열이 있다고 합시다. 이것을 모두 대문자 또는 소문자로 바꿔주는 메서드가 있습니다. 대문자로 바꿀려면 str.upper()를 사용하면 되고 소문자로 바꿀려면 str.lower()를 사용하면 됩니다.

    당연하겠지만...한글은 대소문자가 없으니 무의미한 짓이다!!!!

a = "AbCd"

print(a.upper())
print(a.lower())
💎출력💎

ABCD
abcd

대소문자 구분 없이 입력되는 시스템을 만들 때 유용할 것 같은 느낌적인 느낌이 있다!

👱문자열 길이 및 특정 문자열 개수를 세어주는 메서드

  • "aaaabbbbccccdddd"라는 문자열에서 "a"의 개수를 알고 싶다면 str.count()를 사용하면 됩니다. str의 전체 길이가 알고 있다면 str.len() 메소드를 사용합니다.
a = "aaaabbbbccccdddd"

print(a.count("a"))
print(len(a))
💎출력💎

4
16

어떤 데이터 타입인지 확인하는 메서드

  • 사용자에게 문자열을 입력 받았을 때, 이게 숫자인지, 알파벳인지 검사해야 될 때 사용하는 메소드는 다음과 같습니다.
    • str.isalpha()
      • bool 타입으로 알파벳이면 True, 아니면 False를 리턴합니다.
    • str.islower()
      • bool 타입으로 소문자면 True, 아니면 False를 리턴합니다.
    • str.isupper()
      • bool 타입으로 대문자면 True, 아니면 False를 리턴합니다.
    • str.isdecimal()
      • bool 타입으로 10진수이면 True, 아니면 False를 리턴합니다.
    • str.isdigit()
      • bool 타입으로 아라비아 숫자이면 True, 아니면 False를 리턴합니다.
    • str.isnumeric()
      • bool 타입으로 로마 숫자, 아라비아 숫자이든 숫자 자체인지 판단하는 메서드로 숫자이면 True, 아니면 False를 리턴합니다.

        iii같은 로마 숫자, ½같은 숫자관련 특수문자 등도 True로 반환합니다. 신기신기!

👱클래스 구조를 확인하는 메서드(str 메서드 아님)

  • 지금까지 문자열 관련 메서드를 살펴보았는데 소개한 것 이외에도 다양한 메서드가 존재합니다. 이럴경우 구글에서 api문서를 찾아보거나 dir() 메서드로 클래스의 구조를 살펴볼 수 있습니다. 사용 방법은 ()안에 살펴볼 클래스명을 입력하면 됩니다. 이때까지 사용했던 str 클래스를 볼려면 dir(str)을 입력합니다.
a = "abcd"
print(type(a))
print(dir(str))
💎출력💎

<class 'str'>
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
  • type(a)
    • a라는 변수의 타입을 먼저 조사합니다. 여기서는 str이라는 클래스 타입이라고 출력되었습니다.
  • dir(str)
    • str 클래스의 구조를 살펴봅니다. 우리가 앞에서 배웠던, find(), count()등 이 보입니다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄