ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Toy Project]1. Lotto simulation
    Project/Toy Project 2020. 12. 28. 22:35

    파이썬을 배우고 처음 하는 프로젝트다 !!

    이걸 프로젝트라 할 수 있을지는 모르겠지만 그래도 열심히 했다!!!

     

    Lotto simulation

     

    규칙

    로또는 주 1회씩 열린다. 하지만 한 사람이 한 회차에 여러 번 참여할 수도 있고 번호는 1부터 45까지 있다

    주최 측에서는 매주 6개의 '일반 당첨 번호'와 1개의 '보너스 번호'를 뽑고  참가자는 1번 참여할 때마다 서로 다른 번호 6개를 선택한다

    당첨 액수는 아래 규칙에 따라 결정

    1. 내가 뽑은 번호 6개와 일반 당첨 번호 6개 모두 일치 (10억 원)
    2. 내가 뽑은 번호 5개와 일반 당첨 번호 5개 일치, 그리고 내 번호 1개와 보너스 번호 일치 (5천만 원)
    3. 내가 뽑은 번호 5개와 일반 당첨 번호 5개 일치 (100만 원)
    4. 내가 뽑은 번호 4개와 일반 당첨 번호 4개 일치 (5만 원)
    5. 내가 뽑은 번호 3개와 일반 당첨 번호 3개 일치 (5천 원)

     

    함수 설정

    generate_numbers : 파라미터로 정수 n을 받고 무작위로 1과 45 사이의 서로 다른 번호 n개를 뽑고, 리스트로 리턴한다.

    draw_winning_numbers : 일반 당첨 번호 6개와 보너스 번호 1개가 포함된 리스트를 리턴 일반 당첨 번호 6개는 정렬되어 있어야 하고 보너스는 마지막에 추가한다

    count_matching_numbers : 파라미터로 list_1과 list_2를 받고, 두 리스트 사이에 겹치는 번호 개수를 리턴한다.

    check : 참가자의 당첨 금액을 리턴한다.

     

    from random import randint 
    
    
    def generate_numbers(n):
        numbers = [] 
    
        while len(numbers) < n:
            new_number = randint(1, 45)
            if new_number not in numbers:
                numbers.append(new_number)
    
        return numbers
    
    
    def draw_winning_numbers():
        winning_numbers = generate_numbers(7)
        return sorted(winning_numbers[:6]) + winning_numbers[6:]
    
    
    def count_matching_numbers(numbers, winning_numbers):
        count = 0
    
        for num in numbers:
            if num in winning_numbers:
                count = count + 1
    
        return count
    
    
    def check(numbers, winning_numbers):
        count = count_matching_numbers(numbers, winning_numbers[:6])
        bonus_count = count_matching_numbers(numbers, winning_numbers[6:])
    
        if count == 6:
            return 1000000000
        elif count == 5 and bonus_count == 1:
            return 50000000
        elif count == 5:
            return 1000000
        elif count == 4:
            return 50000
        elif count == 3:
            return 5000
        else:
            return 0
    # 테스트
    print(check([2, 4, 11, 14, 25, 40], [4, 12, 14, 28, 40, 41, 6]))
    print(check([2, 4, 11, 14, 25, 40], [2, 4, 10, 11, 14, 40, 25]))
    
    

     

    테스트해보니까 잘된다.. 엄청 오래 걸렸다.

    위 코드를 lottery.py로 저장하고  시뮬레이션 결과를 브라우저에서 보기 위해서 lottery html을 만들어준다

    100장 돌려도 안된다.... 70000원 손해 봤다... 

     

    들여 쓰기 때문에 오류 났는데 1시간째 찾고 있었고... 오타 때문에 안 돌아가는걸 못 찾아서 30분이나 걸렸다. 

    프로그래밍은 멘탈 관리가 중요한 기술인 것을 절실히 깨달았다

     

    무언가를 내 손으로 직접 만든 다라는 것에서 엄청난 성취감이 오는 것 같다. 이 맛에 프로그래밍하는 건가..ㅋ

    아무튼 오늘의 포스팅은 이걸로 끝! 

Designed by Tistory.