본문 바로가기
Python

Python 기초 3장 - 연습문제 답안

by daddydontsleep 2024. 11. 27.
728x90
728x90

사진: UnsplashCharlotte Cowell

안녕하세요. 지난번에 제시된 연습문제의 답안을 작성해드리겠습니다.

문제1 답안

def find_multiples():
    """
    문제 1: 1부터 100까지의 숫자 중 3의 배수이면서 5의 배수인 숫자 출력
    """
    print("\n[문제 1] 1-100 중 3과 5의 공배수")
    print("-" * 40)

    multiples = [num for num in range(1, 101) if num % 3 == 0 and num % 5 == 0]
    print(f"3과 5의 공배수: {multiples}")
    print(f"총 {len(multiples)}개의 숫자가 있습니다.")

def main():
    print("Python 연습문제 답안")
    print("=" * 40)

    find_multiples()

if __name__ == "__main__":
    main()

문제1 결과

Python 연습문제 답안
========================================

[문제 1] 1-100 중 3과 5의 공배수
----------------------------------------
3과 5의 공배수: [15, 30, 45, 60, 75, 90]
총 6개의 숫자가 있습니다.

Process finished with exit code 0

문제1 해설

  • 리스트 컴프리헨션을 활용하여 1부터 100까지의 숫자 중 3과 5의 공배수를 찾습니다.
  • 각 숫자에 대해 3으로 나누어 떨어지면서(num % 3 == 0) 동시에 5로도 나누어 떨어지는(num % 5 == 0) 조건을 확인합니다.
  • 결과로 [15, 30, 45, 60, 75, 90]이 출력됩니다.

문제2 답안

def is_prime(n):
    """
    문제 2: 소수 판별 함수
    """
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

def check_prime():
    """
    문제 2: 사용자 입력 소수 판별 프로그램
    """
    print("\n[문제 2] 소수 판별 프로그램")
    print("-" * 40)

    while True:
        try:
            num = int(input("판별할 숫자를 입력하세요 (종료:0): "))
            if num == 0:
                break

            result = "소수입니다." if is_prime(num) else "소수가 아닙니다."
            print(f"{num}은(는) {result}")

        except ValueError:
            print("올바른 숫자를 입력해주세요.")

def main():
    print("Python 연습문제 답안")
    print("=" * 40)

    check_prime()

if __name__ == "__main__":
    main()

문제2 결과

Python 연습문제 답안
========================================

[문제 2] 소수 판별 프로그램
----------------------------------------
판별할 숫자를 입력하세요 (종료:0): 1
1은(는) 소수가 아닙니다.
판별할 숫자를 입력하세요 (종료:0): 2
2은(는) 소수입니다.
판별할 숫자를 입력하세요 (종료:0): 3
3은(는) 소수입니다.
판별할 숫자를 입력하세요 (종료:0): 0

Process finished with exit code 0

문제2 해설

  • is_prime() 함수는 주어진 숫자가 소수인지 판별하는 효율적인 알고리즘을 구현했습니다.
  • 2부터 입력값의 제곱근까지만 확인하여 불필요한 반복을 줄였습니다.
  • 사용자의 잘못된 입력(예: 문자열)을 처리하기 위해 예외 처리를 포함했습니다.
  • 0을 입력하면 프로그램이 종료되도록 하여 사용자 편의성을 고려했습니다.
def is_prime(n):

이 줄은 함수를 만드는 첫 줄입니다. is_prime이라는 이름의 함수를 만들고, n이라는 숫자를 입력받습니다. 여기서 n은 우리가 소수인지 검사하고 싶은 숫자입니다.

"""
문제 2: 소수 판별 함수
"""

이 부분은 함수에 대한 설명문입니다. 다른 사람이 이 코드를 볼 때 이 함수가 무엇을 하는지 알 수 있도록 돕는 설명서와 같습니다.

if n < 2:
    return False

이 부분은 입력받은 숫자가 2보다 작은지 확인합니다. 만약 숫자가 0이나 1이라면 바로 False(거짓)을 반환합니다. 왜냐하면 0과 1은 소수가 아니기 때문입니다.

for i in range(2, int(n ** 0.5) + 1):

이 줄은 반복문을 시작합니다.

  • n ** 0.5는 n의 제곱근을 구합니다. 예를 들어 16 ** 0.5는 4가 됩니다.
  • int()는 소수점을 버리고 정수로 만듭니다.
  • range(2, 숫자)는 2부터 '숫자-1'까지의 범위를 만듭니다.
  • + 1을 하는 이유는 range가 마지막 숫자를 포함하지 않기 때문입니다.
if n % i == 0:
    return False

이 부분은 나눗셈을 확인합니다.

  • n % i는 n을 i로 나눈 나머지를 구합니다.
  • 만약 나머지가 0이라면 (== 0) 이 숫자는 i로 나누어떨어진다는 뜻입니다.
  • 나누어떨어지면 이 숫자는 소수가 아니므로 False를 반환합니다.
return True

이 마지막 줄은 모든 검사를 통과했을 때 실행됩니다. 즉, 어떤 수로도 나누어떨어지지 않는다면 이 숫자는 소수이므로 True(참)을 반환합니다.

예를 들어 13을 검사한다면:

  1. 13은 2보다 크므로 계속 진행
  2. 13의 제곱근은 약 3.6이므로 2와 3으로만 검사
  3. 13 % 2 = 1 (나누어떨어지지 않음)
  4. 13 % 3 = 1 (나누어떨어지지 않음)
  5. 모든 검사를 통과했으므로 True 반환

이렇게 이 함수는 효율적으로 소수를 판별할 수 있습니다.

문제3 답안

def print_multiplication_table():
    """
    문제 3: 50 이하 결과만 출력하는 구구단
    """
    print("\n[문제 3] 50 이하 구구단")
    print("-" * 40)

    for i in range(2, 10):
        print(f"\n{i}단:")
        for j in range(1, 10):
            result = i * j
            if result > 50:
                break
            print(f"{i} * {j} = {result}")

def main():
    print("Python 연습문제 답안")
    print("=" * 40)

    print_multiplication_table()

if __name__ == "__main__":
    main()

문제3 결과

Python 연습문제 답안
========================================

[문제 3] 50 이하 구구단
----------------------------------------

2단:
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

3단:
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

4단:
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

5단:
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

6단:
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48

7단:
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49

8단:
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48

9단:
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45

Process finished with exit code 0

문제3 해설

  • 이중 반복문을 사용하여 2단부터 9단까지의 구구단을 구현했습니다.
  • 각 단에서 계산 결과가 50을 초과하면 break문을 사용하여 다음 단으로 넘어갑니다.
  • 결과를 보기 좋게 출력하기 위해 서식을 적절히 사용했습니다.
728x90
300x250