ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python: 파이썬으로 로또를 만들어보자!
    Python 2020. 6. 30. 15:43

     

    이 사진은 글과 무관해요

     

    로또를 만들기 전에 규칙을 정하고 갑시다.

     

    1. 사용자는 1부터 45까지의 숫자 중 6개의 랜덤하고 중복되지 않는 숫자를 뽑는다.

     

    2. 당첨번호는 6개의 일반 당첨 번호1개의 보너스 당첨 번호로 이루어진다. 

       마찬가지로 7개의 번호는 1부터 45까지의 숫자로 중복되지 않게 뽑으며, 6개의 일반 당첨번호는 정렬되게 

       보너스 번호는 정렬과 상관없이 마지막에 오도록 한다!

     

       예) [3, 10, 12, 38, 39, 45, 17]

            [4, 10, 11, 29, 30, 42, 32]

     

    3. 당첨 상금은 다음과 같은 규칙을 따릅니다. 

     

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

     

     

     

    ◈ 로또 생성에 필요한 함수 

     

       1. n개의 서로다른 수를 가진 리스트를 리턴하는 generate_numbers(n) 함수를 구현한다.

     

       2. 6개의 복권번호와 1개의 보너스 번호를 가진 리스트를 리턴하는 draw_winning_number() 함수를 구현한다.

          단, 보너스 번호를 제외한 6개의 번호는 정렬되어 있다.

     

       3. 두 번호 리스트의 같은 번호 갯수를 리턴하는 count_matching_numbers(list_1, list_2) 함수를 구현한다.

     

       4. 내가 뽑은 번호 리스트와 당첨번호 리스트를 매개변수로 하고

          당첨상금을 리턴하는 check(numbers, winning_numbers) 를 만듭니다. 

     

    from random import randint
    
    LOTTO_NUMBER = 45
    
    
    def generate_numbers(n):  # n개의 서로다른 수를 가진 리스트를 리턴합니다.
    
        number_list = []
    
        for i in range(0, n):
            number = randint(1, LOTTO_NUMBER)
          
            if number not in number_list:  #number_list안에 내가 만든 난수가 들어있지 않으면
                number_list.append(number) #바로 넣어줍니다.
            
            else:
                while number in number_list:  # number_list안에 들어있지 않은 수를 찾을때까지 돌립니다
                    number = randint(1, LOTTO_NUMBER)
                    
                number_list.append(number)
       
         return number_list
    
    
    
    
    def draw_winning_number():  # 6개의 복권번호와 1개의 보너스 번호를 가진 리스트를 리턴합니다.
        # 단, 보너스 번호를 제외한 6개의 번호는 정렬되어 있습니다.
        
        lotto_number_list = list(generate_numbers(7))
       
        return sorted(lotto_number_list[0: 6]) + lotto_number_list[6: 7]
    # 리스트 슬라이싱을 해서 첫 6개의 숫자는 정렬, 나머지 하나의 숫자는 그냥 붙여줍니다. 
    
    
    
    def count_matching_numbers(list_1, list_2):  # 두 번호 리스트의 같은 번호 갯수 리턴
      
        count = 0
    
        for number_1 in list_1:      #  두 리스트의 값 중 같은 값을 이중 for문을 이용해서 찾아줍니다.
            for number_2 in list_2:
                if number_1 == number_2:
                    count += 1
    
    
        return count
    
    
    
    
    def check(numbers, winning_numbers):  #내가 뽑은 번호와 당첨번호를 매개변수로 받아줍니다.
       
        winning_numbers_exept_bonus = winning_numbers[0: 6]
        count_except_bonus = count_matching_numbers(numbers, winning_numbers_exept_bonus)
        count_including_bonus = count_matching_numbers(numbers, winning_numbers[6: 7])
        
        if count_except_bonus == 3:
            return 5000
            
        elif count_except_bonus == 4:
            return 50000
            
        elif count_including_bonus == 1 and count_except_bonus == 5:
            return 50000000
            
        elif count_except_bonus == 5:
            return 1000000
            
        elif count_except_bonus == 6:
            return 1000000000
    
        else:
            return 0
    
    
    
    
    

     

    # 테스트
    
    print(check([2, 4, 11, 14, 25, 40], [4, 12, 14, 28, 40, 41, 6]))  #5000
    print(check([2, 4, 11, 14, 25, 40], [2, 4, 10, 11, 14, 40, 25]))  #50000000
    
    
    print("=================================================================")
    
    
    # 로또 100개를 사서 한번 돌려보자 ㅋㅋㅋ
    
    
    lotto_number = draw_winning_number()
    my_spent_money = 0
    get_money_from_lotto = 0
    tries = 100
    
    for i in range(1, tries):
    
        my_spent_money += 1000
        my_lotto_number = generate_numbers(6)
        get_money_from_lotto += check(my_lotto_number, lotto_number)
    
    
    
    print("로또 {}개를 샀습니다.".format(tries))
    print("내가 쓴 금액: " + str(my_spent_money))
    print("내가 얻은 로또 당첨 금액: "+ str(get_money_from_lotto))
    benefit = get_money_from_lotto - my_spent_money
    print("순수익: " + str(benefit))
    
    
    

     

    5000
    50000000
    =================================================================
    로또 100개를 샀습니다.
    내가 쓴 금액: 99000
    내가 얻은 로또 당첨 금액: 10000
    순수익: -89000
    
    Process finished with exit code 0

     

    아무리 해도 순수익이 0을 넘지 않네요 ㅋㅋㅋ 로또는 하지 않는 걸로

    반응형

    댓글

Designed by Tistory.