본문 바로가기

Personal Study

멘토씨리즈 Python 예제풀이 / Ch5. 파이썬의 함수

 

 

Chapter 5. 파이썬의 함수

 

section9. 내장 함수

 

기본예제1 

다음은 간단한 계산기 프로그램입니다. 사용자로부터 계산식을 입력받아 결과를 출력합니다.

<실행 예>

계산식을 입력하세요 >>> 3+5

3+5=8


expr = input('계산식을 입력하세요')
result = eval(expr)
print(expr + '=' + str(result))



기본예제2

다음은 빵집에서 10000원을 주고 빵과 거스름돈을 받는 상황을 구현한 프로그램입니다.

빵 1개의 가격은 3000원입니다.
<실행 예>

빵을 3개 사고 1000원이 남았습니다.


money = 10000
bread = 3000
result = divmod(money, bread)
print('빵 {}개를 사고 {}원이 남음'.format(result[0], result[1]))

 

기본예제3

다음은 리스트에 월별일수를 저장해두고 1~12월까지 월별일수를 출력하는 프로그램입니다.

윤년은 고려하지 않고 모두 평년이라고 가정하였습니다.
<실행 예>

1월 = 31일

2월 = 28일

3월 = 31일

....

11월 = 30일

12월 = 31일


months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
for month, day in enumerate(months):
    print('{}월 = {}일'.format(month+1, day))



응용예제1

무지개의 일곱색깔을 저장하는 rainbow리스트를 생성하고 다음과 같이 출력하세요.

<실행 예>

무지개의 1번째 색은 red입니다.

무지개의 2번째 색은 orange입니다.

무지개의 3번째 색은 yellow입니다.

무지개의 4번째 색은 green입니다.

무지개의 5번째 색은 blue입니다.

무지개의 6번째 색은 navy입니다.

무지개의 7번째 색은 purple입니다.


rainbow = ['red', 'orange', 'yellow', 'green', 'blue', 'navy', 'purple']
for idx, color in enumerate(rainbow):
    print('무지개의 {}번째 색은 {}입니다.'.format(idx+1, color))



응용예제2

어떤 학생의 점수를 입력받아 평균점수, 최고점수, 최저점수를 구하는 성적계산 프로그램을 구현하세요.
  1. 몇개의 점수를 입력받아야 하는지 모르는 상황임.
  2. 0보다 작은 점수를 입력하면 더이상 입력할 점수가 없음을 의미함.
  3. 입력받은 모든 점수는 exam 리스트에 저장함.
  4. 마지막에 입력된 0보다 작은 점수는 exam에 저장하지 않음.
<실행 예>

점수를 입력하세요. 더 이상 입력할 점수가 없으면 음수를 아무거나 입력하세요.

점수 입력 >>> 80

점수 입력 >>> 50

점수 입력 >>> 60

점수 입력 >>> 30

점수 입력 >>> 90

점수 입력 >>> -1

평균=62.0, 최대=90, 최소=30


exam = [ ]
print('점수를 입력하세요. 더 이상 입력할 점수가 없으면 음수를 아무거나 입력하세요.')
while True:
    std = int(input('점수 입력'))
    if std < 0:
        break
    exam.append(std)
print('평균={}, 최대={}, 최소={}'.format((sum(exam)/len(exam)), max(exam), min(exam)))

 

section10. 메소드

 

기본예제1 

다음은 주민등록번호에서 생년월일 6자리를 추출하는 프로그램입니다.

사용자로부터 하이픈을 포함한 전체 주민번호를 입력받아 처리하는데

만약 하이픈의 위치가 올바르지 않으면 오류 메시지를 출력하고 다시 입력받도록 처리합니다.
<실행 예>

하이픈을 포함하여 전체 주민등록번호를 입력하세요 >>> 95121-1234567

하이픈의 위치가 잘못되었습니다.

하이픈을 포함하여 전체 주민등록번호를 입력하세요 >>> 951211-1234567

생년월일은 951211입니다.


while True:
    num = input('하이픈을 포함하여 전체 주민번호를 입력하세요')
    if num.find('-') != 6:
        print('하이픈의 위치가 잘못되었습니다.')
        continue
    birthday = num.split('-')[0]
    print('생년월일은 {}입니다.'.format(birthday))



기본예제2

다음은 리스트에 포함된 잘못된 데이터를 모두 제거하는 프로그램입니다.

