파이썬 핵심 기초 다지기: 헷갈리지 말자!

julian·2025년 2월 10일

python

목록 보기
1/74
post-thumbnail

📌 사용 환경

  • Python 3.10.2
  • conda 24.9.0
  • JupyterLab 4.2.5

1. 파이썬


매년 프로그래밍 언어의 순위를 공개하는 기업인 티오베(TIOBE)의 지수를 보면 알 수 있듯, 파이썬은 현재 압도적인 1위를 차지하고 있는 언어다.

그 이유에는 인공지능(AI)와 데이터 사이언스(Data Science)의 부상과 더불어 TensorFlow, PyTorch 같은 핵심 AI 프레임워크들의 기본 언어가 파이썬이 됨에 있다. 또한 간결하고 명확한 문법, 다양한 라이브러리 지원, 낮은 진입장벽, 탁월한 가독성과 유지보수성 등의 이유가 있다.

AI 모델링을 위해 기본인 파이썬의 기본 명령어 부터 시작해 되돌아 보며 정리하고, 헷갈리는 부분을 되짚고자 한다.

1.1. 파이썬 어디에 쓰일까?

  • 수치 연산: Numpy로 빠르고 효율적인 계산
  • 웹 크롤링: BeautifulSoup, Selenium으로 데이터 수집
  • 데이터 분석/시각화: Pandas, Matplotlib, Seaborn
  • 머신러닝/딥러닝: Scikit-learn, TensorFlow, Keras 등
  • 웹 개발: Django, Flask
  • 데이터베이스 연동: MySQL, Oracle, MSSQL 등 지원
  • GUI 개발: PyQt, Tkinter
  • 시스템 프로그램 제작: OS 유틸리티 작성 가능

2. 파이썬 기본 명령어 정리

2.1. 출력

print('Hello Python')
print("""반갑습니다""")

print("010","1234","5678", sep="-")

print("줄이 안 바뀜", end=" ")
print('''이어쓰기''')

