파이썬의 비밀스러운 삶: 조용한 타입 (타입 캐스팅)
Source: Dev.to
The Problem
Timothy는 간단한 추측 게임을 만들었지만, 정답 번호를 입력해도 프로그램이 틀렸다고 알려줍니다.
# Timothy's Guessing Game
secret_number = 7
guess = input("Guess the number (1-10): ")
if guess == secret_number:
print("You won! Amazing!")
else:
print(f"Sorry, you guessed {guess}, but the number was {secret_number}.")
Output
Guess the number (1-10): 7
Sorry, you guessed 7, but the number was 7.
Why It Happens: Strong Typing in Python
input()은 항상 문자열(str)을 반환합니다.secret_number는 정수(int)입니다.
Python은 서로 다른 타입의 값을 비교할 때 암시적 타입 변환을 수행하지 않습니다. 따라서 guess == secret_number 비교는 '7'(문자열)과 7(정수)이 다르기 때문에 False가 됩니다.
비유: 개의 사진과 실제 개를 비교하는 것— 겉보기엔 비슷해 보여도 근본적으로 다른 객체입니다.
The Fix: Explicit Type Casting
input() 호출을 int()(또는 적절한 다른 캐스트)로 감싸서 입력된 텍스트를 정수로 변환합니다.
# Timothy's Fixed Game
secret_number = 7
# Convert the input string to an integer
guess = int(input("Guess the number (1-10): "))
if guess == secret_number:
print("You won! Amazing!")
else:
print(f"Sorry, you guessed {guess}, but the number was {secret_number}.")
Output
Guess the number (1-10): 7
You won! Amazing!
Important Note
사용자가 "seven"처럼 숫자가 아닌 단어를 입력하면 int()가 ValueError를 발생시킵니다. 이러한 경우를 부드럽게 처리하는 방법(예: try/except 또는 입력 검증)은 다음 강의에서 다룰 주제입니다.
Quick Reference: Common Casts
int("5")→5(정수)float("5")→5.0(소수)str(5)→"5"(문자열, 연결이나 출력에 유용)
int("hello")를 시도하면 ValueError가 발생합니다.
Takeaways
- 규칙:
input()은 사용자가 무엇을 입력하든 문자열을 반환합니다. - 해결책: 기대하는 데이터 타입에 맞게 명시적 타입 캐스팅(
int(),float()등)을 사용합니다. - 이점: Python의 엄격한 타입 시스템은 타입이 맞지 않는 연산을 방지해 더 명확하고 신뢰성 있는 코드를 작성하도록 돕습니다.
Looking Ahead
다음 에피소드에서 Timothy는 **“The Phantom Copy”**를 만나게 됩니다. 여기서는 리스트를 복사할 때 백업 리스트가 예상치 못하게 변경되는 상황을 다루며, 가변 객체 참조의 전형적인 사례를 보여줍니다.