리스트에 저장된 정상데이터는 모두 'a'를 포함한 문자열이며, 그렇지 않은 경우 잘못된 데이터입니다.

<실행 예>

cookie 제거됩니다.

bisket 제거됩니다.

 ['above', 'app', 'about', 'admin', 'apple', 'april']


list = ['above', 'cookie', 'app', 'about', 'admin', 'bisket', 'apple', 'april']
for i, item in enumerate(list):
    if item.find('a') == -1:
        print('{}이 제거됩니다.'.format(list.pop(i)))
print(list)



응용예제1

우리나라의 전화번호는 '지역번호-국번-가입자개별번호' 형식으로 되어있습니다.

어떤 형식의 전화번호를 입력하더라도 '국번'을 추출하여 출력하는 프로그램을 구현하세요.
<실행 예>

전화번호를 입력하세요 >>> 02-1234-5678

1234


hp = input('전화번호를 입력하세요.')
print(hp.split('-')[1])



응용예제2

'숫자3자리-숫자2자리-숫자5자리' 형식 (예: 123-45-67890)의 사업자등록번호를 입력받아서

형식이 맞는지 점검하는 프로그램을 구현하세요. 다음 지시사항을 모두 점검해야 합니다.

지시사항:
  1. 전체 글자수를 점검
  2. 모든 하이픈의 위치가 올바른지 점검
  3. 하이픈을 제외하면 모두 숫자인지 점검
<실행 예>

사업자등록번호를 입력하세요(예:123-45-67890) >>> 123-사오-67890

올바른 형식이 아닙니다.

==========================================

사업자등록번호를 입력하세요(예:123-45-67890) >>> 123-45-67890

올바른 형식입니다.


num = input('사업자등록번호를 입력하세요')
a = num.split('-')[0]
b = num.split('-')[1]
c = num.split('-')[2]
if len(a) == 3 and len(b) == 2 and len(c) == 5:
    if a.isdecimal() == True and b.isdecimal() == True and c.isdecimal() == True:
        print('올바른 형식입니다.')
    else:
        print('올바른 형식이 아닙니다.')
else:
    print('올바른 형식이 아닙니다.')



응용예제3

우리 학교 성적 관리 프로그램은 다음과 같이 쉼표(,)로 구분된 문자열 형식으로

학생 이름과 성적이 입력됩니다. 이 데이터를 각각 name과 score 변수에 저장하는 프로그램을 구현하세요.
<실행 예>

이름과 성적을 입력하세요.>>> "김철수",85

이름은 김철수이고, 점수는 85점입니다.


score = input('이름과 성적을 입력하세요.')
a = score.split(',')[0].strip('"')
b = score.split(',')[1]
print('이름은 {}이고, 점수는 {}점입니다.'.format(a, b))

 

section11. 사용자 함수

 

기본예제1 

다음은 전달된 모든 인수를 모두 더해서 합계를 출력하는 프로그램입니다.
< 실행 예>

(1, 2)의 합은 3입니다.

(1, 2, 3)의 합은 6입니다.

(1, 2, 3, 4)의 합은 10입니다.


def adder(*args):
    print('{}의 합은 {}입니다.'.format(args, sum(args)))
adder(1,2)
adder(1,2,3)
adder(1,2,3,4)



기본예제2

 커피자판기 프로그램입니다. 커피자판기는 다음과 같이 동작합니다.
  1. 커피자판기에 돈과 주문할 커피를 전달합니다.
  2. 주문할 수 있는 커피의 종류와 가격은 다음과 같습니다.
      아메리카노: 1000원 / 카페라떼: 1500원 / 카푸치노: 2000원
  3. 없는 커피를 주문할 경우 입력한 돈을 그대로 반환합니다.
  4. 구매 금액이 부족하면 입력한 돈을 그대로 반환합니다.
  5. 정상 주문이면 주문한 커피와 잔돈을 반환합니다.
<실행 예>

1. 없는 커피를 주문한 경우

커피를 선택하세요. (아메리카노, 카페라떼, 카푸치노) >>> 마키아또

얼마를 내시나요? >>> 15000

15000원에 마키아또를 선택하셨습니다.

마키아또는 판매하지 않습니다.

잔돈 15000원, 커피 없는 메뉴

 

2. 주문 금액이 부족한 경우

