본문 바로가기
프로그램

[파이썬] 문제 : 임의의 개수만큼 숫자 입력 받아 합계,평균,최대값,최빈값 함수

by 오디세이99 2023. 6. 13.
728x90
반응형

def func_sum(a_lst):              # 합계 함수. sum(a_lst)로 가능하나 for문 사용
    n_sum = 0
    for n in a_lst:
        n_sum += n
    return n_sum

def func_avg(a_lst):              # 평균 함수. sum(a_lst) / len(a_lst)로 가능하나 for문 사용
    n_sum = func_sum(a_lst)
    return n_sum / len(a_lst)

def func_max(a_lst):              # 최개값 함수. max(a_lst)로 가능하나 for문 사용
    # n_max = max(a_lst)
    n_max = 0
    for n in a_lst:
        if n > n_max:
            n_max = n
    return n_max

def func_mode(a_lst):             # 최빈값 함수
    dic = {}                      # 입력 정수를 키로 하는 딕셔너리를 만들기 위한 딕셔너리 변수
    for n in a_lst:
        if n in dic:              # 딕셔너리에 정수가 있다면
            dic[n] += 1           # 입력 받은 정수를 키로해서 +1을 함(이렇게 해서 각 정수가 몇 번 있는지 Count)
        else:
            dic[n] = 1            # 입력 받은 정수가 딕셔너리에 없다면 키로 하고 값은 1로 해서 신규 등록
    n_max = 0                     # 반복된 회수가 많은 정수(몇 번 나왔는지)
    n_mode = -1                   # 최빈값 횟수가 아닌 어떤 정수인지(문제에서는 사용되지 않음)
    for k, v in dic.items():      # 딕셔너리의 items() 함수로 하면 키,값을 받을 수 있음
        if v > n_max:             # 요소값 즉 Count가 큰 값을 찾음
            n_max = v
            n_mode = k
    return n_max

func_lst = [func_sum, func_avg, func_max, func_mode]    # 리스트에 함수를 등록

prt_txt = ['입력된 수들의 합','입력된 수들의 평균','입력된 수들 중 최대값','최대 반복 수']    # 리스트에 출력할 문장 등록

while True:
    in_lst = []                # 입력 받은 숫자를 저장할 리스트 변수
    while True:               # 임의의 개수만큼 입력 받기 위해 무한 반복
        in_str = input('숫자를 입력하세요(숫자 입력 종료:e):')  # 입력 받기
        if in_str.isalpha():   # input()에서는 입력의 종료시 e 라고 하지만 숫자가 아니면 입력 받기 종료
            break
        else: 
            in_lst.append(int(in_str))   # 입력 받으면 문자열이기 때문에 int() 함수로 정수로 변환 후 리스트 변수에 추가
    
    menu = int(input('1.합계  2.평균  3.최대값  4.최빈값  5.종료\n사용 메뉴 번호 : '))   # 함수 선택
    if menu == 5:                       # 입력이 5이면 종료
        print('프로그램 종료')
        break
    result = func_lst[menu-1](in_lst)   # 함수들을 등록한 리스트(func_lst)에 입력 받은 숫자들을 인수로 넘김. 
    print(prt_txt[menu-1],':',result)   # 출력시 출력문자열을 등록한 리스트(prt_txt)를 사용해서 출력

728x90
반응형

댓글