초보자가 자주 놓치는 Python 문법 핵심 정리

python 마크가 포함되어있고 검은색 바탕에 노란색 네온사인 스타일

Python 문법은 간단해 보여도 들여쓰기, 자료형, 반복문 변수, 가변 객체에서 실수가 자주 발생합니다. 코드를 실행하기 전에 이 네 가지를 먼저 확인하면 오류를 크게 줄일 수 있습니다.

1. 들여쓰기는 선택이 아니라 문법입니다

Python은 중괄호 대신 들여쓰기로 코드 블록을 구분합니다. 같은 블록에 속한 문장은 들여쓰기 깊이가 같아야 하며, 일반적으로 공백 4칸을 사용합니다. 탭과 공백을 섞으면 오류가 발생할 수 있으므로 편집기의 자동 들여쓰기 설정을 확인하세요.

age = 20

if age >= 19:
    print("성인입니다")
else:
    print("미성년자입니다")

if, for, while, def, class 뒤에는 콜론(:)이 필요합니다. 콜론을 썼다면 다음 줄부터 들여쓰기한 블록이 이어져야 합니다.

2. =와 ==는 역할이 다릅니다

=는 값을 저장할 때 사용하고, ==는 두 값이 같은지 비교할 때 사용합니다. 조건문에서 값을 비교하려면 ==를 써야 합니다.

name = "민수"      # 값 저장

if name == "민수":  # 값 비교
    print("이름이 같습니다")

문자열 비교에서는 대소문자와 앞뒤 공백도 결과에 영향을 줍니다. 사용자 입력을 비교할 때는 필요하다면 strip()이나 lower()를 함께 고려하세요.

3. input()의 결과는 항상 문자열입니다

숫자를 입력받았더라도 input()은 문자열을 반환합니다. 계산이나 숫자 비교를 하려면 int() 또는 float()로 변환해야 합니다.

age = input("나이: ")

# 문자열 상태이므로 숫자 계산 전 변환
age = int(age)
print(age + 1)

숫자가 아닌 문자를 int()로 변환하면 ValueError가 발생합니다. 실제 프로그램에서는 입력값이 숫자인지 검사하는 과정이 필요할 수 있습니다.

4. for문은 값 자체를 순회합니다

Python의 for문은 목록의 인덱스를 자동으로 제공하지 않고, 기본적으로 각 요소를 하나씩 꺼냅니다. 위치 번호가 필요하면 enumerate()를 사용하는 편이 명확합니다.

fruits = ["사과", "바나나", "포도"]

for index, fruit in enumerate(fruits):
    print(index, fruit)

range()를 사용할 때는 끝 숫자가 포함되지 않는다는 점도 기억해야 합니다. range(3)은 0, 1, 2를 만들어 냅니다.

5. 리스트 복사는 예상과 다를 수 있습니다

리스트를 다른 변수에 그대로 대입하면 새 리스트가 생기는 것이 아니라 같은 객체를 가리키게 됩니다. 한쪽을 수정했는데 다른 쪽도 바뀐다면 이 참조 관계를 확인하세요.

original = [1, 2, 3]
copy_list = original.copy()

copy_list.append(4)
print(original)   # [1, 2, 3]
print(copy_list)  # [1, 2, 3, 4]

copy()는 일반적인 1차원 리스트 복사에 적합합니다. 리스트 안에 또 다른 리스트가 들어 있는 중첩 구조에서는 내부 객체까지 복사되는지 별도로 확인해야 합니다.

실행 전 확인 순서

  1. 콜론 뒤에 필요한 들여쓰기가 있는지 확인합니다.
  2. 값을 저장하는 곳과 비교하는 곳에서 =와 ==를 구분합니다.
  3. input()으로 받은 값을 계산 전에 적절한 자료형으로 변환합니다.
  4. for문에서 요소가 필요한지, 인덱스도 필요한지 구분합니다.
  5. 리스트를 복사하거나 수정할 때 같은 객체를 공유하고 있지 않은지 확인합니다.

Python 버전별 세부 동작이나 내장 함수 사용법이 헷갈릴 때는 사용 중인 Python 버전에 맞춰 Python 공식 문서의 언어 레퍼런스와 내장 함수 문서를 확인하세요. 문법 오류 메시지는 실행 환경과 작성한 줄을 함께 확인하는 것이 가장 빠릅니다.