Python/Chapter02. 조건문, 함수

lullaby ·2025년 10월 1일

Python

목록 보기
2/13
post-thumbnail

1. 조건문 (Conditional Statement)

1.1 핵심 개념

  • 조건문은 특정 조건에 따라 코드 실행을 제어하는 구문
  • 파이썬에서는 if, elif, else 키워드를 사용
  • 조건의 참/거짓 여부에 따라 실행 흐름이 달라짐

1.2 if-elif-else 구문

if 조건1:
    # 조건1이 참일 때 실행할 코드
elif 조건2:
    # 조건1이 거짓이고 조건2가 참일 때 실행할 코드
else:
    # 모든 조건이 거짓일 때 실행할 코드

1.3 중첩 조건문

if 조건1:
    if 조건2:
        # 조건1과 조건2가 모두 참일 때 실행할 코드
    else:
        # 조건1은 참이지만 조건2가 거짓일 때 실행할 코드
else:
    # 조건1이 거짓일 때 실행할 코드

1.4 논리 연산자

  • and: 양쪽 조건이 모두 참일 때만 참
  • or: 양쪽 조건 중 하나라도 참이면 참
  • not: 조건의 결과를 반대로 바꿈
if 조건1 and 조건2:
    # 조건1과 조건2가 모두 참일 때 실행
if 조건1 or 조건2:
    # 조건1이나 조건2 중 하나라도 참일 때 실행
if not 조건:
    # 조건이 거짓일 때 실행

1.5 예제: 학점 계산기

score = int(input("성적을 입력하시오: "))
if score >= 90:
    print("학점 A")
elif score >= 80:
    print("학점 B")
elif score >= 70:
    print("학점 C")
elif score >= 60:
    print("학점 D")
else:
    print("학점 F")

1.6 예제: 월별 일수 출력

month = int(input("월을 입력하시오: "))
if month == 2:
    print(month, "월의 날수는 28일")
elif month in [4, 6, 9, 11]:
    print(month, "월의 일수는 30일")
elif month in [1, 3, 5, 7, 8, 10, 12]:
    print(month, "월의 일수는 31일")
else:
    print(month, "월은 없습니다.")

1.7 예외 처리

try:
	예외가 발생할 가능성이 있는 코드

except:
	예외가 발생했을 때 실행할 코드
    (필요에 따라 except 절을 추가로 작성)
try:
    # 예외가 발생할 수 있는 코드
    x = int(input('숫자를 입력하세요: '))
    y = 10 / x
    print(y)
except ValueError:
    # 값 오류 발생 시 실행되는 코드
    print('숫자가 아닌 값을 입력했습니다.')
except ZeroDivisionError:
    # 0으로 나누기 시도 시 실행되는 코드
    print('0으로 나눌 수 없습니다.')
except:
    # 다른 모든 예외 발생 시 실행되는 코드
    print('알 수 없는 오류가 발생했습니다.')

2. 함수 (Functions)

2.1 핵심 개념

  • 함수: 특정 작업을 수행하는 명령어들의 모음에 이름을 붙인 것
  • 함수는 코드의 재사용성을 높이고 가독성을 향상시킴
  • 내장 함수와 사용자 정의 함수가 있음

2.2 함수 정의 및 호출

def 함수이름(매개변수1, 매개변수2, ...):
    # 함수 본문
    return 반환값  # 선택적
# 함수 호출
결과변수 = 함수이름(인수1, 인수2, ...)

2.3 매개변수와 인수

  • 매개변수(parameter): 함수 정의에서 입력으로 받는 변수
  • 인수(argument): 함수 호출 시 전달하는 실제 값

2.4 반환값

  • return 문을 사용하여 함수의 결과를 반환
  • return 문이 없으면 함수는 None을 반환
  • 여러 값을 한 번에 반환할 수 있음
def get_values():
    return 1, 2, 3

a, b, c = get_values()

2.5 기본 인수

  • 매개변수에 기본값을 설정할 수 있음
  • 함수 호출 시 값을 전달하지 않으면 기본값이 사용됨
def greet(name, msg="안녕하세요"):
    print(name + ", " + msg)

greet("영희")  # 기본 메시지 사용
greet("영희", "오랜만이에요")  # 사용자 지정 메시지 사용

2.6 키워드 인수

  • 인수의 순서와 상관없이 매개변수 이름으로 값을 전달
def calculate(x, y, z):
    return x + y + z

result = calculate(y=20, x=10, z=30)  # 순서 상관없이 매개변수 이름으로 전달

2.7 모듈 사용

  • 함수, 변수, 클래스 등을 모아놓은 파일
  • import 문을 사용하여 모듈을 가져옴
import math
radius = 10
area = math.pi * radius ** 2

