ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 교실에서 활용할 수 있는 중복없는 랜덤 숫자 뽑기
    코딩공부/예시로 살펴보는 파이썬 2020. 4. 5. 16:57

    5학년 2반은 남자 11명 (1~11번), 여자 11명(51~61번)으로 구성되어 있다.

     

     

    Q1. 발표할 사람을 뽑기 위해 중복없이 번호를 랜덤으로 뽑는 코드를 작성하시오.

     

    Q2. 4번 학생이 전학을 가고, 62번 학생이 전학이 왔다. 이를 반영하여 위의 코드를 수정하시오.

     

     

    Q3. 번호와 이름을 같이 출력할 수 있도록 코드를 작성하시오. 이때 학생의 이름은 다음과 같다.

    남학생 : 도윤, 하준, 시우, 서준, 예준, 민준, 주원, 유준, 도현, 준우, 준서(1번~11번)

    여학생 : 규아, 늘봄, 드리, 려온, 민하, 보늬, 보예, 서연, 서현, 지우, 윤서(51번~61번)

     

     

     


     

     

    1번 문제부터 풀어보자.

    앞의 게시물에서 살펴본 코드를 살짝 수정하면 될 듯하다. 

    import random
    
    boy = list(range(1,12))			# 남자 리스트
    girl = list(range(51,62))		# 여자 리스트
    member = boy+girl		        # 학생 = 남학생+여학생
    
    a = random.sample(member,10)	# 학생 리스트에서 중복없이 10개 추출
    print(a)

    range를 활용하여 범위를 지정하고, list로 가져와 간단하게 리스트를 만들 수 있었다.

     


    2번 문제는 살짝 어려울 수 있으나 list를 조금만 다룰 수 있으면 쉽게 해결할 수 있다.

    import random
    
    boy = list(range(1,12))
    girl = list(range(51,62))
    boy.remove(4) #"4"를 찾아 값 삭제
    girl.append(62)
    member = boy+girl
    
    print(boy)        # 4번 삭제 확인
    print(girl)       # 62번 추가 확인
    a = random.sample(member,10)
    print(a)

    list안의 요소를 다룰 때는 인덱스 값을 활용하거나 값을 활용하는 방법으로 나뉘어지는데, 이번에는 값을 다루는 방법을 활용하였다. pop이나 del를 사용할 때는 인덱스를 활용하기 때문에 boy.pop(3)이나 del boy[3]를 활용하면 되겠다.

     

     


    3번 문제는 리스트, 딕셔너리 활용 등의 다양한 방법이 있겠지만, 역시 자기 손에 잘 맞게 코딩하면 그만이다.

    필자는 다음과 같이 코드를 작성하였다.

    # 랜덤 모듈 임포트
    import random
    
    # 학생 번호 리스트 작성
    boy_num = list(range(1,12))
    girl_num = list(range(51,62))
    
    # 학생 이름 리스트
    boy_name = ['도윤', '하준', '시우', '서준', '예준', '민준', '주원', '유준', '도현', '준우', '준서']
    girl_name = ['규아', '늘봄', '드리', '려온', '민하', '보늬', '보예', '서연', '서현', '지우', '윤서']
    
    # 학생 번호 및 이름 병합
    member_num = boy_num+girl_num
    member_name = boy_name+girl_name
    
    #  key : 학생 번호, value : 학생 이름으로 딕셔너리 생성
    member = dict(zip(member_num,member_name))
    
    # 번호와 이름이 잘 매칭되었는지 확인.
    print(member)
    
    # 뽑을 학생 수 
    many = int(input("몇명의 학생을 뽑을까요? : "))
    print(str(many)+"명의 학생을 뽑습니다.")
    
    a = random.sample(member_num,many)
    
    # 뽑힌 학생 수 만큼 반복하여 랜덤으로 뽑힌 학생 번호 = key에 따른 value값 찾아서 프린트. 
    for i in range(len(a)):                              # type(a) = list
      print(str(a[i])+"번 이름 :",member.get(a[i]))

     

    위의 코드의 실행결과이다.

     

    {1: '도윤', 2: '하준', 3: '시우', 4: '서준', 5: '예준', 6: '민준', 7: '주원', 8: '유준', 9: '도현', 10: '준우', 11: '준서', 51: '규아', 52: '늘봄', 53: '드리', 54: '려온', 55: '민하', 56: '보늬', 57: '보예', 58: '서연', 59: '서현', 60: '지우', 61: '윤서'}
    몇명의 학생을 뽑을까요? : 22
    22명의 학생을 뽑습니다.
    10번 이름 : 준우
    2번 이름 : 하준
    59번 이름 : 서현
    51번 이름 : 규아
    52번 이름 : 늘봄
    1번 이름 : 도윤
    5번 이름 : 예준
    60번 이름 : 지우
    53번 이름 : 드리
    61번 이름 : 윤서
    7번 이름 : 주원
    3번 이름 : 시우
    8번 이름 : 유준
    57번 이름 : 보예
    55번 이름 : 민하
    6번 이름 : 민준
    4번 이름 : 서준
    56번 이름 : 보늬
    11번 이름 : 준서
    54번 이름 : 려온
    58번 이름 : 서연
    9번 이름 : 도현

     

     

    물론 실제 교실에서 활용할 수 있으려면 학생 명단을 csv파일로 작성하고, 발표 횟수를 누가기록할 수 있도록 작성해야할 것이다. 가능하면 gui로 만드는 것도 고려해봄직하다.

     

    학생 이름을 랜덤으로 뽑는 프로그램은 쉽게 구할 수 있어서 사실 굳이 본인이 만들 필요는 없겠지만, 상용 프로그램과 내가 만드는 프로그램을 비교하면서 기능을 추가하거나, 디자인을 세련되게 만드는 그러한 과정이 내 코딩 실력을 기르는데에는 도움이 될 것이라고 생각한다.

     

Designed by Tistory.