커피를 선택하세요. (아메리카노, 카페라떼, 카푸치노) >>> 아메리카노

얼마를 내시나요? >>> 500

500원에 마키아또를 선택하셨습니다.

아메리카노는 1000원입니다.

잔돈 500원, 커피 금액 부족

 

3. 정상 주문인 경우

커피를 선택하세요. (아메리카노, 카페라떼, 카푸치노) >>> 카페라떼

얼마를 내시나요? >>> 2000

2000원에 카페라떼를 선택하셨습니다.

잔돈 500원, 커피 카페라떼


def machine(money, coffee):
    print('{}원에 {}를 선택하셨습니다.'.format(money, coffee))
    menu = {'아메리카노': 1000,
    '카페라떼': 1500,
    '카푸치노': 2000
    }
    if coffee not in menu:
        print('없는 커피입니다.')
        return money
    elif  menu[coffee]>money :
        print('금액이 부족합니다.')
        return money
    else:
        return money-menu[coffee], coffee
pay = int(input('금액을 투입하세요'))
pick = input('커피를 선택하세요 (아메리카노/카페라떼/카푸치노)')
money, coffee = machine(pay, pick)
print('잔돈:{}원, 커피:{}'.format(money, coffee))

 

응용예제1

700원짜리 음료수를 뽑을 수 있는 자판기 프로그램을 구현하세요.

돈을 넣으면 몇 잔의 음료수를 뽑을 수 있는지,

그리고 잔돈은 얼마인지 모든 경우의 수를 출력하도록 구현하세요.
  함수 정의
      반환값: 없음
      함수 이름: vending_machine()
      매개변수: 정수 money
  코드 구성
      def vending_machine(money):
  함수 구현
      vending_machine(3000)
<실행 예>

음료수 = 0개, 잔돈 = 3000원

음료수 = 1개, 잔돈 = 2300원

음료수 = 2개, 잔돈 = 1600원

음료수 = 3개, 잔돈 = 900원

음료수 = 4개, 잔돈 = 200원


def vending_machine(money):
    money = int(input('돈을 투입하세요>>>'))
    count = money//700
    for i in range(0,count+1):
        print('음료수={}개, 잔돈={}원'.format(i, money-(i*700)))
    return
vending_machine(3000)



응용예제2

키(key)가 '과목명', 값(value)이 '점수'인 marks 딕셔너리를 전달하면

해당 딕셔너리에 저장된 점수들의 평균을 반환하는 get_average()함수를 구현하세요.
  함수 정의
      반환값: 평균
      함수 이름: get_average()
      매개변수: 딕셔너리 marks
  코드 구성
      def get_average():
  함수 구현
      marks = {'국어':90, '영어':80, '수학':85}
      average = get_average()
      print('평균은 {}점입니다.'.format(average))
<실행 예>

평균은 85.0점 입니다.


def get_average(marks):
    average = sum(marks.values())/len(marks.values())
    print('평균은 {}점입니다.'.format(average))
    return average
marks = {'국어':90, '영어':80, '수학':85}
get_average(marks)



응용예제3

결혼식에 참석하는 대부분의 사람은 축의금을 냅니다.

축의금을 내는 사람의 이름과 그 사람이 낸 축의금을 딕셔너리에 저장하고

전체 축의금의 합계를 구할 수 있는 gift() 함수를 구현하세요.
  함수 정의
      반환값: 없음
      함수 이름: gift()
      매개변수: 딕셔너리 dic, 사람 who, 축의금 money
  코드 구성
      total = 0
      def gift(dic, who, money):
  함수 구현
      wedding = {}
      git(wedding, '영희', 5)
      git(wedding, '철수', 3)
      git(wedding, '이모', 10)
      print('축의금명단:{}'.format(wedding))
      print('전체축의금:{}'.format(total))
<실행 예>

축의금 명단: {'영희':5, '철수':3, '이모':10}

전체 축의금: 18


total = 0
def gift(dic, who, money):
    who = input('축의금을 낸 사람을 입력하세요')
    money = int(input('금액을 입력하세요'))
    dic[who] = money
    global total
    total = sum(dic.values())
    print('축의금명단:{}'.format(dic.keys()))
    print('전체축의금:{}'.format(total))
wedding = {}
gift(wedding, '영희', 3)
gift(wedding, '철수', 5)
gift(wedding, '이모', 10)