Skip to main content

Command Palette

Search for a command to run...

파이썬 업다운 게임 만들기, 파이썬 가위바위보 게임 만들기 실수들

Updated
4 min readView as Markdown
파이썬 업다운 게임 만들기, 파이썬 가위바위보 게임 만들기 실수들

업다운 게임 만들기

  1. 플레이어와 컴퓨터가 참여하는 업다운 게임을 만드세요.

  2. 프로그램은 다음과 같은 기능을 포함해야 합니다.

    • 컴퓨터는 1부터 100 사이의 랜덤한 숫자를 생성합니다.

    • 플레이어는 숫자를 입력하고, 입력한 숫자와 컴퓨터의 숫자를 비교하여 "업" 또는 "다운" 힌트를 제공합니다.

    • 플레이어가 컴퓨터의 숫자를 정확히 맞히면 시도한 횟수를 알려줍니다.

    • 플레이어가 숫자를 맞힐 때까지 위 과정을 반복합니다.

추가 도전 과제:

  1. 플레이어가 입력한 숫자가 범위를 벗어날 경우, 적절한 안내 메시지를 출력하여 유효한 범위 내의 숫자를 입력하도록 유도하세요.

  2. 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가하세요.

  3. 게임이 종료될 때 플레이어의 최고 시도 횟수를 기록하고, 다음 게임에서 이를 표시하는 기능을 구현하세요.

오류 1

숫자를 입력하세요 : 다음 업 or 다운 나오고 바로 끝나길래 왜일까 했는데 내가 바보같이 업이나 다운에도 break문을 적어뒀었다.
elif와 else에 break를 지워주니 정상 작동

 if player_input == 'random_number':
            print('맞았습니다 🎉')
            # 플레이어가 컴퓨터의 숫자를 카운팅 할때마다 +1
            count += 1
            break
        elif player_input > random_number:
            print('다운')
            break
        else:
            print('업')
            break

오류 2

바로 끝나는 굴레에서 벗어나오니 이번엔 정답이 맞는데도 ‘업', ‘다운'만 계속해서 나왔다.
이번에는 if player_input == random_number에 random_number를 문자열로 사용했다.
‘random_number’는 문자열인데 int 정수형으로 비교하려고 해서 발생한 오류였다.

if player_input == random_number:
            print('맞았습니다 🎉')

오류 3

유효 범위에서 벗어날 경우 뜨는 알림에 '1~100사이의 숫자를 입력해 주세요.'와 업 or 다운이 같이떴다.
if문을 2개를 사용해서 다 뜨는것이여서 1~100사이의 숫자 입력 문구를 제일 상단인 if에 적어두고
다른 조건문들을 elif를 이용해서 적어줬다.

수정 전

if player_input < 1 or player_input > 100:
            print('1~100사이의 숫자를 입력해 주세요.')

        if player_input < random_number:
              print('업⬆️')
        elif player_input > random_number:
            print('다운⬇️')

수정 후

 # 유효범위 벗어날 경우 알림
        if player_input < 1 or player_input > 100:
            print('1~100사이의 숫자를 입력해 주세요.')

        elif player_input < random_number:
            print('업⬆️')
        elif player_input > random_number:
            print('다운⬇️')
        else:
            print('맞았습니다 🎉')
            print(f'축하합니다! {count}번 만에 성공하습니다.') 
            break

가위 바위 보 게임 만들기

  1. 플레이어와 컴퓨터가 참여하는 가위바위보 게임을 만드세요.

  2. 게임은 다음 순서로 진행됩니다.

    • 플레이어가 가위, 바위, 보 중 하나를 입력합니다.

    • 컴퓨터도 무작위로 가위, 바위, 보 중 하나를 선택합니다.

    • 플레이어와 컴퓨터의 선택을 비교하여 승패를 판정합니다.

    • 결과를 출력하여 플레이어가 이겼는지, 컴퓨터가 이겼는지, 비겼는지를 알려줍니다.

    • 게임을 반복하거나 종료할 수 있는 기능을 추가하세요.

추가 도전 과제:

  1. 게임의 승, 패, 무승부 횟수를 기록하고, 게임 종료 시에 플레이어에게 통계를 제공하세요.

  2. 플레이어가 입력할 때 대소문자를 구분하지 않도록 프로그램을 개선하세요.

  3. 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가하세요.

오류 1

플레어어나 컴퓨터가 이기거나 질경우 게임 종료, 비길경우 게임 계속 유지
비긴경우에 무한 루프 발생

