본문 바로가기
프로그램

[파이썬] 문제 : 인원 입력 받아 금액 매칭하고 제일 큰 금액 출력

by 오디세이99 2022. 11. 18.
728x90
반응형

def sel(num, listname ): 랜덤으로 추첨하기 함수만들기.
인원과 전체 인원의 이름을 입력받아 
리스트에 저장하고, 
함수 sel을 호출한다. 
함수는 각 사람에게 0원, 5천원, 7천원, 1만원, 2만원 중 한 항목을 매칭하여 
결과 리스트는 튜플로 구성하여 
다음과 같이 출력한다. 
이 때 parameter num 값이 양의 정수인 경우만 실행한다. 
그렇게 생성된 리스트 중에서 최고금액인 2만원을 받은 사람을 찾아 이름을 출력한다.

import random                            # 랜덤 패키지 사용

money = ['0월', '5천원', '7천원', '1만원', '2만원']   # 각 사람에게 매칭할 금액

def sel(num, listname):              # sel 함수 선언. 인수는 인원수, 이름 리스트
    rtn = []                         # 인원에 금액을 매칭한 결과 변수(리스트)
    for i in range(len(listname)):  # 인원 만큼 반복. 여기에 n(인원수)를 사용해야 하나 len()함수로 이름수로 사용하면 됨
        rtn.append(random.randint(0,len(money)-1))    # 램덤하게 0~money 원소수-1 의 수를 선택.이는 금액 리스트의 인덱스로 사용
        
    t = [(listname[i], money[idx]) for i, idx in enumerate(rtn)]   # 이름과 금액을 튜플로 만들기. 위에서 만든 인덱스(rtn)으로 이름과 금액 매칭
    print(t)                                          # [('석민', '1만원'), ('광현', '7천원')]
    for i in range(len(t)):                            # 출력을 위한 반복문. 만들어진 튜플 만큼 반복
        if t[i][1] == money[-1]:                       # 현재 튜플의 금액값이 2만원(money의 제일 뒤 금액)과 같으면
            print(f"최고금액 사람 : {t[i]}")            # 출력

n = int(input('인원수를 입력하세요 :'))                   # 인원수 입력 받음. 정수로 사용할 것이라 int 함수로 정수 변환. 
name_tmp = input("이름을 입력하세요(예:철수,민지) : ")    # 이름들을 입력 받음. 지혜,민지,광현,석민,요한,주용

if n%2 == 0:                         # 양의 정수일때만 실행하는 조건
    name_lst = name_tmp.split(',')    # 입력 받은 이름들은 '.'로 분리해서 리스트를 만듬
    sel(n, name_lst)                  # 함수 실행. 이때 인수를 인원수, 이름 리스트를 넘겨 줌

결과

인원수를 입력하세요 :4
이름을 입력하세요(예:철수,민지) : 지혜,민지,광현,석민
[('지혜', '7천원'), ('민지', '1만원'), ('광현', '2만원'), ('석민', '1만원')]
최고금액 사람 : ('광현', '2만원')
728x90
반응형

댓글