파이썬 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만큼 큰 숫자가 아니라 같은 숫자나 작은 숫자, 2이상 큰 숫자를 입력했을 경우
- 33,333,3333,....과 같은 3,6,9가 n개 이상 들어가는 숫자를 입력해야하는 부분에 clap을 n번 입력하지 않았을 경우
- 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 답변
-
구현해야 하는 기능을 보면 다음과 같습니다.
- 입력받은 숫자 또는 clap의 수가 현재 숫자에 맞는지 확인
- 현재 숫자에 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값이 정해진 답과 다르면 게임오버 또는 에러를 표시하면 될 것 같습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력