[Python]_로또 시뮬레이션 : 당첨금 확인

hanseungjune·2022년 6월 13일
0

Python

목록 보기
33/38

풀이

def count_matching_numbers(numbers, winning_numbers):
    # 지난 과제의 코드를 붙여 넣으세요.
    # 코드를 작성하세요.
    count = 0
    for number_1 in numbers:
        for number_2 in winning_numbers:
            if number_1 == number_2:
                count += 1
    return count

def check(numbers, winning_numbers):
    # 코드를 작성하세요.
    if(count_matching_numbers(numbers, winning_numbers)==6 and winning_numbers[6] not in numbers[0:]):
        return 1000000000
    elif(count_matching_numbers(numbers, winning_numbers)==6 and winning_numbers[6] in numbers[0:]):
        return 50000000
    elif(count_matching_numbers(numbers, winning_numbers)==5):
        return 1000000
    elif(count_matching_numbers(numbers, winning_numbers)==4):
        return 50000
    elif(count_matching_numbers(numbers, winning_numbers)==3):
        return 5000
    else:
        return "꽝입니다"
# 테스트
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]))

일단 문제를 풀기는 했는데... 코드가 길어서 처리가 좀 느렸다 그래서 모범답안을 참고하려고 한다.
내 코드의 경우에는 겹치는 갯수 및 겹치지만 보너스 번호와 겹치는지 안겹치는지를 따져가면서 조건을 걸었다. 그래서 해당 코드가 좀 길어진 것 같다.

모범 답안

def check(numbers, winning_numbers):
    count = count_matching_numbers(numbers, winning_numbers[:6])
    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

사실 변수를 지정해야 한다는 것을 알고 있었는데 어떻게 지정해야할 지 감이 안잡혔다. 이를 모범답안으로 부터 해결을 했는데, count 변수의 경우에는 일단 총 겹치는 갯수인거 같고, bonus_count 변수의 경우에는 보너스번호와 겹치는 갯수로 파악된다.

이를 변수로 삼아서 코드가 짧아진 것 같고, 조건문의 방식은 내꺼랑 비슷했다. 다만 변수의 처리가 굉장히 깔끔해서 역시 모범 답안인 것 같다.

누적 코드

from random import randint


def generate_numbers(n):
    numbers = []

    while len(numbers) < n:
        new_number = randint(1, 45)
        if new_number not in numbers:
            numbers.append(new_number)

    return numbers


def draw_winning_numbers():
    winning_numbers = generate_numbers(7)
    return sorted(winning_numbers[:6]) + winning_numbers[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 check(numbers, winning_numbers):
    count = count_matching_numbers(numbers, winning_numbers[:6])
    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
profile
필요하다면 공부하는 개발자, 한승준

0개의 댓글