
#1. for 반복문을 이용한 구구단 출력
가장 일반적이고 직관적인 방법은 for 반복문을 사용하는 거예요. 이 방법은 이중(nested) for 문을 사용하여 2단부터 9단까지의 구구단을 모두 출력합니다.
# 2단부터 9단까지
for i in range(2, 10):
print(f'--- {i}단 ---')
# 1부터 9까지
for j in range(1, 10):
print(f'{i} x {j} = {i * j}')
print() # 단 사이에 공백 라인 추가
코드 분석
이 코드는 크게 세 부분으로 나눌 수 있습니다.
- 바깥쪽 for 반복문 (단 선택)
- for i in range(2, 10):
- range(2, 10) 함수는 2부터 9까지의 정수를 순서대로 생성합니다.
- i 변수는 2, 3, 4, ..., 9의 값을 차례로 가지며, 이는 **구구단의 '단'**을 의미합니다.
- 이 반복문은 총 8번(2단부터 9단까지) 실행됩니다.
- 안쪽 for 반복문 (곱셈 연산)
- for j in range(1, 10):
- range(1, 10) 함수는 1부터 9까지의 정수를 순서대로 생성합니다.
- j 변수는 1, 2, 3, ..., 9의 값을 차례로 가지며, 이는 각 단에서 곱해지는 수를 의미합니다.
- 이 반복문은 바깥쪽 반복문이 한 번 실행될 때마다 총 9번씩 실행됩니다.
- 출력 부분
- print(f'--- {i}단 ---')
- 바깥쪽 반복문이 시작될 때마다 현재 i 값이 나타내는 단의 제목을 출력합니다.
- print(f'{i} x {j} = {i * j}')
- 안쪽 반복문이 실행될 때마다 **i**와 **j**의 곱셈 결과를 형식 문자열(f-string)로 출력합니다.
- print()
- 각 단의 출력이 끝난 후, 다음 단과 구분하기 위해 한 줄을 띄웁니다.
코드의 동작 원리
코드는 다음과 같은 순서로 실행됩니다.
- i가 2일 때, **--- 2단 ---**을 출력하고, 안쪽 for 문으로 들어갑니다.
- 안쪽 for 문에서 j가 1부터 9까지 차례로 증가하며 2 x 1 = 2, 2 x 2 = 4, ..., **2 x 9 = 18**을 출력합니다.
- 안쪽 for 문이 끝나면, 빈 줄을 출력하고 바깥쪽 for 문으로 돌아갑니다.
- i가 3이 되고, 위 과정을 9단까지 반복합니다.
- i가 9일 때 안쪽 for 문이 완료되면, 바깥쪽 for 문도 종료되어 프로그램이 끝납니다.
#2. while 반복문을 이용한 구구단 출력
while 문을 사용하면 for 문과 비슷한 결과를 얻을 수 있어요. for 문이 특정 횟수만큼 반복하는 데 유용한 반면, while 문은 특정 조건이 참인 동안 반복할 때 유용하죠.
i = 2
while i < 10:
print(f'--- {i}단 ---')
j = 1
while j < 10:
print(f'{i} x {j} = {i * j}')
j += 1
i += 1
print() # 단 사이에 공백 라인 추가
코드 분석
이 코드는 두 개의 while 반복문으로 구성되어 있습니다.
- 바깥쪽 while 반복문 (단 선택)
- i = 2: i 변수를 2로 초기화합니다. 이 변수는 구구단의 '단'을 나타냅니다.
- while i < 10:: i가 10보다 작은 동안 반복을 계속합니다. i가 2부터 시작하여 9까지 증가하므로 2단부터 9단까지 처리하게 됩니다.
- i += 1: 각 단의 출력이 끝날 때마다 i의 값을 1씩 증가시켜 다음 단으로 넘어갑니다. 이 줄이 없으면 무한 루프에 빠지게 됩니다.
- 안쪽 while 반복문 (곱셈 연산)
- j = 1: 바깥쪽 while 문이 한 번 실행될 때마다 j를 1로 초기화합니다. 이 변수는 각 단에서 곱해지는 수를 나타냅니다.
- while j < 10:: j가 10보다 작은 동안 반복을 계속합니다. j가 1부터 시작하여 9까지 증가하므로 각 단의 1부터 9까지의 곱셈을 처리합니다.
- j += 1: 안쪽 반복문이 한 번 실행될 때마다 j의 값을 1씩 증가시킵니다. 이 줄이 없으면 역시 무한 루프에 빠지게 됩니다.
- 출력 부분
- print(f'--- {i}단 ---'): 바깥쪽 while 문이 시작될 때마다 현재 i 값이 나타내는 단의 제목을 출력합니다.
- print(f'{i} x {j} = {i * j}'): 안쪽 while 문이 실행될 때마다 **i**와 **j**의 곱셈 결과를 형식 문자열(f-string)로 출력합니다.
- print(): 각 단의 출력이 끝난 후, 다음 단과 구분하기 위해 한 줄을 띄웁니다.
코드의 동작 원리
코드는 다음과 같은 순서로 실행됩니다.
- i가 2로 초기화되고 while i < 10 조건이 참이므로 바깥쪽 반복문이 시작됩니다.
- --- 2단 ---이 출력됩니다.
- j가 1로 초기화되고 while j < 10 조건이 참이므로 안쪽 반복문이 시작됩니다.
- 2 x 1 = 2, 2 x 2 = 4... 와 같이 2단이 모두 출력될 때까지 j는 1씩 증가하며 반복됩니다.
- j가 10이 되면 안쪽 while 문이 종료됩니다.
- i가 1 증가하여 3이 됩니다.
- 빈 줄이 출력됩니다.
- while i < 10 조건이 다시 참이므로 위 과정을 9단까지 반복합니다.
- i가 10이 되면 while i < 10 조건이 거짓이 되어 모든 반복문이 종료됩니다.
#3. 리스트 컴프리헨션을 이용한 구구단 출력
구구단 전체를 리스트 안에 저장한 후 출력하고 싶다면 리스트 컴프리헨션을 사용할 수 있어요. 코드를 더 간결하게 만들 수 있는 방법이에요.
# 2단부터 9단까지의 모든 결과를 리스트에 저장
gugudan_list = [f'{i} x {j} = {i * j}' for i in range(2, 10) for j in range(1, 10)]
# 리스트의 내용을 순차적으로 출력
for item in gugudan_list:
print(item)
코드 분석
이 코드는 두 부분으로 구성됩니다.
- 리스트 컴프리헨션: gugudan_list = [f'{i} x {j} = {i * j}' for i in range(2, 10) for j in range(1, 10)]
- 이 한 줄이 2단부터 9단까지의 모든 구구단 결과를 리스트에 저장합니다.
- []: 대괄호는 새로운 리스트를 생성한다는 것을 의미합니다.
- for i in range(2, 10): 바깥쪽 반복문으로, 구구단의 '단'에 해당하는 i 변수를 2부터 9까지 순회합니다.
- for j in range(1, 10): 안쪽 반복문으로, 각 단에 곱해지는 수인 j 변수를 1부터 9까지 순회합니다.
- f'{i} x {j} = {i * j}': 이 부분은 반복될 때마다 리스트에 추가될 항목입니다. f-string을 사용하여 {i} x {j} = {i * j}와 같은 형식의 문자열을 생성합니다.
- for i ... for j의 순서로 인해 2단, 3단... 순서로 결과가 리스트에 저장됩니다.
- 리스트 출력: for item in gugudan_list: print(item)
- 새롭게 생성된 gugudan_list를 순회하는 간단한 for 반복문입니다.
- 리스트의 각 요소를 item 변수에 할당하고, print(item)을 통해 각 구구단 문자열을 한 줄씩 출력합니다.
코드의 동작 원리
이 코드는 다음과 같은 순서로 실행됩니다.
- 파이썬은 리스트 컴프리헨션의 바깥쪽 반복문(for i...)부터 시작합니다.
- i가 2일 때, 안쪽 반복문(for j...)이 실행되어 j가 1부터 9까지 순회합니다.
- 이때마다 2 x 1 = 2, 2 x 2 = 4, ..., 2 x 9 = 18 문자열이 차례로 gugudan_list에 추가됩니다.
- 안쪽 반복문이 끝나면, 바깥쪽 반복문은 i를 3으로 변경하고 다시 안쪽 반복문을 실행하여 3단 결과를 리스트에 추가합니다.
- 이 과정은 i가 9일 때까지 계속되며, 최종적으로 gugudan_list에는 총 8 x 9 = 72개의 구구단 문자열이 저장됩니다.
- 이후 for item in gugudan_list: 반복문을 통해 리스트의 모든 항목이 순차적으로 화면에 출력됩니다.
#4. 함수를 이용한 구구단 출력
코드를 재사용하고 싶다면 구구단 출력 로직을 함수로 만들어 보세요. 특정 단만 출력하거나 전체 구구단을 출력하는 등 다양한 상황에 활용할 수 있어요.
def print_gugudan(dan=None):
if dan:
# 특정 단만 출력
print(f'--- {dan}단 ---')
for j in range(1, 10):
print(f'{dan} x {j} = {dan * j}')
else:
# 전체 구구단 출력
for i in range(2, 10):
print(f'--- {i}단 ---')
for j in range(1, 10):
print(f'{i} x {j} = {i * j}')
print()
# 함수 사용 예시
print_gugudan(3) # 3단만 출력
print('\n' + '='*20 + '\n')
print_gugudan() # 전체 구구단 출력
코드 분석
함수 분석: print_gugudan(dan=None)
- 함수 정의: def print_gugudan(dan=None):
- def 키워드는 새로운 함수를 정의합니다.
- print_gugudan은 함수의 이름입니다.
- dan=None은 매개변수입니다. dan에 값을 전달하지 않으면 기본값인 None이 할당됩니다. 이 None 값이 함수 내부에서 조건 분기를 결정하는 중요한 역할을 합니다.
- 조건문: if dan:
- if dan:은 dan 변수에 값이 있는지 확인하는 조건문입니다.
- dan이 None이 아닌 참(True) 값(예: 숫자 3)일 경우, 이 조건이 충족되어 특정 단을 출력하는 코드가 실행됩니다.
- print(f'--- {dan}단 ---')을 통해 전달된 단의 제목을 출력합니다.
- for j in range(1, 10):를 사용하여 해당 단의 1부터 9까지의 곱셈 결과를 출력합니다.
- else 블록 (전체 구구단 출력):
- dan에 값이 전달되지 않아 dan이 None일 경우, if 조건이 **거짓(False)**이 되어 else 블록의 코드가 실행됩니다.
- 이 블록은 이중 for 반복문을 사용하여 2단부터 9단까지의 전체 구구단을 출력합니다.
- 바깥쪽 for i in range(2, 10):는 2단부터 9단까지의 단을 반복합니다.
- 안쪽 for j in range(1, 10):는 각 단의 1부터 9까지의 곱셈을 반복합니다.
- 각 단이 끝날 때마다 print()를 통해 줄 바꿈하여 가독성을 높입니다.
함수 사용 예시 분석
- print_gugudan(3):
- dan 매개변수에 **3**이라는 값이 전달됩니다.
- 함수 내부의 if dan: 조건이 참이 되어 3단만 출력하는 코드가 실행됩니다.
- print('\n' + '='*20 + '\n'):
- 출력 결과를 구분하기 위해 단순히 줄 바꿈과 기호로 된 구분선을 출력합니다.
- print_gugudan():
- dan 매개변수에 아무 값도 전달되지 않아 기본값인 **None**이 할당됩니다.
- 함수 내부의 if dan: 조건이 거짓이 되어 else 블록의 코드가 실행되고, 전체 구구단을 출력합니다.
이 코드는 함수화와 매개변수 활용의 좋은 예시로, 동일한 기능을 수행하는 코드를 재사용하고 상황에 따라 다르게 동작하도록 만들 수 있음을 보여줍니다.

'파이썬(문제풀이)' 카테고리의 다른 글
| 파이썬 2025년 a월 b일은 무슨 요일인지? (0) | 2025.09.11 |
|---|---|
| 파이썬 숫자가 주어지면 소수인지 아닌지 판별 (0) | 2025.09.10 |
| 파이썬 1에서 100가지 더하기 (0) | 2025.09.09 |
| 파이썬 날짜와 시간을 출력하는 다양한 방법 (0) | 2025.09.09 |
| 파이썬 - 평균 점수 구하기 (0) | 2025.09.09 |