파이썬 369게임 도와주세요!!

조회수 8423회

파이썬을 배우고 있는 학생입니다. 369게임을 만드려고 하는데, 각 숫자는 1회마다 모두 유저가 직접 입력합니다. 예를 들어 처음에 '숫자를 입력하세요:'가 나오면 거기에 유저가 1을 입력하면 1이 출력되고, 그 다음에 다시 '숫자를 입력하세요:'가 나오면 2, 그 다음에 '숫자를 입력하세요:'가 나오면 clap을 입력하여 clap이 출력되도록 합니다. 만약 입력해야하는 부분에 들어가야할 숫자에 33,36,..과 같이 3,6,9가 두 개 이상 있다면 clapclap과 같이 clap도 두 번 이상 입력/출력되도록 합니다. 3,6,9를 입력해야하는 부분에 숫자(3,6,9)를 입력하면 게임 오버가 출력되면서 프로그램이 종료됩니다. 아래는 제가 위 내용을 바탕으로 아주 간단하게 짠 코드입니다.

while True:

n = input("Enter the next number: ")
if "3" in n or "6" in n or "9" in n:
    print("Game Over!")
    break

else: print(n)

궁금한 것은,

  1. 만약 어떤 숫자 다음에 1만큼 큰 숫자가 아니라 같은 숫자나 작은 숫자, 2이상 큰 숫자를 입력했을 경우
  2. 33,333,3333,....과 같은 3,6,9가 n개 이상 들어가는 숫자를 입력해야하는 부분에 clap을 n번 입력하지 않았을 경우
  3. clap을 입력해야할 때 입력하지 않고 다른 것을 입력했을 경우

에도 게임 오버가 나오며 코드가 종료되도록 하려면 어떻게 수정/보완해야 할까요? 그러니까 게임이 시작되어 숫자를 입력하면 프로그램 내에서는 자체적으로 그 다음 숫자를 제대로 입력받아야 계속 진행되고 만약 숫자가 틀리거나 박수를 쳐야 하는 만큼 치지 않았거나 했을 때에도 game over를 출력하며 break문으로 탈출해야 합니다.

예1)

Enter the next number : 1

1

Enter the next number : 2

2

Enter the next number : 4

Game over!

예2)

Enter the next number : 28

28

Enter the next number : clap #29

clap

Enter the next number : clap #30

clap

Enter the next number : clap #31

clap

Enter the next number : clap #32

clap

Enter the next number : clap #33

Game over!

혹시라도 제가 설명이 부족했다면 답글로 말씀해주세요. 가급적 코드 형태로 답변해주시면 정말 감사하겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 구현해야 하는 기능을 보면 다음과 같습니다.

    1. 입력받은 숫자 또는 clap의 수가 현재 숫자에 맞는지 확인
    2. 현재 숫자에 3, 6, 9가 들어간다면 그 숫자가 입력받은 clap의 숫자와 같은지 확인

    1.의 경우 변수 하나를 선언해서 매번 입력을 받을 때마다 1씩 증가시키는 방식으로 확인할 수 있습니다.

    2.의 경우 현재 숫자의 3, 6, 9 숫자의 합을 구하는 함수를 작성하여 입력받은 clap의 수가 위에서 구한 합과 같은지를 비교하면 됩니다.

    def three_six_nine():
        i = 0
        a = ['3', '6', '9']
        while True:
                i += 1
                num = input('Enter your number: ')
                count = (lambda x: sum([x.count(n) for n in a]))(str(i))
                if count:
                        answer = 'clap' * count
                        if num == answer:
                                print(num)
                        else:
                                print('Game over!')
                                break
                else:
                        if i == int(num):
                                print(num)
                        else:
                                print('Game over!')
                                break
    

    변수 count가 특정 숫자에 3, 6, 9가 나타난 횟수를 저장합니다.

    이 변수가 0이 아닐 경우 변수의 크기만큼 반복된 'clap'이 입력받은 값과 같은지를 비교합니다.

    0일 경우 현재 숫자인 i와 입력받은 값이 같은지를 비교합니다.

    약간 복잡해 보일 수 있는데 잘 모르겠는 부분은 조금 찾아보면서 공부해 보시면 이해할 수 있으실거예요

    • 답변 정말 감사합니다. 알려주신 코드를 Pycharm을 통해 실행해 보았는데요, 실행시키자 마자 그냥 프로그램이 종료되어 버리는데, 혹시 제가 따로 무언가를 설정해야 하는 것인지요? 알 수 없는 사용자 2020.5.3 20:21
    • 위의 함수 선언 부분만 파일에 작성하고 그 파일을 실행했다면 바로 종료되는게 맞습니다. import해서 사용하시거나 https://docs.python.org/ko/3/library/__main__.html 을 참고하세요 HIAOAIH 2020.5.4 09:50
  • 필요 하는 답을 먼저 정해두고, 입력 값이 맞지 않은 경우 game over를 출력하는 형태로 가면 될 것 같습니다. 쉽게 말하면 내부적으로 369게임을 만들어 놓고 그 값만 체크하면 되지요

    # 369게임
    def three_six_nine(n): # 여기서 n이 30이면 0~29까지의 답들을 준비
        expected = []
        for i in n:
            clap_count = 0
            for char in str(i): # 숫자를 string으로 변환하고 for loop을 함.
                if char in ['3', '6', '9']:
                    clap_count += 1
            if clap_count > 0:
                expected.append("clap %d" % clap_count)
            else:
                expected.append(str(i))
        return expected
    

    369 게임이 준비 되었으니, input값이 정해진 답과 다르면 게임오버 또는 에러를 표시하면 될 것 같습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)