파이썬으로 스무고개 게임을 구현

파이썬으로 스무고개 게임을 구현하는데 OpenAI API를 사용하는 것은 흥미로운 아이디어입니다. 전체 코드를 검토한 결과, 몇 가지 문제를 해결해야 할 부분이 보입니다. 아래는 전체적으로 고친 코드입니다.

주요 수정 사항

  1. correct_answer를 저장하고 계속 사용할 수 있도록 prompt에 제대로 반영.
  2. 사용자의 질문과 정답 확인 로직을 명확히 분리.
  3. OpenAI API 요청에 필요한 메시지들을 올바르게 전달.

수정된 코드

import openai

# OpenAI API 키 설정
openai.api_key = "여긴걍api코드쓰는곳"

def start_twenty_questions():
    print("스무고개를 시작하자고 말하면 스무고개 게임을 시작할 수 있어요!")
    while True:
        start_game = input("스무고개를 시작하자고 말해주세요: ")
        if "스무고개를 시작하자" in start_game:
            print("좋아요, 스무고개를 시작할게요! 앞으로 20개의 질문을 제게 주세요.")
            break
        else:
            print("스무고개를 시작하자고 말해주세요.")

    # 주제 입력
    bb = input('주제를 정해주세요: ')

    # 제시어 생성 및 정답 설정
    prompt = f"""
    스무고개를 할거야. 너는 스무고개 문제를 내는 입장인거야.
    {bb}라는 주제와 관련된 제시어를 하나 정해줘.
    그리고 정한 제시어를 correct_answer라는 변수에 저장해줘.
    """
    completion = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[
            {"role": "user", "content": 'You are an examiner of twenty questions game.'},
            {"role": "user", "content": prompt}
        ]
    )
    correct_answer = completion['choices'][0]['message']['content'].strip()

    print("제시어가 설정되었습니다. 이제 20개의 질문을 시작합니다.")

    attempts_left = 3
    questions_asked = 0

    while questions_asked < 20:
        question = input("질문을 해주세요: ")
        questions_asked += 1

        # 질문에 대한 답변 생성
        prompt = f"""
        우린 스무고개를 하고 있어. 사용자가 질문을 하면 correct_answer에 저장해둔 제시어에 대한 답을 출력해줘.
        제시어는 '{correct_answer}'야. 질문: '{question}'
        """
        completion = openai.ChatCompletion.create(
            model="gpt-4",
            messages=[
                {"role": "user", "content": prompt}
            ]
        )
        answer = completion['choices'][0]['message']['content'].strip()
        print(f"답변: {answer}")

        # 정답 확인
        guess = input("정답을 말해주세요 (생략하려면 엔터): ")
        if guess.strip() == correct_answer:
            print(f"정답입니다! 제시어는 '{correct_answer}'였습니다.")
            return
        else:
            attempts_left -= 1
            if attempts_left > 0:
                print(f"틀렸어요! 앞으로 정답을 말할 수 있는 기회는 총 {attempts_left}번이 남았어요!")
            else:
                print("정답을 말할 수 있는 기회를 모두 잃었어요! ㅠㅠ 다시 한 번 하실 건가요?")
                print(f"정답은 '{correct_answer}'였습니다.")
                return

    print("질문이 모두 종료되었어요. 다음 기회에 도전해주세요.")

# 게임 시작
start_twenty_questions()

주요 변경 사항 설명

  1. 제시어 생성 및 정답 설정: 주제를 입력받고, OpenAI API를 사용하여 주제와 관련된 제시어를 생성하고 correct_answer에 저장합니다.
  2. 질문 루프: 질문을 20번까지 받을 수 있도록 루프를 구성하고, 각 질문에 대해 OpenAI API를 호출하여 답변을 생성합니다.
  3. 정답 확인: 사용자가 정답을 맞추려고 할 때, 정답과 비교하여 맞추면 게임을 종료하고, 아니면 시도 횟수를 줄이며 계속 진행합니다.

이 수정된 코드를 통해 스무고개 게임을 보다 원활하게 진행할 수 있을 것입니다. 추가로 문제가 발생하거나 더 궁금한 사항이 있다면 언제든지 질문해주세요!

Leave a Comment