# ✅ 출력 결과
# Hello Python
# 반갑습니다
# 010-1234-5678
# 줄이 안 바뀜 이어쓰기
  • 문자열 표현: ', ", ''', """
  • print 기본 구조: print(내용, sep=구분자, end=끝문자)

2.2. 변수

파이썬은 변수 선언 시 자료형을 자동으로 인식한다.

  • 변수 규칙:
    • 문자, 숫자, _ 사용 가능
    • 숫자로 시작 불가
    • 공백 X
    • 대소문자 구분
    • 예약어 금지

2.2.1. 변수 = 데이터 값 (숫자, 문자, 논리(진위형))

a=1
a,type(a)
b=55.5
b,type(b)

# ✅ 출력 결과
# (1, <class 'int'>)
# (55.5, <class 'float'>)

참고: jupyter에서는 display를 제공해주는데, print() 없이 그냥 입력해도 나온다.

c=True
d="A"
e="Python"

print(c,type(c))
print(d,type(d))
print(e,type(e))

# ✅ 출력 결과
# True <class 'bool'>
# A <class 'str'>
# Python <class 'str'>

2.2.2. 변수 값 재설정

lang="Java"
print(lang)

lang="Python"
print(lang)

# ✅ 출력 결과
# Java
# Python

2.2.3. 대소문자 구분

title="HTML"
Title="CSS"

print(title,Title)

# ✅ 출력 결과
# HTML CSS

2.2.4. tuple

# 여러 변수 선언 가능 - tuple -> 파이썬은 tuple이 있어서 좋음
name, age, email="홍길동", 30, "honggildong@naver.com"

print(name, age, email)
print(type(name), type(age), type(email))

# ✅ 출력 결과
# 홍길동 30 honggildong@naver.com
# <class 'str'> <class 'int'> <class 'str'>

튜플(tuple)은 파이썬에서만 사용할 수 있는 기능으로, 이를 이용해 여러 변수를 동시에 선언할 수 있다.

2.2.5. 변수명 규칙 위반 예시

# 2apple=2  # 첫글자는 문자 or _
# my$var=10  # 특수문자 포함 X
# print=2  # 예약어 사용 X
# my var=10  # 공백 X

2.3. 숫자 자료형

  • 정수형: 10진수, 2진수, 8진수, 16진수
  • 실수형
  • 논리형(진위형): boolean(true / false)

2.3.1. 정수형 - 10진수

x=10
y=22

print(x,type(x))
print(y,type(y))

# ✅ 출력 결과
# 10 <class 'int'>
# 22 <class 'int'>

2.3.2. 정수형 - 2진수, 8진수, 16진수

bin_num=0b1010  # (1*2^3)+(0*2^2)+(1*2^1)+(0*2^0)
oct_num=0o12  # (1*8^1)+(2*8^0)
hex_num=0xA  # A-10, B-11, ..., F-15

print(bin_num, type(bin))
print(oct_num, type(oct))
print(hex_num, type(hex))

# ✅ 출력 결과
# 10 <class 'int'>
# 10 <class 'int'>
# 10 <class 'int'>
  • 2진수(binary, 0~1)
    • bin=0b1010
    • print(bin)
    • 10 ← 123+022+121+0201*2^3+0*2^2+1*2^1+0*2^0 = 10
  • 8진수(octal, 0~7)
    • oct=0o12
    • print(oct)
    • 10 ← 181+2801*8^1+2*8^0 = 10
  • 16진수(hexadecimal, 0~15, A-10, B-11, C-12, .., F-15)
    • hex=0xA
    • print(hex)
    • 10 ← 1016010*16^0 = 10

2.3.3. 실수형

num=3.13
val=3.1415e2  # 3.1415 * 10^2

print(num,type(num))
print(val,type(val))

# ✅ 출력 결과
# 3.13 <class 'float'>
# 314.15 <class 'float'>

2.3.4. 논리형(진위형)

flag1=True
flag2=False

print(flag1,flag2)

# ✅ 출력 결과
# True False

2.4. 연산자

  • 산술 연산자
  • 비교(관계) 연산자
  • 논리 연산자
  • 멤버 연산자
  • 할당(대입) 연산자
  • 기타 연산자 (주소비교, 비트연산자, 복소수)

2.4.1. 산술 연산자

a=10
b=3

print(a + b)  # 덧셈 (10 + 3 = 13)
print(a - b)  # 뺄셈 (10 - 3 = 7)
print(a * b)  # 곱셈 (10 * 3 = 30)
print(a / b)  # 나눗셈 (10 / 3 = 3.333...)
print(a // b) # 몫 (10 // 3 = 3)
print(a % b)  # 나머지 (10 % 3 = 1)
print(a ** b) # 거듭제곱 (10 ** 3 = 1000)

2.4.2. 비교(관계) 연산자 (Comparison/Relational Operators)

x=10
y=20

print(x == y)  # 같음 (False)
print(x != y)  # 다름 (True)
print(x > y)   # x가 y보다 큼 (False)
print(x < y)   # x가 y보다 작음 (True)
print(x >= y)  # x가 y보다 크거나 같음 (False)
print(x <= y)  # x가 y보다 작거나 같음 (True)

두 값을 비교하여 true/false를 반환한다.

2.4.3. 논리 연산자 (Logical Operators)

a=True
b=False

print(a and b)  # AND (False)
print(a or b)   # OR (True)
print(not a)    # NOT (False)

boolean 값을 처리하고, 주로 조건문에서 사용된다.
조금 더 알아보자면 아래와 같다.

num=10

result1=num>0 and num<20  # 10>0 and 10<20 -> true and true -> true
result2=num==10 or num==20  # 10==10 or 10==20 -> true or false -> true
result3=num%2==0  # 10%2==0 -> 0==0 -> true
result4=not(num%2==0)  # not(10%2==0) -> not(0==0) -> not(true) -> false

print(result1)
print(result2)
print(result3)
print(result4)

# ✅ 출력 결과
# True
# True
# True
# False

2.4.4. 멤버 연산자 (Membership Operators)

lst=[1, 2, 3, 4, 5]  # list는 예약어 이므로 lst라고 써야함

print(3 in lst)  # 3이 리스트에 있음 (True)
print(6 not in lst)  # 6이 리스트에 없음 (True)

값이 시퀀스 자료형(리스트, 튜플, 문자열 등)에 포함되어 있는지 확인한다.

2.4.5. 할당(대입) 연산자 (Assignment Operators)

x=10  # 할당(대입) 연산자

# 복합 할당(대입) 연산자
x+=5  # x=x + 5
print(x)  # 15

x-=3  # x=x - 3
print(x)  # 12

x*=2  # x=x * 2
print(x)  # 24

x/=4  # x=x / 4
print(x)  # 6.0

2.4.6. 기타 연산자 (주소비교, 비트연산자, 복소수)

2.4.6.1. 주소 비교 연산자

a=[1, 2, 3]
b=a  # b는 a와 같은 객체를 참조
print(a is b)  # True
print(a is not b)  # False

주소 비교 연산자: is와 is not을 사용하여 두 객체가 동일한 객체인지 비교한다.

2.4.6.2. ⭐ 비트 연산자 (중요!)

x=10  # 1010 (2진수)
y=4   # 0100 (2진수)

print(x & y)  # 비트 AND (0)
print(x | y)  # 비트 OR (14)
print(x ^ y)  # 비트 XOR (14)
print(~x)     # 비트 NOT (~10 == -11)

# 비트 이동 연산
print(x << 1)  # 왼쪽으로 1비트 이동 (10100 -> 20)
print(x >> 1)  # 오른쪽으로 1비트 이동 (0010 -> 5)

비트 연산은 비트 단위(2진수)로 연산한다.

특히 비트 NOT의 경우, 보수의 개념을 잘 알아두는 것이 중요하다.

~x-(x+1)은 같다고 생각하면 편한데, 이에 대해 좀 더 알아보면 다음과 같다.

  1. x=10 이를 2진수로 변환하면 0000 1010이다.

    여기서 ~x와 같이 ~가 붙는다면, 비트를 모두 반전시켜 1111 0101이 된다.

    0000 1010 -> 1111 0101
  2. 이 값은 2의 보수 방식에서 -11을 의미하는데, 2의 보수란 주어진 2진수에서 모든 비트를 반전시킨 후, +1을 하는 방식을 말한다.

    좀 더 자세히 설명하면 다음과 같다.

    나온 1111 0101은 2의 보수 형식에서 음수를 나타낸다.
    (비트가 1로 시작한다면 그 값은 음수를 나타낸다.)

    그리고 1111 0101을 2의 보수로 해석하려면, 2단계로 처리하는데,

    1. 모든 비트를 반전시킨다.
    1111 0101 -> 0000 1010
    1. +1을 더한다.
    0000 1010 + 1 = 0000 1011
  3. 마지막으로 앞서 설명했듯이 원래 비트가 1로 시작했기 때문에, 이 값은 음수가 된다. 따라서, 최종적으로 -11이 나온다.

2.4.6.3. 복소수 연산

# 복소수 연산
z1=2 + 3j
z2=1 + 4j

print(z1 + z2)  # (3 + 7j)
print(z1 * z2)  # (-10+11j)

복소수 연산자

  • 파이썬에서는 j로 표기한다.
  • 복소수 곱셈
    ((21)+(24j)+(3j1)+(3j4j)=2+8j+3j+12j2((2*1)+(2*4j)+(3j*1)+(3j*4j) = 2+8j+3j+12j^2
    여기서, j2j^2 = -1 이므로 2+11j-12 = (-10 + 11j)

💪 O/X 퀴즈

Q1. print() 함수 안에서 출력값들 사이에 구분자를 넣으려면 end를 사용해야 한다.
A1. X / sep 매개변수를 사용해야한다.

Q2. $tar라는 변수명은 선언 가능하다.
A2. X / 변수명에 특수문자를 사용할 수 없다.

Q3. x = 10일 때, x >> 1의 결과는 5이다.
A3. O / 1010 -> 0101 -> 5

Q4. a = 10과 b = 3일 때, a // b는 3이다.
A4. O / 몫을 반환

Q5. 2진수 0b1010과 8진수 0o12의 값은 동일하다.
A5. O

Q6. x = 5일때, x ^ 3의 결과는 6이다.
A6. O / ^는 XOR이므로 101 ^ 011 = 110 -> 6

Q7. z1 = 2 + 3j와 z2 = 1 + 4j일 때, z1 * z2는 (2+11j)이다.
A7. X / 2+8j+3j+12j22+8j+3j+12j^2 = 2+11j-12 = (-10+11j)

profile
AI Model Developer

0개의 댓글