이번에는 정수의 거듭제곱값 을 계산하는 반환하는 함수를 작성하여 봅시다. 함수의 이름은 power라고 하며 매개 변수는 x, y로 합니다.
은 어떻게 계산해야 할까요? 연산자 **을 사용해도 되지만 여기서는 반복문을 사용하여 직접 계산해봅시다.
는 x를 y번 곱한다는 의미이므로 반복문을 사용하여 y번 반복하면서 x를 곱하면 됩니다.
def power(x, y):
result = 1
for i in range(y):
result *= x
return result
print(power(10, 2))
<실행 결과>
100
파이썬 인터프리터는 함수가 정의되면 함수 안의 문장들을 실행하지 않습니다. 함수 정의가 아닌 문장들은 즉시 실행하게 됩니다.
따라서 아래와 같이 프로그램을 작성하면 오류가 발생합니다.
print(power(10, 2)) # 파이썬 인터프리터는 이 시점에서는 power() 함수에 대해 알 수 없습니다.
def power(x, y):
result = 1
for i in range(y):
result *= x
return result
<실행 결과>
NameError: name 'power' is not defined
하지만 함수 안에서 다른 함수를 호출하는 것은 얼마든지 허용됩니다. 따라서 다음과 같이 작성하는 것은 오류가 아닙니다.
def main():
print(power(10, 2))
def power(x, y):
result = 1
for i in range(y):
result *= x
return result
main()
<실행 결과>
100
power() 함수가 비록 나중에 정의되고 power()를 호출하는 문장이 먼저 나오지만 power()를 호출하는 문장이 main() 함수 안에 있기 때문에 전혀 문제가 없습니다.
따라서 파이썬 프로그램을 작성할 때, 모든 문장을 함수 안에 넣는 것도 좋습니다.
함수 중에서 가장 주된 역할을 하는 함수를 main()으로 지정하고 맨 끝에서 main()을 호출하면 아무런 문제가 발생하지 않습니다.
이것은 다른 프로그래밍 언어에서 사용하는 방식과 유사합니다.
1. 점심에 술마시는 모임, 점술회 회장 봉민이는 술을 너무 많이 마신 나머지 얼마 전 팩토리얼이 뭔지 까먹어 팩토리얼 계산을 하는 프로그램을 만들기로 하였습니다.
정수 n을 받아 1에서 n까지의 정수들의 곱을 구하는 팩토리얼 함수를 작성해봅시다. 팩토리얼 함수는 아래와 같이 정의됩니다.
n! = n * (n-1) * (n-2) * ... * 1
팩토리얼도 앞의 거듭 제곱 값을 구하는 함수와 유사하게 작성하면 됩니다. 다만 여기서는 곱해지는 값이 일정한 값 x가 아니고 루프 제어 변수가 됩니다.
2. 생일 축하를 해주는 함수 happyBirthday()를 작성해봅시다. 이 함수는 이름을 매개변수로 받으며 출력 결과는 아래와 같습니다.
<실행 결과>
이름을 입력하세요 : 김봉민
생일 축하 합니다~
생일 축하 합니다~
사랑하는 김봉민 (호우)
생일 축하 합니다!
3. 화씨 온도를 섭씨 온도로 변환하여 반환하는 함수 FtoC() 를 작성하고 아래의 실행 결과가 나오도록 프로그램을 작성해봅시다.
화씨 온도에서 섭씨 온도로 변환하는 공식은 아래와 같습니다.
<실행 결과>
화씨 온도를 입력하세요 : 32.0
섭씨 온도는 0.0 도 입니다.
4. 소수를 판별하는 is_prime() 함수를 작성하고 이를 통해 소수를 확인해봅시다.
<실행 결과>
정수를 입력하세요 : 101
101은(는) 소수입니다.
정수를 입력하세요 : 12
12은(는) 소수가 아닙니다.
소수를 판별하는 프로그램의 알고리즘은 아래와 같습니다.
사용자로부터 정수를 입력받아서 변수 n에 저장합니다.
for i in range(2, n):
n을 i로 나누어서 나머지가 0인지 봅니다.
나머지가 0이면 약수가 있는 것이므로 소수가 아닙니다.
반복이 정상적으로 종료되고 약수가 없다면 소수입니다.
5. 4번 문제를 이용하여 1부터 100 사이의 모든 소수를 찾는 프로그램을 작성해봅시다.
<실행 결과>
1부터 100 사이의 모든 소수는 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 입니다.