파이썬관련 369 게임 만들기 질문입니다.
조회수 1341회
파이썬으로 제가 먼저 숫자 1을 입력으로 시작하여 3 6 9 가 들어가는수마다 짝 으로 출력되게 하여 제 다음차례에 컴퓨터가 숫자나 짝을 출력하게끔 3 6 9 게임을 만들고 싶습니다. 또한 33, 36등은 짝짝으로 출력되게 만들고 싶습니다. 고수분들 도와주세요.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
컴퓨터는 항상 옳은 답을 입력한다는 전제 하에 작성한 C++ 기반 369 게임입니다.
의식의 흐름대로 쉽게 작성한 코드라서 비효율적일 수 있습니다.
그러나, 프로그램은 목적에 맞게 정상 작동합니다.
아래 코드를 적절히 참고하여 파이썬 문법에 맞게 바꾸시면 됩니다.
/* < 게임오버 조건 > (1) 숫자를 잘못 입력할 경우 (2) '짝'을 입력해야 하는데 숫자를 입력할 경우 (3) 숫자를 입력해야 하는데 '짝'을 입력할 경우 (4) '짝'의 입력 개수가 정답과 일치하지 않는 경우 < 입력 예외 조건 > - 숫자가 아닌 '짝'을 제외한 모든 문자 또는 문자열을 입력할 경우 (생략) */ --- /* * author: 익명 * date: 06/01/2021 (m/d/y) * purpose: QA answer */ #include <iostream> #include <vector> using namespace std; void comInput(int n); //컴퓨터 입력 값을 출력하는 함수(사용자의 입력 값에 1을 더한 값을 인자로 전달 받음) void printResult(const string &reason, int answer); //결과를 출력하는 함수(게임 종료 사유와 맞춘 횟수를 출력한다) int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int user, answer; string s_user, s_answer, s_tmp; user = answer = 1; while (true) { cout << "-------------------" << '\n'; s_answer = ""; s_tmp = to_string(answer); //정답 값을 형 변환을 통해 자릿수마다 split 하여 문자열 변수에 저장 for (char c : s_tmp) //문자열 임시 변수에 저장된 정답의 각 자릿값을 단일문자 변수 c에 반복하며 저장 { int x = c - '0'; //단일문자 c를 형 변환하여 한 자리 정수로 변환하고 정수형 변수인 x에 저장 if (x != 0 && x % 3 == 0) //x가 3의 배수라면 s_answer에 '짝'을 저장 (for-each 문으로 반복하며 누적) { s_answer += "짝"; } } if (s_answer.empty()) //s_answer가 비어있다는 것은 각각의 자릿수마다 3의 배수인 수가 하나도 존재하지 않는다는 것 (=정답은 정수형) { cout << "유저 입력: "; cin >> user; if (cin.fail()) //입력에 실패했을 경우(문자 또는 문자열을 입력했다면) 게임 종료 { printResult("잘못 입력했습니다.", answer); break; } if (user == answer) //정답인 경우, 컴퓨터 입력 함수 호출 { comInput(answer + 1); } else //오답인 경우, 오답 출력 후 게임 종료 { printResult("틀렸습니다.", answer); break; } } else //s_answer의 각 자릿수에 하나 이상의 3의 배수가 존재할 경우 (=정답은 문자 또는 문자열) { cout << "유저 입력: "; cin >> s_user; if (cin.fail()) //입력에 실패했을 경우(숫자를 입력했다면) 게임 종료 { printResult("잘못 입력했습니다.", answer); break; } if (s_user == s_answer) //정답인 경우, 컴퓨터 입력 함수 호출 { comInput(answer + 1); } else //오답인 경우, 오답 출력 후 게임 종료 { printResult("틀렸습니다.", answer); break; } } answer += 2; //사용자가 입력할 다음 문자(정수형 or 문자열)는 컴퓨터 입력을 건너 뛰므로 2를 더함 } return 0; } void comInput(int n) { //컴퓨터가 입력할 값을 출력하는 함수(유저가 입력한 정답 수의 다음 숫자를 인자로 받음) cout << "컴퓨터 입력: "; string s_tmp = to_string(n); //전달받은 인자값을 형 변환을 통해 자릿수마다 split 하여 문자열 변수에 저장 string s_answer; //'짝'을 누적할 문자열 변수 선언 for (char c : s_tmp) //split하여 저장된 수들을 하나씩 단일 문자 c에 순서대로 반복하여 저장함 { int x = c - '0'; //단일문자 c를 형 변환하여 한 자리 정수로 변환하고 정수형 변수인 x에 저장 if (x != 0 && x % 3 == 0) //x가 3의 배수라면 s_answer에 '짝'을 저장 (for-each 문으로 반복하며 누적) { s_answer += "짝"; } } if (s_answer.empty()) //s_answer가 비어있다는 것은 전달 받은 인자값에 3 or 6 or 9가 포함돼 있지 않다는 것이므로 해당 인자를 숫자로 출력 { cout << n; } else //아닌 경우, '짝'이 누적돼 있는 s_answer를 출력 { cout << s_answer; } cout << '\n'; } void printResult(const string &reason, int answer) { cout << '\n'; cout << "게임 오버 : " << reason << '\n'; cout << "맞춘 횟수: " << answer / 2 << '\n'; cout << "-------------------" << '\n'; }
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력