728x90
반응형
규칙
- 참여자는 로또 번호를 총 6개 고른다.
- 당첨 번호는 총7개이다. 6개가 일반 당첨 번호이고, 1개는 보너스 번호이다.
- 당첨금액 규칙은 아래와 같다.
- 일반 당첨 번호 6개 모두 일치: 10억원
- 일반 당첨 번호 5개 일치 그리고 보너스 번호 1개 일치: 5천만원
- 일반 당첨 번호 5개 일치: 1백만원
- 일반 당첨 번호 4개 일치: 5만원
- 일반 당첨 번호 3개 일치: 5천원
필요 함수들
- 랜덤 로또 번호 추출
- 당첨 로또 번호 추출
- 랜덤 로또 번호와 당첨 로또 번호 중 일치하는 번호 개수 추출
- 당첨 금액 추출
랜덤 로또 번호 추출 함수
def generate_numbers(n):
numbers = []
i = 0
while i < n:
number = random.randint(1, 45)
if number not in numbers:
numbers.append(number)
i += 1
return numbers
추출한 로또 번호를 담을 numbers 리스트를 생성한다. while문은 6개의 번호가 추출될 때까지 진행한다. for문을 쓰지 않은 이유는 중복된 번호가 랜덤으로 추출될 시 다시 뽑아야 하기 때문이다.
당첨 로또 번호 추출 함수
def draw_winning_numbers():
winning_numbers = []
i = 0
while i < 6:
number = random.randint(1, 45)
if number not in winning_numbers:
winning_numbers.append(number)
i += 1
winning_numbers.sort()
while True:
bonus_number = random.randint(1, 45)
if bonus_number not in winning_numbers:
winning_numbers.append(bonus_number)
break
return winning_numbers
당첨 로또 번호를 담을 winning_numbers 리스트를 생성한다. 일반 당첨 번호 6자리를 먼저 추출한 후 정렬한다. 정렬 후에 보너스 당첨 번호를 추출한다.
보너스 번호 추출은 중복되는 번호가 나올 수 있기 때문에 무한루프를 생성시키고 겹치지 않는 번호가 나올 시 break문으로 빠져나온다.
일치하는 번호 개수 추출 함수
def count_matching_numbers(list_1, list_2):
count = 0
for i in list_1:
for j in list_2:
if i == j:
count += 1
return int(count)
파라미터로 내 로또 번호와 당첨 로또 번호를 받는다. 이중 for문을 통해 탐색하며 일치하는 로또 번호 개수를 추출한다.
당첨 금액 추출 함수
def check(my_numbers, winning_numbers):
same_count = 0
for i in my_numbers:
for j in winning_numbers[:6]:
if i == j:
same_count += 1
if winning_numbers[-1] in my_numbers:
bonus_check = True
else:
bonus_check = False
if same_count == 6:
return int(1000000000)
elif same_count == 5 and bonus_check == True:
return int(50000000)
elif same_count == 5:
return int(1000000)
elif same_count == 4:
return int(50000)
elif same_count == 3:
return int(5000)
else:
return int(0)
먼저 보너스 번호를 제외한 6개의 번호를 비교하여 일치하는 번호 개수를 same_count에 넣는다.
그 후 보너스 번호가 존재하면 bonus_check를 True로 하고 그렇지 않으면 False로 지정한다.
규칙을 반영하여 당첨금액을 리턴한다.
전체 코드
import random
def generate_numbers(n):
numbers = []
i = 0
while i < n:
number = random.randint(1, 45)
if number not in numbers:
numbers.append(number)
i += 1
return numbers
def draw_winning_numbers():
winning_numbers = []
i = 0
while i < 6:
number = random.randint(1, 45)
if number not in winning_numbers:
winning_numbers.append(number)
i += 1
winning_numbers.sort()
while True:
bonus_number = random.randint(1, 45)
if bonus_number not in winning_numbers:
winning_numbers.append(bonus_number)
break
return winning_numbers
def count_matching_numbers(list_1, list_2):
count = 0
for i in list_1:
for j in list_2:
if i == j:
count += 1
return int(count)
def check(my_numbers, winning_numbers):
same_count = 0
for i in my_numbers:
for j in winning_numbers[:6]:
if i == j:
same_count += 1
if winning_numbers[-1] in my_numbers:
bonus_check = True
else:
bonus_check = False
if same_count == 6:
return int(1000000000)
elif same_count == 5 and bonus_check == True:
return int(50000000)
elif same_count == 5:
return int(1000000)
elif same_count == 4:
return int(50000)
elif same_count == 3:
return int(5000)
else:
return int(0)
my_numbers = generate_numbers(7)
winning_numbers = draw_winning_numbers()
matching_numbers = count_matching_numbers(my_numbers, winning_numbers)
winning_amount = check(my_numbers, winning_numbers)
print('로또 번호 추출: {}'.format(my_numbers))
print('로또 당첨 번호: {}'.format(winning_numbers))
print('일치하는 번호 개수: {}'.format(matching_numbers))
print('당첨금 액수: {}'.format(winning_amount))
위 코드는 이상적인 코드가 아닌 개인적으로 작성한 코드이기 때문에 오류가 있거나 비효율적인 코드가 있을 수 있습니다 ㅠ
728x90
반응형
'파이썬[Python]' 카테고리의 다른 글
[파이썬/Python] 리스트/튜플/세트/딕셔너리 비교 (0) | 2024.10.02 |
---|---|
[Python/파이썬] Numpy(넘파이) 기초 정리 (0) | 2024.01.17 |
[파이썬/Python] 리스트(List)의 다양한 함수 - 삭제, 삽입, 정렬 (1) | 2023.11.03 |
[파이썬/Python] 옵셔널 파라미터 (optional parameter) (1) | 2023.11.02 |
[파이썬/Python] 파이썬에서 여러가지 포맷팅(format) 방법 (1) | 2023.11.02 |