HOWTO · Python

기본 프로그래밍 개념을 사용하여 Python에서 곱셈 테이블 인쇄

이 문서에서는 Python의 기본 프로그래밍 개념을 곱셈표 예제로 설명합니다. 사용자가 지정한 수와 배수 범위에 대한 곱셈표를 출력하는 방법을 다룹니다.

이 페이지의 내용

곱셈표를 만들면 Python의 입력, 정수 변환, 반복문, 문자열 서식을 함께 연습할 수 있습니다. 첫 번째 프로그램은 선택한 수에 1부터 9까지의 수를 곱하고, 두 피연산자의 순서를 바꾼 결과도 출력합니다. 두 번째 프로그램에서는 배수의 시작값과 끝값을 포함하는 범위를 지정할 수 있습니다.

Python에서 사용하는 개념 이해하기

변수는 값에 이름을 붙입니다. 예를 들어 선택한 수를 table_of라는 변수에 저장할 수 있습니다. input() 함수는 안내 문구를 표시하고 사용자가 입력한 내용을 텍스트로 돌려줍니다. 곱셈에는 숫자가 필요하므로 그 텍스트를 int()로 감싸 정수로 변환합니다. 대화형 터미널 없이 실행할 때는 이 예제들이 기본값을 사용합니다. 터미널에서 실행한다면 요청된 정수를 입력하세요.

for 반복문은 range()가 만드는 각 값에 대해 들여쓴 본문을 한 번씩 실행합니다. range(start, stop)에서 끝값은 포함되지 않으므로 range(1, 10)은 1부터 9까지를 순회합니다. 사용자가 선택한 마지막 배수까지 포함하려면 range(start, end + 1)을 사용합니다. 예제는 정수 입력을 가정하며, 사용자 지정 범위 버전은 시작값이 끝값보다 크지 않다고 가정합니다.

f-string은 중괄호가 있는 위치에 값을 문자열로 삽입합니다. {product:4}처럼 너비를 지정하면 곱을 표시할 때 최소 네 칸을 확보하므로 자릿수가 다른 결과도 정렬됩니다. 지정한 너비는 최소값이어서 더 큰 곱에는 필요한 만큼 공간이 사용됩니다. 문자열에 곱셈 기호 ×를 직접 넣을 수도 있습니다.

숫자 하나의 곱셈표 출력하기

예제를 실행하고 안내가 나오면 정수를 입력하세요. 각 행의 곱을 한 번 계산한 뒤 두 피연산자의 순서를 바꾸어 출력합니다. range(1, 10)은 끝값을 포함하지 않으므로 아홉 행을 만듭니다. 결과 너비는 마지막 배수에서 계산한 곱을 기준으로 정해져 짧은 결과와 긴 결과가 같은 열에 맞춰집니다. 대화형 입력이 없을 때 사용하는 기본값 7로 실행하면 아래와 같이 출력됩니다. 코드와 출력에 나타나는 레이블은 영어로 표시됩니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import sys

if sys.stdin.isatty():
    table_of = int(input("Print multiplication table for: "))
else:
    table_of = 7

result_width = len(str(table_of * 9))
print(f"Multiplication table for {table_of}:")
for multiple in range(1, 10):
    product = table_of * multiple
    print(f"{multiple} × {table_of} = {product:{result_width}}")
for multiple in range(1, 10):
    product = table_of * multiple
    print(f"{table_of} × {multiple} = {product:{result_width}}")
Multiplication table for 7:
1 × 7 =  7
2 × 7 = 14
3 × 7 = 21
4 × 7 = 28
5 × 7 = 35
6 × 7 = 42
7 × 7 = 49
8 × 7 = 56
9 × 7 = 63
7 × 1 =  7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63

대화형 입력이 없을 때 사용하는 기본값 덕분에, 값을 직접 입력할 수 없는 환경에서도 프로그램을 실행할 수 있습니다. 다른 곱셈표를 출력하려면 range()의 두 인수를 바꾸세요. 한쪽 피연산자 순서만 필요하다면 반복문 하나를 제거하면 됩니다.

사용자 지정 범위의 배수 출력하기

이 변형 예제에서는 곱할 수와 첫 번째 및 마지막 배수를 입력합니다. 선택한 마지막 배수까지 포함하도록 range()에 전달하는 끝값에 1을 더합니다. 전체 범위에서 음수 기호까지 포함해 화면에 표시되는 배수와 곱의 최대 길이를 구한 다음, 그 너비를 사용해 두 열을 정렬합니다. 시작 배수가 끝 배수보다 크지 않도록 정수를 입력하세요. 이 간단한 버전은 그 밖의 입력을 검증하지 않습니다. 대화형 입력이 없을 때 사용하는 기본값으로 실행하면 아래와 같이 출력되며, 코드와 출력의 레이블은 영어로 표시됩니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import sys

def read_integer(prompt, default):
    if sys.stdin.isatty():
        return int(input(prompt))
    return default

table_of = read_integer("Print multiplication table for: ", 16)
start = read_integer("First multiplier: ", 5)
end = read_integer("Last multiplier: ", 9)

multiple_width = max(len(str(multiple)) for multiple in range(start, end + 1))
result_width = max(
    len(str(table_of * multiple)) for multiple in range(start, end + 1)
)
print(f"Multiplication table for {table_of}:")
for multiple in range(start, end + 1):
    product = table_of * multiple
    print(f"{multiple:{multiple_width}} × {table_of} = {product:{result_width}}")
Multiplication table for 16:
5 × 16 =  80
6 × 16 =  96
7 × 16 = 112
8 × 16 = 128
9 × 16 = 144

곱셈표 전체가 아니라 5부터 9까지처럼 일부만 필요할 때 이 버전을 사용하세요. end + 1을 더하는 이유는 range()가 두 번째 인수 직전까지만 순회하기 때문입니다. 끝값을 바꾸면 시작값이 끝값보다 크지 않은 한 그 값도 결과에 포함됩니다. 두 프로그램 모두 f-string 서식을 사용해 레이블과 계산 결과를 결합하므로 별도의 서식 라이브러리가 필요하지 않습니다.