본문 바로가기
프로그램

[파이썬] 문제 : 베스킨라빈스 31게임

by 오디세이99 2024. 6. 14.
728x90
반응형
import random

# 현재수(now_num)에서 숫자(cnt) 만큼 증가 시키는 함수
def add_number(now_num, cnt):  # num_num : 현쟈수, cnt : 증가시키는 수(증가량)
    n_lst = []                 # 증가시키는 숫자들을 저장할 리스트 변수
    n_lst = [n for n in range(now_num+1,now_num + cnt + 1)]    # 증가시킨 수들을 리스트로 만듬
    rtn_flag = False           # 31이 있으면 우선 없다고(False)로 함
    if 31 in n_lst:            # 리스트에 31이 있다면
        rtn_flag = True        # 31이 있다고 True 표시(상대방 승리)

    return rtn_flag, n_lst, n_lst[-1]  # 리턴. rtn_flag:31 발견여부. n_lst:숫자들이 있는 리스트, n_lst[-1]:마지막 숫자

# 리스트의 숫자를 출력하는 함수
def num_print(lst):            # lst : 숫자들이 있는 리스트
    for i in range(len(lst)):  # 리스트(lst)의 요소수 만큼 반복). i는 리스트의 인덱스가 됨
        print(lst[i],end='')   # 출력. end=''로 하면 줄바꿈 없음.
        if i < len(lst)-1:     # 마지막에는 ','를 출력하지 않도록 함
            print(', ',end='')
    print()                    # 마지막에 줄바꿈을 함

num = 0
while True:                         # 무한 반복
    me = int(input())               # 사용자 입력 받기
    flag, lst, num = add_number(num, me) # 숫자 증가 함수  실행. 31여부와 마지막 수를 받음
    if flag == True:                # 31이 있다
    num_print(lst)                  # 숫자 출력면
        print('ai가 승리')
        break

    ai = random.randint(1, 3)
    print('ai숫자: ',ai)
    flag, lst, num = add_number(num, ai)
    if flag == True:
        print('사용자가 승리')
        break
    num_print(lst)

728x90
반응형

댓글