규칙
로또는 주 1회씩
한 사람이 한 회차에 여러 번 참여할 수도 있음
번호 : 1 ~ 45
주최측 : 매주 6개의 '일반 당첨 번호'와 1개의 '보너스 번호' 뽑음
참가자 : 1번 참여할 때마다 서로 다른 번호 6개를 선택
당첨 액수 결정 규칙
- 내가 뽑은 번호 6개와 일반 당첨 번호 6개 모두 일치 (10억 원)
- 내가 뽑은 번호 5개와 일반 당첨 번호 5개 일치, 그리고 내 번호 1개와 보너스 번호 일치 (5천만 원)
- 내가 뽑은 번호 5개와 일반 당첨 번호 5개 일치 (100만 원)
- 내가 뽑은 번호 4개와 일반 당첨 번호 4개 일치 (5만 원)
- 내가 뽑은 번호 3개와 일반 당첨 번호 3개 일치 (5천 원)
# 과제에 필요한 함수
generate_numbers
파라미터로 정수 n을 받음
무작위로 1 ~ 45 사이의 서로 다른 번호 n개를 뽑고, 그 번호들이 담긴 리스트 리턴
>> 참가자 번호 뽑을 때, 보너스를 포함한 당첨 번호 5개 뽑을 때 사용
draw_winning_numbers
일반 당첨 번호 6개, 보너스 번호 1개가 포함된 리스ㅡ 리턴
일반 당첨 번호 : 6개 정렬, 보너스 번호 : 마지막에 추가
count_matching_numbers
파라미터로 리스트 list_1, list_2 받고, 두 리스트 사이에 겹치는 번호 개수 리턴
check
참가자의 당첨 금액 래턴
파라미터로 참가자가 뽑은 번호가 담긴 리스트 numbers와 주최측에서 뽑은 번호가 담긴 리스트 winning_numbers 받음
numbers : 번호 여섯 개 담고 있음
winning_numbers : 보너스까지 해서 7개 번호 담고 있음
from random import randint
def generate_numbers(n):
numbers = [] # 빈 리스트 만들기
while len(numbers) < n:
num = randint(1, 45) # 번호 무작위로 뽑기
if num not in numbers: # new_number가 numbers 리스트에 없는 경우에만 추가 ; 중복값 제외
numbers.append(num) # new_number 추가
return numbers
def draw_winning_numbers():
winning_numbers = generate_numbers(7) # 우선 일반 번호 7개 뽑기
return sorted(winning_numbers[:6]) + winning_numbers[6:] # 일반 당첨 번호인 첫 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 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):
# 참가자 번호 6개와 일반 당첨 번호 6개 중 몇 개가 일치하는지
count = count_matching_numbers(numbers, winning_numbers[:6])
# 참가자 번호 6개와 보너스 번호 1개 중 몇 개가 일치하는지
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
위 코드를 lotttery.py 라는 파일에 넣고 // 모듈로 활용
lottery.py 파일로 lottery.html 파일 생성
- lottery.py 와 lottery.driver.py 를 같은 폴더에 넣기
- 그리고 나서 lottery_driver.py 실행
# lottery_driver.py ; 코드잇 제공
import lottery
HEAD_HTML = '''
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>로또</title>
<style type="text/css" media="screen">
body {
background-color: #FAFAFA;
padding-top: 80px;
}
.navbar {
background-color: #29B895;
border-radius: 0 !important;
}
.navbar-brand {
color: white;
}
.navbar-brand:hover {
color: white;
}
.jumbotron {
border-radius: 10px;
padding: 20px;
}
.jumbotron h1 {
margin: 0 0 20px 0;
font-size: 24px !important;
}
.cash-div {
font-size: 24px;
}
.cash-div b {
margin-right: 10px;
}
.red {
background-color: #D84134;
color: white;
}
.green {
background-color: #6AC83B;
}
.yellow {
background-color: #FBC34B;
}
.blue {
background-color: #528FD2;
color: white;
}
.black {
background-color: #414141;
}
.plus {
font-size: 30px;
margin: 0 10px 0 10px;
}
.ball {
color: white;
font-size: 20px;
border-radius: 50%;
display: inline-block;
width: 60px;
height: 60px;
text-align: center;
line-height: 60px;
}
.attempt-numbers {
font-size: 18px;
outline: 1px solid black;
display: inline-block;
margin-bottom: 20px;
margin-right: 20px;
height: 30px;
}
.attempt-number {
display: inline-block;
width: 30px;
text-align: center;
line-height: 30px;
}
.attempt-prize {
display: inline-block;
font-size: 18px;
}
</style>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
</head>
'''
MAIN_HTML = '''
<!DOCTYPE html>
<html>
<body>
<nav class="navbar navbar-fixed-top">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<a class="navbar-brand" href="#">LOTTO</a>
</div>
</div><!-- /.container-fluid -->
</nav>
<div class="col-xs-10 col-xs-offset-1">
<div class="jumbotron">
<h1><b>당첨 번호</b></h1>
{numbers}
</div>
</div>
<div class="col-xs-5 col-xs-offset-1">
<div class="jumbotron cash-div">
<b>당첨 금액</b>
<span>₩{total_prize}</span>
</div>
</div>
<div class="col-xs-5">
<div class="jumbotron cash-div">
<b>쓴 금액</b>
<span>₩{total_cost}</span>
</div>
</div>
<div class="col-xs-10 col-xs-offset-1">
<div class="jumbotron">
<h1><b>내 번호</b></h1>
{attempts}
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
</body>
</html>
'''
def get_color(number):
if number <= 10:
return "yellow"
elif number <= 20:
return "blue"
elif number <= 30:
return "red"
elif number <= 40:
return "black"
else:
return "green"
def generate_numbers_html(numbers):
# template for winning ball
ball_html = '''
<div class="ball {color}">
{number}
</div>
'''
html = ""
for number in numbers[:6]:
html += ball_html.format(number = number, color = get_color(number))
html += '<span class="plus">+</span>'
html += ball_html.format(number = numbers[-1], color = get_color(numbers[-1]))
return html
def generate_attempt_html(attempt, winning_numbers):
number_html = '''
<span class="attempt-number">{number}</span>
'''
red_number_html = '''
<span class="attempt-number red">{number}</span>
'''
blue_number_html = '''
<span class="attempt-number blue">{number}</span>
'''
attempt_html = ""
for num in attempt[0]:
if num in winning_numbers[:6]:
attempt_html += red_number_html.format(number=num)
elif num in winning_numbers[6:]:
attempt_html += blue_number_html.format(number=num)
else:
attempt_html += number_html.format(number=num)
html = '''
<div class="attempt">
<div class="attempt-numbers">
{attempt}
</div>
<div class="attempt-prize">
₩{prize}
</div>
</div>
'''.format(attempt=attempt_html, prize=attempt[1])
return html
def main(winning_numbers, tries, total_prize, total_cost):
out_file = open('lottery.html', 'w', encoding='utf-8')
winning_numbers_html = generate_numbers_html(winning_numbers)
attempts_html = ""
for attempt in tries:
attempts_html += generate_attempt_html(attempt, winning_numbers)
out_file.write(HEAD_HTML + MAIN_HTML.format(
numbers=winning_numbers_html,
attempts=attempts_html,
total_prize=total_prize,
total_cost=total_cost)
)
out_file.close()
WINNING_NUMBERS = lottery.draw_winning_numbers()
NUM_TRIES = 100
tries = []
total_prize = 0
total_cost = 0
for i in range(NUM_TRIES):
attempt = sorted(lottery.generate_numbers(6))
prize = lottery.check(attempt, WINNING_NUMBERS)
tries.append((attempt, prize))
total_prize += prize
total_cost += 1000
main(
WINNING_NUMBERS,
sorted(tries, key=lambda x: -x[1]),
total_prize,
total_cost
)
cf) PyChram
lottery.html 을 우클릭
Open in -Browser에 마우스 올리고 원하는 브라우저 선택
'Language > Python' 카테고리의 다른 글
Project : 숫자야구 (0) | 2022.08.30 |
---|---|
파일 읽고 쓰기 (0) | 2021.07.12 |
모듈 , 사용자 입력 (0) | 2021.07.12 |
데이터 (0) | 2021.07.09 |
사전 (0) | 2021.07.08 |