수정전

while True:
    if user == computer:
        print('비겼습니다')
        # continue
    elif (user == '가위' and computer == '바위') or (user == '바위' and computer == '보') or (user == '보' and computer == '가위'):
        print('졌습니다')
        break
    else:
        print('이겼습니다')
        break

continue는 for문이면 for로 가서 다시 시작하고, while문이면 while문으로 다시 가서 시작한다.
무한반복이 안되려면 중간에 사용자가 선택한 값이나 컴퓨터가 선택한 값이 바뀌어야 한다.
continue가 없으면 if문이 끝난 지점으로 이동, continue가 있으면 다시 반복문으로 와서 돌기 시
비길 경우 게임을 다시 시작하고 싶으므로 input값을 while안에 넣어주면 된다.

수정후

while True:
        # 사용자 선택
        user = input('가위, 바위, 보 중 하나를 선택하세요 : ')

        # 컴퓨터 선택
        rps = ['가위', '바위', '보']
        computer = random.choice(rps)
        # computer = '보'
        print(f'사용자 : {user}, 컴퓨터 : {computer}')

        if user == computer:
            print('비겼습니다')
            continue
        elif (user == '가위' and computer == '바위') or (user == '바위' and computer == '보') or (user == '보' and computer == '가위'):
            print('졌습니다')
            break
        else:
            print('이겼습니다')
            break

오류 2

게임을 다시 시작하는지 선택하는 구문에서 선택에 y를 누르면 계속 물어봄

수정전

while True:    
    replay = input('다시 하시겠습니까? (y/n) : ')
    if replay != 'y':
        break

수정후

while True:    
    # 플레이어나 컴퓨터가 이기거나 질경우 게임 종료
    # 비길경우 게임 계속
    while True:
        # 사용자 선택
        user = input('가위, 바위, 보 중 하나를 선택하세요 : ')

        # 컴퓨터 선택
        rps = ['가위', '바위', '보']
        computer = random.choice(rps)
        # computer = '보'
        print(f'사용자 : {user}, 컴퓨터 : {computer}')

        if user == computer:
            print('비겼습니다')
            continue
        elif (user == '가위' and computer == '바위') or (user == '바위' and computer == '보') or (user == '보' and computer == '가위'):
            print('졌습니다')
            break
        else:
            print('이겼습니다')
            break
        ### continue가 없으면 비겼습니다가 옴

    replay = input('다시 하시겠습니까? (y/n) : ')
    if replay != 'y':
        break

중첩 while문을 이용하여 게임 한판이 끝난 후 (플레이어가 이기거나 진 후) 유저에게 게임을 계속할것인지 물어본다.

중첩 while문을 사용하여 replay를 제일 아래에 둔 이유는 사용자가 게임을 계속하고 싶을 때마다 게임 전체를 새롭게 시작하게 하려는 의도 때문이다.

내부 while문은 한판의 게임을 처리하고, break문을 통해 이기거나 진 경우 게임을 종료하고, 비긴경우 continue를 통해 게임을 다시 시작한다.

17 views

More from this blog

s3사용 및 s3:PutBucketPolicy 권한 오류

1. S3 생성 중 정책 생성 페이지에서 s3:PutBucketPolicy 권한이 없어 오류 발생 IAM 사용이 아닌 루트 사용자 버전으로 설명 AWS IAM 콘솔 → 정책 → AdministratorAccess⁠검색→ 정책이 나타나면 사용자에 연결→ 없다면 새로운 정책 추가 없으므로 AdministratorAccess 생성 정책 생성 버튼 클릭 → JSON 탭 선택 후 아래 코드 입력 → 생성 { "Version": "2012-10-1...

Mar 12, 20252 min read9
s3사용 및 s3:PutBucketPolicy 권한 오류

챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

https://youtu.be/5soSQgVHGEA OpenAI API를 이용한 챗봇을 만들면서 대화가 길어질수록 LLM 호출 시 토큰 수 증가로 응답 시간이길어지는 문제가 발생 문제분석 여기서 생각하는 문제는 db 조회의 부하 처음 챗봇에게 부여하는 역할이 너무 긴데, 이걸 매 API 호출마다 전송함 대화 흐름을 기억하기 위해 챗봇-유저 간 대화 내용을 모두 DB에 저장한 다음 그대로 API 호출 마다 LLM에 전달함 → 모든 대화 ...

Jan 16, 20253 min read122
챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

dayeon's blog

124 posts