[python] 로또 시뮬레이션

May·2022년 6월 28일
0

python_기초

목록 보기
10/11

로또 시뮬레이션

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

변수 정의 안하니까 가독성이 많이 떨어졌다

변수 정의 깔끔하게 해줬다

완성된 로또창

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

profile
ฅ˘◡˘ฅ

0개의 댓글