-
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을 넘지 않네요 ㅋㅋㅋ 로또는 하지 않는 걸로
반응형'Python' 카테고리의 다른 글
Python: 파이썬 데코레이터(Decorator) 공부하기! (0) 2020.08.15 Python: 객체지향언어? 클래스(class)? 기초 공부하기! (0) 2020.08.15 Python: with open() 파일 읽기(read), 쓰기(write), 덧붙히기(append), strip(), split() 함수란? (0) 2020.06.30 Python: 모듈 import하고 표준 라이브러리 모듈 사용해보기! (feat. math, random, datetime) (0) 2020.06.30 Python: 에일리어싱(Aliasing) (1) 2020.06.29