# 모듈에서 특정 함수나 변수만 가져오기
from math import pi, sqrt
area = pi * radius ** 2

3. 예상 문제 및 풀이

조건문 관련 문제

문제 1: 조건문 오류 찾기

다음 코드의 오류를 찾아 수정하세요. 이 코드는 학점을 계산하는 프로그램입니다.

score = int(input("성적을 입력하시오: "))
if score >= 90:
    print("학점 A")
elif score >= 60:
    print("학점 D")
elif score >= 70:
    print("학점 C")
elif score >= 80:
    print("학점 B")
else:
    print("학점 F")
  • 정답: 조건문의 순서가 잘못되었습니다. 조건을 큰 값부터 작은 값 순으로 검사해야 합니다.
    score = int(input("성적을 입력하시오: "))
    if score >= 90:
        print("학점 A")
    elif score >= 80:
        print("학점 B")
    elif score >= 70:
        print("학점 C")
    elif score >= 60:
        print("학점 D")
    else:
        print("학점 F")
    

문제 2: 조건문 실행 결과 예측

다음 코드의 실행 결과를 예측하세요.

age = 20
height = 180
if (age >= 10 and height >= 165):
    print("놀이 기구를 탈 수 있습니다.")
else:
    print("놀이 기구를 탈 수 없습니다.")
  • 정답: "놀이 기구를 탈 수 있습니다."가 출력됩니다. age가 20이고 height가 180이므로 두 조건(age >= 10, height >= 165)을 모두 만족합니다.

문제 3: 예외 처리 코드 작성

사용자로부터 월을 입력받아 해당 월의 일수를 출력하는 프로그램을 작성하세요. 단, 사용자가 숫자가 아닌 값을 입력할 경우 예외 처리를 하고, 1~12 이외의 숫자를 입력할 경우에도 적절한 메시지를 출력하세요.

  • 정답:
    try:
        month = int(input("월을 입력하시오: "))
        if month == 2:
            print(month, "월의 날수는 28일")
        elif month in [4, 6, 9, 11]:
            print(month, "월의 일수는 30일")
        elif month in [1, 3, 5, 7, 8, 10, 12]:
            print(month, "월의 일수는 31일")
        else:
            print(month, "월은 없습니다.")
    except ValueError:
        print("입력값이 숫자 타입의 월이 아닙니다.")
        print("월은 3월로 자동 입력됩니다.")
        month = 3
        print(month, "월의 일수는 31일")
    

함수 관련 문제

문제 4: 함수 구현하기

두 숫자 중 큰 수를 반환하는 함수 get_max()를 구현하세요.

  • 정답:
    def get_max(x, y):
        if x > y:
            return x
        else:
            return y
    
    # 테스트
    print(get_max(10, 20))  # 20 출력
    print(get_max(30, 15))  # 30 출력
    

문제 5: 함수 오류 찾기

다음 함수에서 오류를 찾아 수정하세요.

def power(x, y):
    result = 1
    result = result * x * y
    return result

print(power(10, 2))
  • 정답: 거듭제곱 계산 방식이 잘못되었습니다. x의 y제곱은 x를 y번 곱해야 합니다.
    def power(x, y):
        result = x ** y  # 또는 result = pow(x, y)
        return result
    
    print(power(10, 2))  # 100 출력
    

문제 6: 함수와 모듈 사용하기

math 모듈을 사용하여 반지름이 주어졌을 때 구의 부피를 계산하는 함수 sphere_volume()을 작성하세요.

  • 정답:
    import math
    
    def sphere_volume(radius):
        volume = (4.0 / 3.0) * math.pi * radius ** 3
        return volume
    
    # 테스트
    radius = float(input("구의 반지름을 입력하시오: "))
    print(sphere_volume(radius))
    

문제 7: 기본 인수 사용하기

이름과 메시지를 인수로 받아 인사말을 출력하는 함수 greet()을 작성하세요. 메시지에는 기본값 "별일없죠?"를 사용하세요.

  • 정답:
    def greet(name, msg="별일없죠?"):
        print("안녕 " + name + ", " + msg)
    
    # 테스트
    greet("영희")  # "안녕 영희, 별일없죠?" 출력
    greet("영희", "지금 집에 있니?")  # "안녕 영희, 지금 집에 있니?" 출력
    

4. 실전 대비 종합 문제

문제 1: 종합 조건문 문제

