
파이썬에서 2제곱, 3제곱, 4제곱을 구하는 방법은 여러 가지가 있다. 다음은 몇 가지 대표적인 방법들이다.
#1. 거듭제곱 연산자 ** 사용
가장 간단하고 직관적인 방법입니다. ** 연산자는 좌측 피연산자를 우측 피연산자만큼 거듭제곱합니다.
# 2의 2제곱, 3제곱, 4제곱
num = 2
print(f"2의 2제곱: {num**2}")
print(f"2의 3제곱: {num**3}")
print(f"2의 4제곱: {num**4}")
# 출력
# 2의 2제곱: 4
# 2의 3제곱: 8
# 2의 4제곱: 16
코드 분석
#2. pow() 함수 사용
pow(x, y) 함수는 x의 y제곱을 계산합니다. 이 함수는 거듭제곱 연산자와 동일한 기능을 제공하며, 가독성이 더 좋다고 생각하는 사람들도 있습니다.
# 3의 2제곱, 3제곱, 4제곱
num = 3
print(f"3의 2제곱: {pow(num, 2)}")
print(f"3의 3제곱: {pow(num, 3)}")
print(f"3의 4제곱: {pow(num, 4)}")
# 출력
# 3의 2제곱: 9
# 3의 3제곱: 27
# 3의 4제곱: 81
#3. math.pow() 함수 사용
math 모듈의 pow() 함수도 거듭제곱을 계산하는 데 사용됩니다. 이 함수는 부동 소수점(float) 결과를 반환하므로, 정수 연산을 원할 경우 int()로 형 변환해야 할 수 있습니다.
import math
# 4의 2제곱, 3제곱, 4제곱
num = 4
print(f"4의 2제곱: {math.pow(num, 2)}")
print(f"4의 3제곱: {math.pow(num, 3)}")
print(f"4의 4제곱: {math.pow(num, 4)}")
# 출력
# 4의 2제곱: 16.0
# 4의 3제곱: 64.0
# 4의 4제곱: 256.0
#4. 반복문(for 또는 while) 사용
거듭제곱의 수학적 정의를 직접 구현하는 방법입니다. 반복문을 사용하면 곱셈을 여러 번 수행하여 결과를 얻을 수 있습니다. 이는 컴퓨터가 내부적으로 거듭제곱을 계산하는 원리와 유사합니다.
# for 반복문을 사용한 5의 3제곱
base = 5
exponent = 3
result = 1
for _ in range(exponent):
result *= base
print(f"5의 3제곱: {result}")
# while 반복문을 사용한 6의 2제곱
base = 6
exponent = 2
result = 1
while exponent > 0:
result *= base
exponent -= 1
print(f"6의 2제곱: {result}")
For 반복문 코드 분석
첫 번째 부분은 for 반복문을 이용해 5의 3제곱()을 계산합니다.
- base = 5: 거듭제곱의 밑이 되는 값 5를 base 변수에 할당합니다.
- exponent = 3: 지수(몇 번 곱할지) 값 3을 exponent 변수에 할당합니다.
- result = 1: 결과 값을 저장할 변수 result를 1로 초기화합니다. 거듭제곱은 곱셈이므로, 0이 아닌 1부터 시작해야 올바른 결과가 나옵니다.
- for _ in range(exponent):: exponent 값인 3만큼 반복합니다. _는 반복 횟수만 필요하고 변수 값은 사용하지 않을 때 관례적으로 사용됩니다.
- result *= base: 반복할 때마다 result 변수에 base 값을 곱합니다.
- 1번째 반복: result는 1 * 5로 5가 됩니다.
- 2번째 반복: result는 5 * 5로 25가 됩니다.
- 3번째 반복: result는 25 * 5로 125가 됩니다.
- print(f"5의 3제곱: {result}"): 최종 결과인 125를 출력합니다.
While 반복문 코드 분석
두 번째 부분은 while 반복문을 이용해 6의 2제곱()을 계산합니다.
- base = 6: 거듭제곱의 밑이 되는 값 6을 base 변수에 할당합니다.
- exponent = 2: 지수 값 2를 exponent 변수에 할당합니다.
- result = 1: 결과 값을 저장할 변수 result를 1로 초기화합니다.
- while exponent > 0:: exponent의 값이 0보다 클 때까지 반복합니다.
- result *= base: for문과 마찬가지로, 반복할 때마다 result에 base 값을 곱합니다.
- 1번째 반복: result는 1 * 6으로 6이 됩니다.
- exponent -= 1: 반복할 때마다 exponent의 값을 1씩 감소시킵니다.
- 1번째 반복 후 exponent는 1이 됩니다.
- 2번째 반복: result는 6 * 6으로 36이 됩니다. exponent는 0이 되어 반복문이 종료됩니다.
- print(f"6의 2제곱: {result}"): 최종 결과인 36을 출력합니다.
두 예제 모두 거듭제곱이 밑을 지수만큼 곱하는 과정이라는 수학적 개념을 코드로 직접 구현했다는 점에서 의미가 있습니다.
#5. 팩토리 함수를 사용한 거듭제곱 계산
이 코드는 PowerCalculator 클래스를 팩토리 함수의 역할을 하는 create_power_calculator() 함수를 통해 생성합니다. 이 함수는 어떤 제곱을 계산할지(2제곱, 3제곱, 4제곱)를 결정하여 적절한 PowerCalculator 인스턴스를 반환합니다.
# 거듭제곱을 계산하는 클래스
class PowerCalculator:
def __init__(self, exponent):
"""
초기화 시 거듭제곱할 지수(exponent)를 설정합니다.
"""
self.exponent = exponent
def calculate(self, number):
"""
주어진 숫자를 미리 설정된 지수만큼 거듭제곱하여 반환합니다.
"""
return number ** self.exponent
# 팩토리 함수
def create_power_calculator(exponent_type):
"""
팩토리 함수: exponent_type에 따라 적절한 PowerCalculator 객체를 생성하여 반환합니다.
"""
if exponent_type == 'square':
return PowerCalculator(2)
elif exponent_type == 'cube':
return PowerCalculator(3)
elif exponent_type == 'fourth':
return PowerCalculator(4)
else:
raise ValueError("지원하지 않는 제곱 타입입니다. ('square', 'cube', 'fourth' 중 하나를 선택하세요)")
# 팩토리 함수를 사용하여 객체 생성 및 사용
square_calc = create_power_calculator('square') # 2제곱 계산기 생성
print(f"5의 2제곱: {square_calc.calculate(5)}") # 출력: 5의 2제곱: 25
cube_calc = create_power_calculator('cube') # 3제곱 계산기 생성
print(f"3의 3제곱: {cube_calc.calculate(3)}") # 출력: 3의 3제곱: 27
fourth_calc = create_power_calculator('fourth') # 4제곱 계산기 생성
print(f"2의 4제곱: {fourth_calc.calculate(2)}") # 출력: 2의 4제곱: 16
코드 분석
이 코드는 크게 세 부분으로 나눌 수 있습니다: PowerCalculator 클래스, create_power_calculator 팩토리 함수, 그리고 이들을 사용하는 부분입니다.
1. PowerCalculator 클래스
- class PowerCalculator:: 이 클래스는 실제 거듭제곱 계산을 담당하는 제품(Product) 역할을 합니다.
- def __init__(self, exponent):: 이 생성자는 객체가 생성될 때 호출되며, exponent (지수) 값을 인스턴스 변수로 저장합니다. 예를 들어, PowerCalculator(2)는 2제곱을 위한 계산기를 만듭니다.
- def calculate(self, number):: 이 메서드는 주어진 **number (밑)**를 생성자에서 설정된 지수만큼 거듭제곱하여 결과를 반환합니다. number ** self.exponent 구문을 통해 계산이 이루어집니다.
2. create_power_calculator 팩토리 함수
- def create_power_calculator(exponent_type):: 이 함수가 바로 팩토리(Factory) 역할을 합니다. 이 함수는 문자열('square', 'cube', 'fourth')을 입력받아 어떤 종류의 PowerCalculator 객체를 만들지 결정합니다.
- if...elif...else: 이 조건문을 통해 exponent_type 값에 따라 PowerCalculator 클래스의 인스턴스를 동적으로 생성합니다. 예를 들어, 'square'를 입력받으면 PowerCalculator(2) 객체를 생성하여 2제곱을 계산할 수 있는 계산기를 반환합니다.
- raise ValueError(...): 만약 지원하지 않는 타입이 입력되면 오류를 발생시켜 잘못된 사용을 방지합니다.
3. 객체 생성 및 사용
- square_calc = create_power_calculator('square'): create_power_calculator 함수를 호출하여 2제곱을 계산하는 객체를 square_calc 변수에 할당합니다. 사용자는 PowerCalculator 클래스의 이름을 직접 호출하지 않아도 됩니다.
- print(f"5의 2제곱: {square_calc.calculate(5)}"): 생성된 square_calc 객체의 calculate() 메서드를 호출하여 5의 2제곱을 계산합니다.
- cube_calc와 fourth_calc도 마찬가지로, 각각 3제곱과 4제곱을 계산하는 객체를 팩토리 함수를 통해 생성하고 사용합니다.
핵심 개념
이 코드는 팩토리 디자인 패턴의 좋은 예시입니다.
- 객체 생성 로직을 캡슐화: 사용자는 create_power_calculator 함수만 알면 원하는 계산기 객체를 얻을 수 있습니다. 객체가 어떻게 생성되는지(예: PowerCalculator 클래스가 필요하다는 것)를 몰라도 됩니다.
- 결합도(Coupling)를 낮춤: 팩토리 함수를 사용함으로써, 클라이언트 코드(객체를 사용하는 부분)가 특정 클래스(PowerCalculator)에 직접적으로 종속되지 않습니다. 만약 나중에 5제곱 계산기가 추가되더라도, create_power_calculator 함수만 수정하면 되고, 클라이언트 코드는 변경할 필요가 없습니다.

'파이썬(문제풀이)' 카테고리의 다른 글
| 파이썬 리스트 [100, 300, 400, 500, 700]에서 400, 500를 삭제 (0) | 2025.09.19 |
|---|---|
| 파이썬 1에서 1000까지의 자연수중 3의 배수의 합 (0) | 2025.09.19 |
| 파이썬 일렬로 나열된 숫자의 자릿수 합 (0) | 2025.09.16 |
| 파이썬 최대값을 반환 (0) | 2025.09.15 |
| 파이썬 주민등록번호를 분석하여 성별을 판별하는 프로그램 (0) | 2025.09.15 |