문법 실수(들여쓰기와 대입, 괄호)
1. 들여쓰기 오류
if True:
print("Hello, Python!")
문제점: 파이썬은 들여쓰기로 코드 블록을 구분합니다.
이 코드는 IndentationError
가 발생합니다.
if True:
print("Hello, Python!")
해석: 조건문 내부의 코드는 들여쓰기를 해야 합니다.
파이썬에서는 들여쓰기가 문법의 일부이며, 보통 스페이스 4칸이 기본입니다.
2. 비교 연산자와 대입 연산자 혼동
if x = 5:
print("x는 5입니다.")
문제점: =는 할당, ==는 비교입니다.
if x == 5:
print("x는 5입니다.")
해석: 조건문에서는 값을 비교해야 하므로 반드시 ==
을 사용해야 합니다.=
는 값을 변수에 넣는 것이기 때문에 조건식에는 적절하지 않습니다.
3. 괄호 생략
print "Hello, world!"
문제점: 파이썬 3에서는 괄호 없는 print는 SyntaxError
를 발생시킵니다.
print("Hello, world!")
해석: 파이썬 3에서는 print()
는 함수로 정의되어 있으므로 항상 괄호를 포함해야 합니다.
자료형 실수(문자열, 숫자, 리스트)
1. 문자열과 숫자 연결
age = 25
print("나이는 " + age + "세입니다.")
문제점: 문자열 + 숫자 조합은 TypeError
를 발생시킵니다.
print("나이는 " + str(age) + "세입니다.")
# 또는
print(f"나이는 {age}세입니다.")
해석: 파이썬에서는 문자열과 정수를 직접 더할 수 없습니다.str()
로 형변환하거나 f-string을 사용하는 것이 일반적입니다.
2. 리스트 복사 문제 (얕은 복사)
a = [1, 2, 3]
b = a
b[0] = 100
print(a) # [100, 2, 3]
문제점: 두 리스트는 같은 객체를 참조하고 있어 하나를 변경하면 다른 것도 바뀝니다.
b = a[:]
해석: 슬라이싱(a[:]
)을 사용하면 리스트의 복사본을 새롭게 만들 수 있습니다.
이는 원본과 독립적으로 작동하는 별도의 리스트가 됩니다.
3. None과 False의 혼동
x = None
if x == False:
print("거짓입니다.")
문제점: None은 False가 아닙니다. 조건문이 실행되지 않습니다.
if x is None:
print("값이 없습니다.")
해석: None은 값이 없음을 의미하는 객체입니다. 비교에는 is None
을 사용합니다.
함수 실수(함수, 반복문)
1. 함수 호출 괄호 생략
def greet():
return "안녕하세요!"
print(greet) # 출력: <function greet at 0x...>
print(greet())
해석: greet
는 함수의 참조이고, greet()
는 실제 호출입니다.
함수를 실행하려면 괄호를 반드시 붙여야 원하는 결과가 출력됩니다.
2. 반복문에서 인덱스 사용 실수
fruits = ["사과", "바나나", "포도"]
for i in range(len(fruits)):
print(fruits[i])
문제점: 리스트를 직접 순회하는 것이 더 간단하고 가독성 좋습니다.
for fruit in fruits:
print(fruit)
해석: 파이썬에서는 리스트나 튜플 등 순회 가능한 객체를 직접 순회하는 것이 더 권장됩니다.
불필요한 인덱스 계산을 줄이고 코드가 간결해집니다.
3. 리스트에 값 추가할 때 append와 + 혼동
my_list = [1, 2, 3]
my_list += 4 # TypeError
문제점: +=는 리스트와 리스트끼리만 사용할 수 있습니다.
my_list.append(4) # [1, 2, 3, 4]
해석: append()
는 리스트에 하나의 요소를 추가합니다.+
나 +=
연산은 같은 자료형끼리만 가능하므로 리스트에 정수를 더하려면 append
를 사용해야 합니다.
마무리
파이썬을 처음 배우는 사람이라면 위와 같은 실수를 한 번쯤은 경험하게 됩니다.
실수는 학습의 일부이며, 중요한 것은 실수를 통해 원리를 이해하고 고쳐나가는 것입니다.
이 글에서 소개한 실수들을 기억하고, 같은 상황에서 빠르게 원인을 파악할 수 있다면 여러분은 훨씬 빠르게 실력을 키울 수 있을 것입니다.