파이썬 함수 연습
나만의 간식 상자 만들기
Jun 9, 2025
입력값만 바꿨을 뿐인데,
출력되는 결과도 달라진다면 얼마나 편할까?
그런 동적인 변화를 만드는 데 꼭 필요한 도구가 바로 함수다.
파이썬의 함수는 원하는 기능을 한 덩어리로 묶고,
필요할 때마다 불러서 입력에 따라 다르게 반응하는
유연한 코드를 만들 수 있게 도와준다.
메뉴형식으로 구조
# -- 공통 유틸리티 함수
def get_vaild_text_input(msg):
user_input = input('😄' + msg). strip()
if not user_input:
print('입력값을 확인하세요.')
return None
return user_input
#숫자검증
def get_vaild_number_input(msg, min_no=1, max_no=5):
try :
number = int(input(msg))
if number < min_no :
print(f'{min_no}이상 숫자를 입력하세요.')
return None
elif number > max_no :
print (f'{max_no}이하 숫자를 입력하세요.')
return None
else:
return number
except ValueError:
print('숫자로 입력하세요.')
return None
#-- 기본 함수 정의
#1. 간식박스 생성 create
def make_snack_box():
snack_box = ['초코파이']
make_msg = '먹고 싶은 간식을 추가하세요. 단, 쉼표(,)로 연결하세요.'
new_snack = get_vaild_text_input(make_msg).split(',')
snack_box += [item.strip() for item in new_snack]
return snack_box
#2. 간식세트 포장 2 update
def multiply_snack_box(snack_box) :
mul_msg = int(input('간식박스 몇 세트로 포장할까요? 예: 2 -> 2box'))
qty = get_vaild_number_input(mul_msg, 2, 5)
return snack_box * qty
#6. 간식박스 전체보기 read
def display_snack_box(snack_box):
print(f'{snack_box[::-1]}, 총 {len(snack_box)}개 입니다.')
#3. 간식박스 미리보기(3개만) read - signature
def preview_snack_box(snack_box):
preview = ','.join(snack_box[:3])
print(f'선택하신 간식은 {preview}등 입니다.')
#4. 간식삭제 delete
def remove_snack_box(snack_box):
#예외처리
if not snack_box:
print('간식박스가 비어 있어요.')
return
display_snack_box(snack_box)
snack_cnt = len(snack_box)-1
rem_msg = f'혹시 빼고싶은 간식이 있으면 번호를 입력하세요. (0~{snack_cnt})'
snack_no = get_vaild_number_input(rem_msg, 0, snack_cnt)
del snack_box[snack_no]
return snack_box
#5. 간식찾기 search
def search_snack(snack_box):
search_msg = '찾고 싶은 간식을 입력하세요.'
snack_name = get_vaild_text_input(search_msg)
print('있어요.' if snack_name in snack_box else '없어요.')
#7. 간식박스 요약
def summarize_snacks(snack_box):
summary = {}
for snack in snack_box:
summary[snack] = summary.get(snack,0)+1
print('간식박스 정리')
for snack, qty in summary.items():
print(f'- {snack} : {qty}개')
#서비스의 흐름 - 선택과 반복
def run_menu_program():
snack_box = []
while True:
print('간식박스 관리 프로그램 메뉴')
print('1. 간식박스 생성')
print('2. 세트 생성')
print('3. 세트 미리보기')
print('4. 간식 삭제')
print('5. 간식 검색')
print('6. 간식박스 요약')
print('7. 최종 간식박스 확인')
menu_msg = '원하는 메뉴 번호를 입력하세요. : '
choice = str(get_vaild_number_input(menu_msg, 1, 7))
if choice == '1':
snack_box = make_snack_box()
elif choice == '2':
snack_box = multiply_snack_box(snack_box)
elif choice == '3':
preview_snack_box(snack_box)
elif choice == '4':
remove_snack_box(snack_box)
elif choice == '5':
search_snack(snack_box)
elif choice == '6':
summarize_snacks(snack_box)
elif choice == '7':
display_snack_box(snack_box)
run_menu_program()
출력값
간식박스 관리 프로그램 메뉴
1. 간식박스 생성
2. 세트 생성
3. 세트 미리보기
4. 간식 삭제
5. 간식 검색
6. 간식박스 요약
7. 최종 간식박스 확인
원하는 메뉴 번호를 입력하세요. : 1
😄먹고 싶은 간식을 추가하세요. 단, 쉼표(,)로 연결하세요. 자유시간, 스니커즈
간식박스 관리 프로그램 메뉴
1. 간식박스 생성
2. 세트 생성
3. 세트 미리보기
4. 간식 삭제
5. 간식 검색
6. 간식박스 요약
7. 최종 간식박스 확인
원하는 메뉴 번호를 입력하세요. : 5
😄찾고 싶은 간식을 입력하세요. 자유시간
있어요.
간식박스 관리 프로그램 메뉴
1. 간식박스 생성
2. 세트 생성
3. 세트 미리보기
4. 간식 삭제
5. 간식 검색
6. 간식박스 요약
7. 최종 간식박스 확인
원하는 메뉴 번호를 입력하세요. : 6
간식박스 정리
- 초코파이 : 1개
- 자유시간 : 1개
- 스니커즈 : 1개
간식박스 관리 프로그램 메뉴
1. 간식박스 생성
2. 세트 생성
3. 세트 미리보기
4. 간식 삭제
5. 간식 검색
6. 간식박스 요약
7. 최종 간식박스 확인
원하는 메뉴 번호를 입력하세요. : 7
['스니커즈', '자유시간', '초코파이'], 총 3개 입니다.
간식박스 관리 프로그램 메뉴
1. 간식박스 생성
2. 세트 생성
3. 세트 미리보기
4. 간식 삭제
5. 간식 검색
6. 간식박스 요약
7. 최종 간식박스 확인
원하는 메뉴 번호를 입력하세요. :
오늘을 마치며
작은 간식박스를 만들면서도 느꼈다.
입력 하나로 결과가 바뀌고, 버튼 하나로 기능이 반복된다면
그건 결국 ‘함수의 힘’ 덕분이라는 걸.
이번 실습처럼 기능을 작게 나누고, 역할을 명확히 해두면
코드는 더 읽기 쉬워지고, 변경에도 강해진다.
함수는 단순한 반복을 넘어서,
사용자의 입력을 받아 유연하게 반응하는 프로그램을 만들 수 있게 도와주는
파이썬의 든든한 동반자다.