
def is_even_or_odd(number) :
if number % 2 == 0 :
return "짝수"
else :
return "홀수"
print(is_even_or_odd(4))
print(is_even_or_odd(7))
코드 분석
이 코드는 **is_even_or_odd**라는 함수를 정의하고, 이 함수를 사용하여 두 개의 예시 숫자(4와 7)가 짝수인지 홀수인지 판별하여 출력합니다.
- def is_even_or_odd(number):
- is_even_or_odd라는 이름의 함수를 정의합니다.
- 이 함수는 **number**라는 하나의 매개변수(입력 값)를 받습니다.
- if number % 2 == 0:
- if문은 조건을 검사하는 구문입니다.
- %는 나머지 연산자입니다. number % 2는 number를 2로 나눈 나머지를 구합니다.
- == 0는 나머지가 0과 같은지 확인하는 조건입니다.
- 어떤 정수든 2로 나누어 나머지가 0이면 그 숫자는 짝수입니다.
- return "짝수"
- 위 if문의 조건(number를 2로 나눈 나머지가 0)이 참일 경우, 함수는 문자열 "짝수"를 반환(결과로 돌려줌)하고 종료됩니다.
- else:
- if문의 조건이 거짓일 경우 실행되는 구문입니다. 즉, number를 2로 나눈 나머지가 0이 아닐 경우(나머지가 1인 경우)에 해당합니다.
- return "홀수"
- else 구문이 실행될 경우, 함수는 문자열 "홀수"를 반환하고 종료됩니다.
실행 결과
- print(is_even_or_odd(4))
- is_even_or_odd 함수에 4를 입력합니다.
- 4 % 2의 값은 0이므로, if 조건이 참이 되어 "짝수"가 반환됩니다.
- 따라서 **"짝수"**가 출력됩니다.
- print(is_even_or_odd(7))
- is_even_or_odd 함수에 7을 입력합니다.
- 7 % 2의 값은 1이므로, if 조건이 거짓이 되어 else 구문이 실행되고 "홀수"가 반환됩니다.
- 따라서 **"홀수"**가 출력됩니다.
정수가 아닌 경우의 문제점
- 실수(float)를 입력할 경우:
- print(is_even_or_odd(3.5))
- 3.5 % 2 연산 자체는 파이썬에서 유효합니다. 이 경우 결과는 1.5입니다.
- if 1.5 == 0: 조건이 거짓이 되므로 else 구문이 실행되어 "홀수"가 반환됩니다.
- 하지만 수학적으로 3.5는 짝수나 홀수로 정의되지 않기 때문에, "홀수"라는 결과는 논리적으로 올바르지 않습니다.
- 문자열(string)을 입력할 경우:
- print(is_even_or_odd("안녕"))
- "안녕" % 2는 **TypeError**를 발생시킵니다.
- % 연산자는 숫자 타입에만 적용할 수 있기 때문에, 문자열과 같은 다른 타입에서는 오류가 발생하며 프로그램이 멈춥니다.
개선된 함수
이러한 문제를 해결하기 위해, 함수 시작 부분에 입력 값이 정수인지 확인하는 로직을 추가할 수 있습니다.
def is_even_or_odd(number):
"""
주어진 숫자가 짝수인지 홀수인지 판별하는 함수 (정수 확인 기능 추가)
"""
if not isinstance(number, int):
return "오류: 정수만 입력할 수 있습니다."
if number % 2 == 0:
return "짝수"
else:
return "홀수"
# 사용 예시
print(is_even_or_odd(4))
print(is_even_or_odd(3.5))
print(is_even_or_odd("파이썬"))
개선된 코드 분석
- isinstance(number, int): 이 함수는 number의 타입이 int(정수)인지 확인합니다.
- if not isinstance(number, int):: 만약 number의 타입이 정수가 아니면 이 조건이 참이 됩니다.
- return "오류: 정수만 입력할 수 있습니다.": 입력 값이 정수가 아닐 경우, 의미 없는 결과를 반환하는 대신 오류 메시지를 반환하여 사용자에게 잘못된 입력이 있었음을 명확하게 알려줍니다.
이처럼 함수를 만들 때, 예상치 못한 입력에 대해 어떻게 처리할 것인지 고려하는 것은 견고하고 신뢰성 있는 코드를 작성하는 데 매우 중요합니다.
실행결과
짝수
오류 : 정수만 입력할 수 있습니다.
오류 : 정수만 입력할 수 있습니다.
isinstance()는 파이썬에서 객체가 특정 클래스나 타입의 인스턴스인지 확인하는 함수입니다. 이 함수는 프로그램의 안정성을 높이는 데 유용하며, 예상치 못한 타입의 입력이 들어왔을 때 오류를 방지하는 역할을 합니다.
기본 사용법
isinstance() 함수는 두 개의 인수를 받습니다.
- object: 타입을 확인할 객체.
- classinfo: 비교 대상이 되는 클래스, 타입, 또는 튜플.
구문: isinstance(object, classinfo)
예시
아래 예시를 통해 isinstance() 함수가 어떻게 사용되는지 살펴보겠습니다.
x = 10
y = 3.14
z = "hello"
# x가 정수(int) 타입인지 확인
print(isinstance(x, int)) # True
# y가 정수(int) 타입인지 확인
print(isinstance(y, int)) # False
# y가 실수(float) 타입인지 확인
print(isinstance(y, float)) # True
# z가 문자열(str) 타입인지 확인
print(isinstance(z, str)) # True
복수 타입 확인
isinstance()는 여러 타입을 동시에 확인할 수도 있습니다. classinfo 인수에 튜플 형태로 여러 타입을 지정하면 됩니다.
num = 100
# num이 정수(int) 또는 실수(float) 타입인지 확인
print(isinstance(num, (int, float))) # True
text = "Python"
# text가 정수(int) 또는 문자열(str) 타입인지 확인
print(isinstance(text, (int, str))) # True
type() 함수와의 차이점
isinstance()와 비슷하게 객체의 타입을 확인하는 type() 함수도 있습니다. 하지만 두 함수에는 중요한 차이점이 있습니다.
- type(): 정확히 일치하는 타입만 확인합니다. 상속 관계를 고려하지 않습니다.
- isinstance(): 상속 관계를 포함하여 타입을 확인합니다. 즉, 객체가 특정 클래스의 인스턴스이거나 그 클래스의 자식 클래스 인스턴스인 경우에도 True를 반환합니다.
Python
class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
# isinstance()는 상속 관계를 인식
print(isinstance(dog, Dog)) # True (Dog 클래스의 인스턴스)
print(isinstance(dog, Animal)) # True (Animal 클래스의 자식 클래스 인스턴스이므로)
# type()은 상속 관계를 인식하지 못함
print(type(dog) == Dog) # True
print(type(dog) == Animal) # False

'파이썬(문제풀이)' 카테고리의 다른 글
| 파이썬 주민등록번호를 분석하여 성별을 판별하는 프로그램 (0) | 2025.09.15 |
|---|---|
| 파이썬 주민등록번호 분리 (0) | 2025.09.14 |
| 파이썬 준이의 평균 점수 (0) | 2025.09.12 |
| 파이썬 대소문자 바꿔서 출력하기 (0) | 2025.09.11 |
| 파이썬 10진수를 이진수로 (0) | 2025.09.11 |