로또 시뮬레이션
1) 번호뽑기
from random import randint
random_number = randint(1, 45)
def generate_numbers(n): # 랜덤 숫자 뽑는것(★중복 없이★). 리스트화 하는것.
i = 0
ran_num_list = []
while i < n:
random_number = randint(1, 45)
ran_num_list.append(random_number)
i += 1
return (ran_num_list)
중복없이.... 중복없이.............
2시간정도 붙잡았다
from random import randint
# random_number = randint(1, 45)
# 내가 이걸 여기에 왜 넣었나 했는데 아마 다음 함수 쓸 때 오류나서 적은 것 같다
def generate_numbers(n): # 랜덤 숫자 뽑는것(★중복 없이★). 리스트화 하는것.
i = 0
ran_num_list = []
while i < n: # 변수를 줄이기 위해 ran_num_list에 len함수를 써서
# len(ran_num_list) < n 으로 하셨다.... 천재 만재^^,,,
random_number = randint(1, 45)
if random_number not in ran_num_list: # 리스트에 없을때만 추가해주기... not in...
ran_num_list.append(random_number)
i += 1
return(ran_num_list)
힌트도 다 쓰고 구글링도 해서 not in 찾았는데
활용을 할 줄 알아야지.....
참지못하고 정답을 봤다
생각의 전환^^...
print(generate_numbers(6))
결과
[16, 2, 30, 40, 15, 33]
2) 로또 시뮬레이션: 당첨 번호 뽑기
<내가 한 방법>
from random import randint
def generate_numbers(n):
# 생략
def draw_winning_numbers():
# 코드를 작성하세요.
ran_sort = sorted(generate_numbers(6))
if randint(1, 45) not in ran_sort:
ran_sort.append(randint(1, 45)) # 당첨번호 6개 정렬, 보너스번호는 마지막에 추가
return(ran_sort)
print(draw_winning_numbers())
난 이런방식으로 했는데 음....
중간중간에 계속 여섯자리가 나와서... 당황
간혹 다섯자리 나올때도 있음
슬라이싱 개념 이용 !!!
모범답안
def draw_winning_numbers():
winning_list = generate_numbers(7)
# 당첨번호 6개 정렬, 보너스번호는 마지막에 추가
return sorted(winning_list[:6]) + winning_list[6:]
결과
[4, 12, 14, 28, 40, 41, 6]
---------------------- -
앞 여섯자리는 정렬, 보너스 숫자는 정렬되지 않음...
3) 로또 시뮬레이션: 겹치는 번호 개수
def count_matching_numbers(list_1, list_2):
# 코드를 작성하세요.
num = 0
for n in list_1:
if n in list_2:
num += 1
return num
# 테스트
print(count_matching_numbers([2, 7, 11, 14, 25, 40], [2, 11, 13, 14, 30, 35]))
print(count_matching_numbers([2, 7, 11, 14, 25, 40], [14]))
결과
3
1
4) 05. 로또 시뮬레이션: 당첨금 확인
def count_matching_numbers(ran_num_list, winning_list):
# 요소가 같으면 1 추가 그 1 추가된 변수를 리턴하기
# 리스트1 인덱스 n번째가 list_2에 있나? 있으면 변수에 1 더하기
# set,.intersection 써보기
num = 0
for n in ran_num_list:
if n in winning_list:
num += 1
return(num)
def check(numbers, winning_numbers): # 참가자가 뽑은 리스트, 주최에서 뽑은 리스트
reward_money = 0
if count_matching_numbers(numbers, winning_numbers[:6]) == 6: # type int임
reward_money = 100000000
elif count_matching_numbers(numbers, winning_numbers[:6]) == 5 and count_matching_numbers(numbers, winning_numbers[6:]) == 1:
reward_money = 50000000
elif count_matching_numbers(numbers, winning_numbers[:6]) == 5:
reward_money = 1000000
elif count_matching_numbers(numbers, winning_numbers[:6]) == 4:
reward_money = 50000
elif count_matching_numbers(numbers, winning_numbers[:6]) == 3:
reward_money = 5000
return reward_money
# 테스트
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]))
결과
5000
50000000
변수 정의 안하니까 가독성이 많이 떨어졌다
변수 정의 깔끔하게 해줬다
완성된 로또창

와! 십만원 써서 이만원 당첨됐다!