본문 바로가기
교육은 한 사람의 인생을 바꾼다/AI교육

완전 초짜 파이썬 : 함수(목록 반환)

by 함께 만드는 블로그 2020. 12. 7.
반응형

>>함수로부터 목록 반환하기

예제 함수 내에서 사용자로부터 이름과 나이를 입력 받아 main에 전달해, main에서 입력 받은 값 출력하게 만들기
결과물
코딩 def per_info():
    print('이름과 나이를 입력하세요')
    name = input('name:')
    age=int(input('age:'))
    return [name, age]    <<반환을 리스트 형태로 할 수 있음 

print(per_info())

 : 리스트 안의 원소가 리스트인 2차원 목록(리스트)도 만들 수 있다. EX - [[1,3,5,7],[2,4,6,8]]

 

 

>>목록 반환 응용1

예제

점수 = [90, 95, 80, 55] 인 리스트에서 / 60점 이상이면 pass 그렇지 않으면 fail을 출력하는 findGrades 함수를 작성하시오.

결과물

코딩

def findGrades(scores):

      save_grades = []

      for n in scores:

         if n>=60:

           save_grades.append('pass')

 

         else:

           save_grades.append('fail')

      return save_grades

 

scores = [90, 95, 80, 55]

print('점수=',scores)

 

grades = findGrades(scores)

print('학점=', grades)

 : 이 부분이 생각보다 어려웠다. 사용자 지정함수에, for 구문에, 목록 반환에, 반환값까지.... ㅠㅠ 결국 마지막에 리스트로 반환하기 위해서 임시로 'save_grades 리스트'를 만들고, 거기에 pass/fail 값을 저장한 후 마지막에 save_grades 리스트 자체를 반환(return)하면 된다. 

 

 

>>목록 반환 응용2

예제

KIM = [520, 590] / PARK = [500, 580, 520] / LEE = [510, 500] / students = [KIM, PARK, LEE]

세 명의 TOEFL 점수 중에서 최고 평균점을 구하기

결과물


KIM = [520, 590]
PARK = [500, 580, 520]
LEE = [510, 500]
students = [KIM, PARK, LEE]   <<<students는 2차원 목록

def findBest(stds):
    highavg = 0
    ssum = 0
    for std in stds:
        for score in std:
            ssum+=score
        avg=ssum/len(std)
        print(avg)
        ssum=0
        if avg > highavg:
            highavg = avg
    return highavg              

print('최고 평균점은', findBest(students))

 : 비루한 내 실력으론 풀기 매우 어려운 문제였다 ㅠㅠ 일단 students가 리스트에 리스트로 이루어진 2차원 목록(리스트)이기 때문에 리스트를 두번 거쳐있는 점수값(score)을 다루기 위해선, for 구문을 두번 연속으로 써야한다는 점이 중요한 것 같다. 이 부분만 인지해도 나머지 부분은 어찌저찌 짤 수 있을 것 같다.

 : score에 합인 ssum을 for구문이 한번 끝나는 부분에서 0값으로 초기화하는 것을 잊어버린다면, 다음 리스트로 넘어가서도 이전 리스트의 값이 남아 누가되기 때문에 원하는 결과를 얻을 수 없다. 

반응형

댓글