사용자로부터 나이와 키를 입력받아 다음 조건에 따라 적절한 메시지를 출력하는 프로그램을 작성하세요.

  • 나이가 12세 이상이고 키가 140cm 이상이면 "모든 놀이기구를 탈 수 있습니다."
  • 나이가 10세 이상이고 키가 130cm 이상이면 "대부분의 놀이기구를 탈 수 있습니다."
  • 그 외에는 "일부 놀이기구만 탈 수 있습니다."
  • 정답:
    try:
        age = int(input("나이를 입력하세요: "))
        height = float(input("키를 입력하세요(cm): "))
    
        if age >= 12 and height >= 140:
            print("모든 놀이기구를 탈 수 있습니다.")
        elif age >= 10 and height >= 130:
            print("대부분의 놀이기구를 탈 수 있습니다.")
        else:
            print("일부 놀이기구만 탈 수 있습니다.")
    except ValueError:
        print("나이와 키는 숫자로 입력해야 합니다.")
    

문제 2: 종합 함수 문제

섭씨 온도와 화씨 온도를 상호 변환하는 두 함수 celsius_to_fahrenheit()fahrenheit_to_celsius()를 작성하세요. 사용자로부터 변환하고자 하는 온도와 단위(C 또는 F)를 입력받아 변환 결과를 출력하는 프로그램을 작성하세요.

  • 정답:
    def celsius_to_fahrenheit(temp_c):
        temp_f = (9.0 / 5.0) * temp_c + 32.0
        return temp_f
    
    def fahrenheit_to_celsius(temp_f):
        temp_c = (5.0 / 9.0) * (temp_f - 32.0)
        return temp_c
    
    try:
        temp = float(input("온도를 입력하세요: "))
        unit = input("단위를 입력하세요(C 또는 F): ")
    
        if unit.upper() == "C":
            converted = celsius_to_fahrenheit(temp)
            print(f"{temp}°C는 {converted:.2f}°F입니다.")
        elif unit.upper() == "F":
            converted = fahrenheit_to_celsius(temp)
            print(f"{temp}°F는 {converted:.2f}°C입니다.")
        else:
            print("단위는 C 또는 F로 입력해야 합니다.")
    except ValueError:
        print("온도는 숫자로 입력해야 합니다.")
    

문제 3: 예외 처리 응용 문제

사용자로부터 두 개의 정수를 입력받아 나눗셈을 수행하는 프로그램을 작성하세요. 다음 예외를 처리해야 합니다:

  • 사용자가 숫자가 아닌 값을 입력할 경우
  • 사용자가 두 번째 숫자로 0을 입력할 경우
  • 정답:
    try:
        num1 = int(input("첫 번째 정수를 입력하세요: "))
        num2 = int(input("두 번째 정수를 입력하세요: "))
    
        result = num1 / num2
        print(f"{num1} / {num2} = {result}")
    
    except ValueError:
        print("입력값이 정수가 아닙니다. 정수를 입력해주세요.")
    except ZeroDivisionError:
        print("0으로 나눌 수 없습니다. 두 번째 숫자는 0이 아닌 값을 입력해주세요.")
    except:
        print("알 수 없는 오류가 발생했습니다.")
    

문제 4: 함수와 조건문 응용 문제

사용자로부터 세 개의 숫자를 입력받아, 가장 큰 수를 반환하는 함수 find_largest()를 작성하세요. 이 함수를 사용하여 최댓값을 출력하는 프로그램을 작성하세요.

  • 정답:
    def find_largest(a, b, c):
        if a >= b and a >= c:
            return a
        elif b >= a and b >= c:
            return b
        else:
            return c
    
    try:
        num1 = float(input("첫 번째 숫자: "))
        num2 = float(input("두 번째 숫자: "))
        num3 = float(input("세 번째 숫자: "))
    
        largest = find_largest(num1, num2, num3)
        print(f"가장 큰 수는 {largest}입니다.")
    except ValueError:
        print("유효한 숫자를 입력해주세요.")
    

문제 5: 모듈 활용 문제

math 모듈을 사용하여 다음 기능을 수행하는 프로그램을 작성하세요:

  1. 사용자로부터 원의 반지름을 입력받음
  2. 원의 둘레와 면적을 계산하여 출력
  3. 반지름을 이용해 구의 표면적과 부피를 계산하여 출력
  • 정답:
    import math
    
    def circle_properties(radius):
        circumference = 2 * math.pi * radius
        area = math.pi * radius ** 2
        return circumference, area
    
    def sphere_properties(radius):
        surface_area = 4 * math.pi * radius ** 2
        volume = (4/3) * math.pi * radius ** 3
        return surface_area, volume
    
    try:
        radius = float(input("원의 반지름을 입력하세요: "))
    
        if radius <= 0:
            print("반지름은 양수여야 합니다.")
        else:
            circ, area = circle_properties(radius)
            surf_area, volume = sphere_properties(radius)
    
            print(f"원의 둘레: {circ:.2f}")
            print(f"원의 면적: {area:.2f}")
            print(f"구의 표면적: {surf_area:.2f}")
            print(f"구의 부피: {volume:.2f}")
    
    except ValueError:
        print("유효한 숫자를 입력해주세요.")
    

0개의 댓글