개발/공부 기록

[파이썬 기초 문법 총정리#1] — C 출신이 처음 파이썬 보면 낯선 것들 (W3Schools Ch.01~11)

cedis 2026. 3. 8. 01:24


들어가며

C만 써오다가 파이썬을 처음 봤을 때 솔직히 좀 당황했다.
{}는 어디 갔지? 세미콜론은? int x = 5;는 왜 그냥 x = 5야?

크래프톤 정글 2주차, W3Schools 01~11챕터를 직접 코딩하면서 이 물음표들이 하나씩 해소됐다.
이 글은 그 과정을 정리한 것이다. C 출신이 파이썬에서 낯설었던 것들 위주로.

시리즈 개요: W3Schools 파이썬 튜토리얼 1~25챕터를 공부한 내용을 묶어 정리합니다.
이번 편은 챕터 01~11: 기초 문법 전반 — 들여쓰기, 변수, 타입, 문자열, Boolean, 연산자

1. 들여쓰기가 문법이다 (Ch.03)

파이썬에서 가장 먼저, 그리고 가장 크게 낯선 것: 중괄호가 없다.
C에서 if 블록을 {}로 감쌌다면, 파이썬은 들여쓰기 자체가 그 역할을 한다.
스타일 취향 문제가 아니라 문법 오류다. 들여쓰기가 안 맞으면 코드가 아예 실행되지 않는다.

C와 나란히 비교해 보면 이렇다.

C Python
if (5 > 2) {
    printf("맞아");
}
if 5 > 2:
    print("맞아")

조건식 괄호도 없다. if (5 > 2)가 아니라 if 5 > 2: 다. 뒤에 콜론(:)도 필수다.

같은 블록 내에서 공백 개수가 다르면 IndentationError 발생. 관례는 공백 4칸. 탭과 스페이스 섞는 것도 금지다.


2. 주석과 print() (Ch.02, 04)

파이썬 실행은 간단하다. .py 파일을 저장하고 터미널에서 python hello.py. #include도 없고 main()도 없다. 파일 자체가 실행 단위다.

print("Hello, World!")    # C에서 main()이 필요했던 것과 달리 한 줄이면 끝

# 한 줄 주석은 #

'''
여러 줄 주석은
트리플 따옴표로 감싼다
'''

# print()는 기본적으로 줄바꿈으로 끝남
print("A", end="")    # end 파라미터로 줄바꿈 없애기
print("B", end="")    # 출력: AB
print("I am", 25)     # 콤마로 여러 값 출력 가능, 출력: I am 25

3. 변수 — 타입 선언이 없다 (Ch.05, 06)

C에서 변수 쓰려면 int x = 5;처럼 타입을 먼저 선언해야 했다.
파이썬은 그냥 x = 5. 끝이다. 파이썬이 타입을 알아서 파악한다.

더 충격적인 건 같은 변수에 다른 타입을 덮어쓸 수 있다는 것이다. C에서는 상상도 못 할 일이다.

# 타입 선언 없이 그냥 쓴다
x = 5         # int
x = "Sally"  # str — 같은 변수에 타입이 바뀜. 이게 동적 타입(Dynamic Typing)

# type()으로 현재 타입 확인
print(type(x))   # <class 'str'>

# 한 줄에 여러 변수 동시 할당
x, y, z = "Orange", "Banana", "Cherry"

# 리스트를 변수로 언패킹
fruits = ["apple", "banana", "cherry"]
a, b, c = fruits   # 개수가 맞아야 함

네이밍 컨벤션

스타일 예시 파이썬 권장
snake_case my_variable_name 권장 (PEP 8)
camelCase myVariableName 비권장
PascalCase MyClassName 클래스명에만

전역/지역 변수 — global 키워드

함수 내에서 전역 변수를 수정하려면 반드시 global을 명시해야 한다. 없으면 함수 안에서 같은 이름의 지역 변수가 새로 생긴다.

x = "awesome"

def myfunc():
    global x
    x = "fantastic"    # global 없으면 이 x는 함수 내 지역변수가 됨

myfunc()
print(x)   # "fantastic" — global 선언 덕분에 전역 x가 바뀜

파이썬 내장 데이터 타입 한눈에 보기 (Ch.06)

범주 타입 예시
텍스트 str "Hello"
숫자 int, float, complex 20 / 20.5 / 1j
시퀀스 list, tuple, range [ ] / ( ) / range(6)
매핑 dict {"key": "val"}
집합 set, frozenset {"a", "b"}
불리언 bool True / False
없음 NoneType None

4. 숫자와 형변환 (Ch.07, 08)

파이썬 int는 C의 int와 달리 크기 제한이 없다. 32비트 오버플로우 걱정 없이 큰 숫자를 그냥 쓸 수 있다.
알고리즘 문제에서 오버플로우를 전혀 신경 안 써도 된다는 게 처음엔 좀 신기했다.

# int — 무한 크기
y = 35656222554887711   # 이게 그냥 됨. C였으면 long long도 모자랄 수 있다

# float — 과학적 표기법
x = 35e3    # 35000.0

# complex — 허수는 j 표기 (수학의 i)
z = 3+5j

# 타입 간 변환 — C처럼 (int)x 캐스팅이 아니라 생성자 함수 호출
a = float(1)     # 1 -> 1.0
b = int(2.8)   # 2.8 -> 2  (반올림X, 버림O)
c = str(42)    # 42 -> "42"

# 난수 생성
import random
print(random.randrange(1, 10))

주의: int(2.8)버림이다. 반올림을 원하면 round(2.8)을 써야 한다.


5. 문자열 — 슬라이싱이 핵심이다 (Ch.09)

C에서 문자열은 char[]고, 길이 구하려면 strlen()을 불러야 했다.
파이썬 문자열은 그 자체로 강력한 메서드를 가진 객체다. 특히 슬라이싱이 알고리즘에서 엄청나게 편리하다.

슬라이싱 — 파이썬의 핵심 문법

b = "Hello, World!"

print(b[0])       # 'H'  — 0부터 시작
print(b[2:5])    # 'llo'  — 2 포함, 5 미포함
print(b[:5])     # 'Hello'  — 처음부터 4까지
print(b[7:])     # 'World!'  — 7부터 끝까지
print(b[-6:-1])  # 'World'  — 음수 인덱스 (뒤에서부터)
print(b[::-1])   # '!dlroW ,olleH'  — 문자열 뒤집기

자주 쓰는 문자열 메서드

메서드 설명 예시
upper() / lower() 대/소문자 변환 "hi".upper() → "HI"
strip() 앞뒤 공백 제거 " hi ".strip() → "hi"
replace(a, b) a를 b로 교체 "Hi".replace("H","J") → "Ji"
split(sep) 구분자로 나눠 리스트 반환 "a,b".split(",") → ["a","b"]
len(s) 문자열 길이 len("Hello") → 5
"x" in s 포함 여부 확인 "free" in "free time" → True

f-string — 포맷팅의 현대적 방식 (Python 3.6+)

C의 printf("%s %d", name, age) 같은 역할을 훨씬 깔끔하게 한다.
문자열 앞에 f를 붙이고 {} 안에 변수나 표현식을 넣으면 된다.

name = "John"
age = 36

# 기본 f-string
txt = f"My name is {name}, I am {age}"
print(txt)   # My name is John, I am 36

# 소수점 자리 지정
price = 59
print(f"Price: {price:.2f}")    # Price: 59.00

# {} 안에서 계산도 가능
print(f"Total: {20 * 59}")      # Total: 1180

6. Boolean — Falsy 값을 알아야 실수 안 한다 (Ch.10)

파이썬 True / False는 첫 글자가 대문자다. true는 에러다.

그것보다 더 중요한 건 Falsy 값 개념이다. 파이썬에서는 빈 값들이 자동으로 False처럼 평가된다.

True로 평가되는 것 False로 평가되는 것 (Falsy)
"abc", 123, [1,2], {"a":1}, (1,) 0, "", [], {}, (), None, False
# Falsy 활용 — C에서 if (str != NULL && strlen(str) > 0) 하던 것을
# 파이썬에서는 이렇게 쓸 수 있다
s = ""
if s:
    print("뭔가 있음")
else:
    print("비어 있음")   # 빈 문자열이라 이쪽 실행

# isinstance() — 타입 체크
x = 200
print(isinstance(x, int))   # True

7. 연산자 — C에 없는 것들 위주로 (Ch.11)

+, -, *, / 같은 기본 산술 연산자는 C랑 거의 같다.
다만 파이썬에만 있는 특이한 연산자들이 몇 가지 있다. 이것들을 모르면 남의 코드를 읽을 때 막힌다.

산술 — C와 다른 것들

연산자 의미 예시
** 거듭제곱 (C에 없음) 2**10 = 1024
// 버림 나눗셈 (몫만) 7//2 = 3
/ 나눗셈 — 항상 float 반환 7/2 = 3.5 (C: 3)

is vs == — 이게 제일 헷갈린다

처음 파이썬 코드를 보면 is==처럼 쓴 것 같은데 결과가 다르다. 이 둘은 비교하는 대상이 다르다.

x = [1, 2, 3]
y = [1, 2, 3]

print(x == y)   # True  — 값이 같다 (내용 비교)
print(x is y)   # False — 다른 객체다 (메모리 주소 비교)

z = x
print(x is z)   # True  — 같은 객체를 가리킴

체인 비교 — 파이썬만 가능한 문법

x = 5

# C라면 이렇게 써야 함
# if (x > 1 && x < 10)

# 파이썬은 이게 된다
print(1 < x < 10)   # True — 수학적 표기 그대로

바다코끼리 연산자 := (Python 3.8+)

이름이 독특하다. := 기호가 바다코끼리 눈이랑 이빨처럼 생겼다고 해서 walrus operator라고 부른다.
역할은 조건식 안에서 변수를 할당하고 동시에 사용하는 것이다.

numbers = [1, 2, 3, 4, 5]

# 기존 방식
count = len(numbers)
if count > 3:
    print(f"List has {count} elements")

# 바다코끼리 연산자 — 한 줄로
if (count := len(numbers)) > 3:
    print(f"List has {count} elements")

멤버십 연산자 in / not in

리스트, 문자열, 딕셔너리 등에서 특정 값이 있는지 확인할 때 쓴다.
C에서 루프 돌며 하나씩 비교하던 것을 한 줄로 표현할 수 있다.

fruits = ["apple", "banana", "cherry"]
print("banana" in fruits)      # True
print("pineapple" not in fruits)  # True

# 문자열에서도 동일
text = "Hello World"
print("hello" in text)   # False — 대소문자 구분함
print("Hello" in text)   # True

마무리

01~11챕터를 정리하고 나니 결국 파이썬의 기초 문법은 하나의 철학으로 귀결된다.
"더 짧게, 더 읽기 좋게."

중괄호 없애고, 타입 선언 없애고, 체인 비교 되고, f-string으로 포맷팅 깔끔하게.
처음엔 낯설지만 적응하면 C로 돌아가기 싫어진다. 특히 슬라이싱이랑 f-string은.

다음 편: 챕터 12~15 — List, Tuple, Set, Dictionary 자료구조 4총사

2026. 크래프톤 정글 2주차 | W3Schools Ch.01~11