이 페이지는 코딩도장 데이터의 읽기 전용 정적 보관본입니다.

Bulls and Cows 게임

Bulls and Cows라는 간단한 게임을 프로그램으로 만들어보자.
<게임 규칙>
먼저 컴퓨터가 0부터 9까지의 숫자중 4개를 중복없이 배열한 문자열을 랜덤하게 생성한다.
플레이어는 생성된 문자열을 예상하여 1턴에 1번씩 입력할 수 있다.
컴퓨터는 플레이어가 입력한 문자열을 정답과 비교하여 값과 위치가 모두 맞는 숫자의 갯수를 'Bulls'
위치는 틀렸지만 값은 맞는 숫자의 갯수를 'Cows'로 카운트하여 매턴마다 
사용자의 입력에 대해 Bulls와 Cows값을 알려준다.
플레이어는 10턴 안에 정답을 맞춰야한다.

<세부 사항>
판정의 출력형식은 (Bulls값)B(Cows값)C 로 한다. ex) 답이 1234일때 0124를 입력하면 1B2C 를 출력
판정을 출력할때마다 사용자가 입력한 횟수N(=현재 턴수)을 함께 출력한다. ex>판정: 1B2C, 입력한 횟수: 2
형식에 맞지 않는 잘못된 입력(ex>2211, a1bc, 209111 등)을 한 경우는 에러 메시지를 출력하고 N은 변하지 않는다. 
단 이미 입력했던 값을 다시 입력하는것은 괜찮다.
플레이어가 정답을 맞추면, "정답입니다. 총 입력한 횟수: N"를 출력한다.
10턴이 지나도 정답을 맞추지 못하면 정답을 공개하고 Game Over 메시지를 출력한다.
플레이어가 정답을 맞추거나 Game Over가 되면, 다시 처음부터 게임을 시작할지 종료할지 물어본다.
이때 플레이어가 1을 입력하면 처음부터 게임을 다시 시작하고 0을 입력하면 게임을 종료한다(그 외의 입력에는 에러를 출력하고 다시 물어본다)

2019/06/08 18:33

왕초보

+2 이 문제는 뭔가 숫자야구랑 비슷하네요 - CT_EK, 2019/06/13 08:23
Bulls and Cows라는 게임이 숫자야구의 원조..라기보다는 영어권에서 불리는 이름인걸로 알고 있습니다. - 왕초보, 2019/06/14 13:14

32개의 풀이가 있습니다.

import random
import itertools

def bullcow(a,b):
    bull=0
    cow=0
    for i in a:
        if i in b:
            if a.index(i)==b.index(i):
                bull+=1
            else:
                cow+=1
    return bull,cow

answerlist=[''.join(x) for x in list(itertools.permutations('0123456789',4))]
while True:
    trial=0
    answer=random.choice(answerlist)
    while True:
        user=input("입력하세요: ")
        if user not in answerlist:
            print("잘못된 입력입니다. 입력한 횟수: {}".format(trial))
        else:
            trial+=1
            if user==answer:
                print("정답입니다. 총 입력한 횟수: {}".format(trial))
                break
            elif trial>9:
                print("Game over. 정답은 {} 입니다.".format(answer))
                break
            else:
                (b,c)=bullcow(user,answer)
                print("판정: {}B{}C, 입력한횟수: {}".format(b,c,trial))
        print()
    while True:
        print()
        again=input("게임을 다시 시작할까요?\n1. 예\n0. 아니요\n:")
        if again not in ['0','1']:
            print("잘못된 입력입니다.")
            continue
        else:
            again=int(again)
            break
    if again:
        print("새로운 게임")
        print()
        continue
    else:
        break


2019/06/10 11:00

ykleeac

Python 3.7

import random


def gen_game():
    rst = set()
    while len(rst) < 4:
        rst.add(random.randint(0, 9))
    return "".join(str(i) for i in rst)


def chk_gss(gss: str):
    if len(set(gss)) != 4 or len(gss) != 4:
        print("잘못된 입력입니다. 다시 입력하세요.")
        return False
    else:
        return True


def get_result(ans: str, gss: str):
    rst = False
    score = ["B" if gss[i] == ans[i]
             else "C" if gss[i] in ans else "N" for i in range(4)]
    stat = f"{score.count('B')}B{score.count('C')}C"
    if score.count('B') == len(ans):
        rst = True
    return rst, stat


def main():
    while True:
        print("\nBulls and Cows 게임을 시작합니다.")
        ans = gen_game()
        tries, endmsg = 1, f"Game Over. 정답: {ans}"
        while tries < 11:
            gss = input("맞춰보세요(4자리 숫자): ")
            if not chk_gss(gss):
                continue
            result, stat = get_result(ans, gss)
            if result == True:
                endmsg = f"정답입니다. 총 입력한 횟수: {tries}"
                break
            else:
                print(f"결과는 {stat}입니다. 총 입력한 횟수: {tries}")
            tries += 1
        print(endmsg)

        while True:
            retry = input("다시 시작할까요([0] 아니오, [1] 예)? ")
            if retry == "0":
                exit()
            elif retry == "1":
                break
            else:
                print("잘못된 입력입니다.")
                continue


if __name__ == "__main__":
    main()

2019/06/12 10:34

mohenjo

import random
def bullsAndCows():
    value = ''
    while True:
        if len(value) == 4:
            break
        ck = str(random.randint(0, 9))
        if ck not in value:
            value+=ck

    turn = 1
    while True:
        if turn == 11:
            print('입력횟수가 초과됐습니다. Game Over','정답: ',value)
            break

        exValue=ckinput()
        if value == exValue:
            print(exValue, '정답입니다.', '턴수:', turn)
            break

        b = 0
        c = 0
        for s in range(len(exValue)):
            if exValue[s] == value[s]:
                b+=1
            elif exValue[s] in value:
                c+=1
        print('판정:{}B{}C  턴수:{}\n'.format(b,c,turn))
        turn+=1

    ckg = ckend()
    if ckg == '0':
        print('게임을 종료합니다.')
    elif ckg == '1':
        print('게임을 시작합니다.')
        bullsAndCows()
    return

def ckend():
    while True:
        ckg = input('게임종료(0), 시작(1): ')
        if ckg == '0':
            break
        elif ckg == '1':
            break
        else:
            print('잘못된형식입니다.')
    return ckg

def ckinput():
    while True:
        cw = 0
        exValue = input('예상 4자리숫자입력: ')
        if len(exValue) == 4:
            for i in exValue:
                cw+=exValue.count(i)
        else:
            print('형식에 맞지 않습니다.')
            continue

        if cw > 4:
            print('형식에 맞지 않습니다.')
        else:
            break
    return exValue




bullsAndCows()

2019/06/14 12:58

sk ckekfo

import random as rd

def BCgame(P, C):
    for i in range(len(P)):
        if P[i] == C[i]: P[i] = 'B'
        elif P[i] in C: P[i] = 'C'
        else: P[i] = str(P[i])

    return ''.join(P)

def run():
    C = rd.sample(list(range(0, 10)), 4)

    for i in range(10):
        G = BCgame([x for x in list(map(int, input('>>>').split(',')))], C)
        if G == 'BBBB': print(G); break
        else: print(G, i+1)

2019/06/14 16:15

이진형

package Study;

import java.util.Scanner;

public class BullsandCows {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] my_num = new int[4];
        int[] com_num = new int[4];
        int bulls = 0, cows = 0, count = 0;
        boolean check = false;
        while (true) {
            count = 0;
            while (true) {
                check = false;
                for (int i = 0; i < 4; i++) {
                    com_num[i] = (int) (Math.random() * 10);
                }
                for (int i = 0; i < 3; i++) {
                    for (int j = i + 1; j < 4; j++) {
                        if (com_num[i] == com_num[j])
                            check = true;
                    }
                }
                if (!(check)) {
                    break;
                }
            }
            while (true) {
                bulls = 0;
                cows = 0;
                count++;
                While:
                while (true) {
                    check = false;
                    System.out.println("숫자를 입력 하세요 ex)1234");
                    String num = sc.next();
                    for (int i = 0; i < 4; i++) {
                        my_num[i] = num.charAt(i) - 48;
                        if (my_num[i] < 0 || my_num[i] > 9||num.length()!=4) {
                            continue While;
                        }
                    }
                    for (int i = 0; i < 3; i++) {
                        for (int j = i + 1; j < 4; j++) {
                            if (my_num[i] == my_num[j])
                                check = true;
                        }
                    }
                    if (!check) {
                        break;
                    }

                }
                for (int i = 0; i < 4; i++) {
                    if (com_num[i] == my_num[i])
                        bulls++;
                }
                for (int i = 0; i < 4; i++) {
                    for (int j = 0; j < 4; j++) {
                        if (com_num[i] == my_num[j] && com_num[i] != my_num[i]) {
                            cows++;
                        }
                    }
                }
                if (bulls == 4) {
                    System.out.println("정답입니다 총 입력한 횟수 : " + count);
                    System.out.println("게임을 다시하시겠습니까 yes(1) no(0)");
                    int choice = sc.nextInt();
                    if (choice == 1) {
                        break;
                    } else
                        System.exit(0);
                } else {
                    System.out.println("판정 : " + bulls + "B" + cows + "C 입력한 횟수 : " + count);
                }
            }
        }
    }
}

2019/06/20 11:25

용 빈

import random

def bullsAndCows():
    value = ''
    while True:
        if len(value) == 4:
            break
        ck = str(random.randint(1, 9))
        if ck not in value:
            value+=ck

    n=0
    while True:
        bulls = 0
        cows = 0
        num=input("숫자를 입력:")
        n += 1
        if len(num) != 4 or num.isdigit() is False:
            print("error")
            n = n - 1
        else:
            if num==value:
                print("정답입니다. 총 입력한 횟수:%d"%n)
                bb=1
                break
            for i in range(4):
                if num[i] == value[i]:
                    bulls += 1
            for j in range(4):
                for k in range(4):
                    if num[j]==value[k]:
                        cows+=1
                        if num[j]==value[j]:
                            cows-=1

            print("%dB %dC 입력한 횟수 %d"%(bulls,cows,n))
        if n==10:
            print("기회를 다 사용했습니다")
            print(value)
            bb=1
            break


def main():
    bullsAndCows()
    while True:
        con=input("계속 하시겠습니까?:0/1")
        if con =='1':
            bullsAndCows()
        elif con=='0':
            break
        else:
            print("error")
main()

2019/07/02 15:32

문기훈

C#

using System;
using System.Text.RegularExpressions;

namespace Bulls_and_Cows
{
    class Program
    {
        static void Main(string[] args)
        {
            Random random = new Random();
            int[] number = new int[4];

            bool challengeTry = true;

            while(challengeTry)
            {
                int index = 0;

                while(index < 4)
                {
                    number[index] = random.Next(0, 10);

                    bool hasDuplicate = false;

                    for (int i = 0; i < index; i++)
                    {
                        if (number[index] == number[i])
                        {
                            hasDuplicate = true;
                            break;
                        }
                    }

                    if(!hasDuplicate)
                    {
                        index++;
                    }
                }

                int challengeTime = 0;

                Console.WriteLine("4자리 숫자를 입력해 주세요.");

                while (challengeTime < 10)
                {
                    string userInput = Console.ReadLine();
                    string userInput_r = Regex.Replace(userInput, @"\D", "");

                    int[] userNumber = new int[4];

                    bool isRightInput = true;

                    if (userInput.Length == userInput_r.Length && userInput_r.Length == 4)
                    {
                        int userInput_i = int.Parse(userInput_r);
                        int x = 1000;

                        for (int i = 0; i < 4; i++)
                        {
                            userNumber[i] = userInput_i / x;
                            userInput_i = userInput_i - userNumber[i] * x;
                            x = x / 10;

                            bool hasDuplicate = false;

                            for (int j = 0; j < i; j++)
                            {
                                if (userNumber[i] == userNumber[j])
                                {
                                    hasDuplicate = true;
                                    break;
                                }
                            }

                            if (hasDuplicate)
                            {
                                isRightInput = false;
                                break;
                            }
                        }
                    }

                    else
                    {
                        isRightInput = false;
                    }

                    if (!isRightInput)
                    {
                        Console.WriteLine("잘못된 값입니다. 다시 입력해 주세요.");
                        continue;
                    }

                    challengeTime++;

                    int bullsCount = 0;
                    int cowsCount = 0;

                    for (int i = 0; i < 4; i++)
                    {
                        for (int j = 0; j < 4; j++)
                        {
                            if (number[i] == userNumber[j])
                            {
                                if (i == j)
                                {
                                    bullsCount++;
                                }
                                else
                                {
                                    cowsCount++;
                                }
                            }
                        }
                    }
                    if (bullsCount == 4)
                    {
                        Console.WriteLine("정답입니다. 총 입력한 횟수: {0}", challengeTime);
                        challengeTry = false;
                        break;
                    }
                    else
                    {
                        Console.WriteLine("판정: {0}B {1}C, 입력한 횟수 : {2}", bullsCount, cowsCount, challengeTime);
                    }
                }

                if (challengeTime > 10)
                {
                    Console.WriteLine("Game Over");
                    Console.WriteLine("정답 : {0}{1}{2}{3}", number[0], number[1], number[2], number[3]);
                }


                Console.WriteLine("재도전 : 1 종료 : 0");

                while (true)
                {
                    int lastAnswer = int.Parse(Console.ReadLine());

                    if (lastAnswer == 0)
                    {
                        challengeTry = false;
                        break;
                    }
                    else if (lastAnswer == 1)
                    {
                        challengeTime = 0;
                        break;
                    }
                    else
                    {
                        Console.WriteLine("잘못 누르셨습니다. 다시 시도해 주세요.");
                    }
                }
            }
        }
    }
}

2019/07/05 00:29

원종서

from random import *

while True:
    a=str(randint(0,9))
    con=0
    arr=[]
    for k in range(4):
        while a in arr:
            a=str(randint(0,9))
        arr.append(a)
    print(arr)
    cnt=0
    while cnt<10:
        B=0
        C=0

        input_=list(input('답: '))
        while len(input_)!=4:
            input_=list(input('4자리로 입력하세요. \n다시입력: '))

        for j in range(4):
            if input_[j] == arr[j]:
                B+=1
            elif input_[j] in arr:
                C+=1
        print('%dB%dC'%(B,C))
        if B==4:
            print('정답입니다. 총 입력한 횟수: %d'%(cnt+1))
            con=input('1:처음부터, 0:종료')
            break

        if cnt==9:
            print('Game Over.')
            print('정답:',arr)
            con=input('1:처음부터, 0:종료')
            break
        cnt+=1
    if con==0:
        break
    if con==1:
        continue

2019/07/08 21:47

정환용

from random import sample


def bulls_n_cows(hidden, inp):
    return '{}B{}C'.format(
        sum(map(lambda x: x[0] == x[1], zip(hidden, inp))),
        sum(map(lambda x: x[0] != x[1] and x[1] in hidden, zip(hidden, inp)))
    )


def ask_until(is_valid, msg=''):
    ans = None
    while not ans or not is_valid(ans):
        ans = input(msg)

    return ans


def game():
    def valid_input(x):
        return len(x) is 4 and len(set(x)) == len(x) and all(map(lambda y: y.isdigit(), x))

    hidden = ''.join(sample('0123456789', 4))
    for n in range(1, 11):
        ans = ask_until(valid_input, '{} th input = '.format(n))
        res = bulls_n_cows(hidden, ans)

        print(n, 'th result:', res)
        if res[0] == '4':
            print('succeeded:', n, 'tries')
            return

    print('game over. answer = ', hidden)


coin = 1
while coin:
    game()
    coin = int(ask_until(lambda x: x in ['1', '0'], 'again (1/0)? '))

2019/07/24 17:17

Noname

from random import randint
while(1):
    string = ''
    done = False
    t = str(randint(1, 9))
    for i in range (0, 4, 1):
        while(t in string):
            t = str(randint(1, 9))
        string = string + t
        t = str(randint(1, 9))
    while(done == False):
        for turn in range (0, 10, 1):
            bullNum = 0
            cowNum = 0
            guess = str(input("Your guess: "))
            while(len(guess) != 4):
                guess = str(input("Your guess (Four digit integer): "))
            for j in range (0, 4, 1):
                if(guess[j] == string[j]):
                    bullNum += 1
                elif(guess[j] in string):
                    cowNum += 1
            result = "B" + str(bullNum) + "C" + str(cowNum)
            print(str(turn+1) + "th guess = " + guess + ", result = " + result)
            if (bullNum == 4):
                done = True
                break
            else:
                continue
        break
    if(done == True):
        print("Congratulations! You win! Enter 0 to quit and 1 to play agian")
    else:
        print("The answer was: " + string)
        print("Game over! Enter 0 to quit and 1 to play agian")
    play = int(input("Your Choice: "))
    while(play != 0 and play != 1):
        play = int(input("Please enter a valid option: "))
    if(play == 1):
        continue
    else:
        break

2019/07/31 01:59

Hyeonseong Lim

namespace codingdojang__
{
    class Program
    {
        static List<int> ran_list = new List<int> { };
        static List<int> input_list = new List<int> { };
        static int bulls = 0;
        static int cows = 0;
        static bool right = false;

        static void Main(string[] args)
        {
            Collection();
        }
        static void Random_list()
        {
            List<int> list = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            Random ran = new Random();

            for (int i = 0; i < 4; i++)
            {
                ran_list.Add(list[ran.Next(0, list.Count)]);
                list.Remove(ran_list[i]);
            }
        }
        static void User_input()
        {
            string input;
            bool temp = false;
            while (temp == false)
            {
                temp = true;
                input_list.Clear();
                input = Console.ReadLine();
                if (input.ToString().Length == 4)
                {
                    for (int i = 0; i < 4; i++)
                    {
                        if ((int)input[i] > 64)
                        {
                            Console.WriteLine("다시 입력하세요.");
                            temp = false;
                            break;
                        }
                        input_list.Add(int.Parse(input[i].ToString()));
                    }
                    for (int x = 0; x <= input_list.Count; x++)
                    {
                        for (int y = x + 1; y < input_list.Count; y++)
                        {
                            if (input_list[x] == input_list[y])
                            {
                                Console.WriteLine("다시 입력하세요.");
                                temp = false;
                            }
                        }
                    }
                }
                else 
                {
                    Console.WriteLine("다시 입력하세요.");
                    temp = false;
                }
            }
        }
        static void Bulls_and_cows()
        {
            for (int a = 0; a < 4; a++)
            {
                for (int b = 0; b < 4; b++)
                {
                    if (a == b && ran_list[b] == input_list[a])
                    {
                        bulls++;
                    }
                    else if (ran_list[b] == input_list[a])
                    {
                        cows++;
                    }
                }
            }
            if(bulls == 4)
            {
                right = true;
            }
        }
        static void Collection()
        {
            Random_list();
            foreach (var i in ran_list)
            {
                Console.Write(i);
            }
            Console.WriteLine();
            for (int i = 1; i <= 11; i++)
            {
                if (right == true)
                {
                    Console.WriteLine("정답입니다. 총 입력한 횟수 : {0}", i - 1);
                    break;
                }
                if (i == 10 && right == false)
                {
                    Console.Write("Game Over\n 정답 : ");
                    foreach (var e in ran_list)
                    {
                        Console.Write(e);
                    }
                    Console.WriteLine();
                }
                else
                {
                    User_input();
                    Bulls_and_cows();
                    Console.WriteLine("판정 : {0}B{1}C, 입력한 횟수 : {2}", bulls, cows, i);
                    bulls = cows = 0;
                }
            }
        }
    }
}

2019/08/13 11:31

bat

package main

import (
    "bufio"
    "fmt"
    "math/rand"
    "os"
    "time"
)

type GuessNumber struct {
    nums      [4]uint8
    guessNums [4]uint8
    turn      uint
}

func newGuessNumber() GuessNumber {
    res := GuessNumber{}
    res.init()
    return res
}

func (obj *GuessNumber) init() {
    box := [10]uint8{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    for i := 0; i < 4; i++ {
        rand.Seed(time.Now().UTC().UnixNano())
        id := rand.Intn(10 - i)
        obj.nums[i] = box[id]
        box[id], box[9-i] = box[9-i], box[id]
    }
    obj.turn = 0
}
func (obj *GuessNumber) guess() {
    obj.turn++
    stdin := bufio.NewReader(os.Stdin)
    bf := [4]byte{}
    for {
        fmt.Print("4개의 수를 입력하세요(예: 1234)\n  >>> ")
        n, _ := stdin.Read(bf[:])
        stdin.Discard(stdin.Buffered())
        if n == 4 && validateGuess(bf[:]) {
            break
        }
        fmt.Println("#잘못된 입력입니다")
    }
    for i := 0; i < 4; i++ {
        obj.guessNums[i] = bf[i] - '0'
    }
}
func (obj *GuessNumber) play() (b int, c int) {
    for i, vm := range obj.guessNums {
        for j, vo := range obj.nums {
            if vm == vo {
                if i == j {
                    b++
                } else {
                    c++
                }
                break
            }
        }
    }
    return
}

func validateGuess(bf []byte) bool {
    for i := 0; i < 4; i++ {
        if bf[i] < '0' && bf[i] > '9' {
            return false
        }
        for j := i + 1; j < 4; j++ {
            if bf[i] == bf[j] {
                return false
            }
        }
    }
    return true
}

func (obj *GuessNumber) retry() bool {
    fmt.Println("\n새로운 게임을 시작하시겠습니까? (Y/N): ")
    var s string
    fmt.Scanln(&s)
    if s == "N" {
        return false
    } else {
        fmt.Println("새로운 게임을 시작합니다\n\n\t BULLS & COWS\n")
        obj.init()
        return true
    }
}

func main() {
    game := newGuessNumber()

    fmt.Println("\tBULLS & COWS\n")
    for {
        fmt.Println(game.turn+1, "번째 추측")
        game.guess()
        b, c := game.play()
        fmt.Println(b, "bulls,", c, "cows\n")
        if b == 4 {
            fmt.Println("정답입니다. 총 입력한 횟수:", game.turn)
            if !game.retry() {
                break
            }
        } else if game.turn == 10 {
            fmt.Println("Game Over")
            if !game.retry() {
                break
            }
        }
    }
}

2019/09/04 16:16

Creator

using System;
using System.Collections;


namespace CodingTest01
{
    class Program
    {        
        static ArrayList Computer = new ArrayList();
        static ArrayList Player = new ArrayList();
        static string InputNumber = null;
        static string GetAnswer = null;


        static void RandomNumberMethod()
        {
            Random r = new Random();
            int Temp = 0;
            Computer.Clear();

            for (int i = 0; i <=3; i++)
            {
                do
                {
                    Temp = r.Next(0,9);
                }while (Computer.Contains(Temp));

                Computer.Add(Temp);
            }
        }

        static void InputNumberMethod()
        {
            Player.Clear();

            string Temp = null;

            Console.Write("Input Number : ");
            InputNumber = Console.ReadLine();

            for (int i = 0; i <= 3; i++)
            {
                Player.Add(InputNumber.Substring(i,1));
            }
        }

        static bool Checked()
        {
            int Bulls = 0;
            int Cows = 0;

            string Question = null;
            string Answer = null;

            for (int i = 0; i < Computer.Count; i++)
            {
                Answer += Computer[i].ToString();
            }

            GetAnswer = Answer;

            for (int i = 0; i < Player.Count; i++)
            {
                Question += Player[i].ToString();
            }

            if (Question == Answer)
            {
                return true;
            }

                for (int i = 0; i < Computer.Count; i++)
                {
                    string ComputerTemp = Computer[i].ToString();                  
                    string PlayerTemp = Player[i].ToString();

                    if (ComputerTemp.Equals(PlayerTemp))
                    {
                        Bulls++;
                    }

                    else
                    {
                        for (int j = 0; j < Computer.Count; j++)
                        {
                            string PlayerTemp2 = Player[j].ToString();

                            if (ComputerTemp.Equals(PlayerTemp2))
                            {
                                Cows++;
                            }
                        }
                    }
                }

            Console.WriteLine("{0}B, {1}C", Bulls, Cows);
            return false;
        }

        static void Main(string[] args)
        {
            /* 값과 위치가 모두 같은 숫자 : Bulls
               위치는 틀렸지만 값은 맞는 숫자 : Cows */

            int Count = 0;
            bool CallRandomNumber = false;

            RandomNumberMethod();

            while (true)
            {
                try
                {
                    InputNumberMethod();

                    if (InputNumber.Length > 4)
                    {
                        Console.WriteLine("Please re-enter.");
                        continue;
                    }

                }

                catch(Exception err)
                {
                    Console.WriteLine("Please re-enter.");
                    continue;
                }


                if (Checked() == true)
                {
                    Console.WriteLine("정답입니다. 총 입력한 횟수: {0}", Count);
                    break;
                }

                else
                {
                    Count++;
                    Console.WriteLine("Turn : {0}", Count);

                    if(Count == 10)
                    {

                        bool ReplayBreak = false;

                        while (true)
                        {
                            Console.WriteLine("Answer : {0}", GetAnswer);
                            Console.WriteLine("-- GAME OVER --");
                            Console.WriteLine("Retry : 1 / End : 0");

                            int ReplayNumber = int.Parse(Console.ReadLine());

                            if (ReplayNumber == 0)
                            {
                                ReplayBreak = true;
                                break;
                            }

                            else if (ReplayNumber == 1)
                            {
                                Count = 0;
                                CallRandomNumber = true;
                                break;
                            }

                            else
                            {
                               Console.WriteLine();
                               Console.WriteLine("0 또는 1을 선택해주세요.");
                               continue;
                            }
                        }

                        if (ReplayBreak == true)
                        {
                            break;
                        }

                    }
                }

                if (CallRandomNumber == true)
                {
                    CallRandomNumber = false;
                    RandomNumberMethod();
                }
            }
        }
    }
}

2019/09/10 09:30

김저승

import random

#답 생성
while(True):
        ans = str(random.randrange(10000))
        ans_chk = 0
        #맨 앞자리가 0일경우
        if int(ans) < 1000:
            ans = '0' + ans
        #다른 자리 중복 체크
        for i in range(4):
            for j in range(i+1,4):
                if ans[i] == ans[j]:
                    ans_chk = 1
        if ans_chk == 0:
            break

#답 횟수 카운트
count = 0

while(True):
    print('----------------------------------------')
    me_ans = input('자릿수가 각각 다른 수 네자리를 입력해주세요\n')
    count += 1
    b = 0
    c = 0
    for i in range(4):
        # 자리와 수가 같으면 b + 1
        if me_ans[i] == ans[i]:
            b += 1

        # 숫자만 같으면 c + 1
        for j in range(4):
            if i == j:
                continue
            if me_ans[i] == ans[j]:
                c += 1
    print(b, 'B', c, 'C')

    # 4B면 break
    if b == 4:
        print('정답! #', count)
        break



2019/10/14 16:10

후눈

public class BoolsAndCows extends Game{

private int answer_num[]=new int[4];

@Override
protected void init() {

    Random ran=new Random();

    while(true) {
        boolean numCheck = false;
        for(int i=0;i<4;i++)
            answer_num[i]=ran.nextInt(10);

        for(int i=0;i<3;i++) {
            for(int j=i+1;j<4;j++) {

                if(answer_num[i]==answer_num[j]) {
                    numCheck=true;
                }
            }
            if(numCheck)
                break;
        }
        if(!numCheck)
            break;

    }

}

@Override
public void gameStart() {

    init();

    String inputStr;
    int inputInteger;
    int inputs[]=new int[4];
    int count=0;
    int bulls=0;
    int cows=0;
    boolean isAnswer=false;
    Scanner scan=new Scanner(System.in);
    while(count<10) {

        count++;
        System.out.print("입력 : ");
        inputStr=scan.next();

        if(!isNumeric(inputStr)) {
            count--;
            System.out.println("잘못된 데이터");
            continue;
        }
        inputInteger=Integer.parseInt(inputStr);
        inputs[0]=inputInteger/1000;
        inputs[1]=(inputInteger%1000)/100;
        inputs[2]=(inputInteger%100)/10;
        inputs[3]=(inputInteger%10);

        for(int i=0;i<4;i++) {
            for(int j=0;j<4;j++) {
                if(inputs[i]==answer_num[j]) {
                    if(i==j)
                        bulls++;
                    else
                        cows++;
                }
            }
        }
        if(bulls==4) {
            isAnswer=true;
            break;
        }
        System.out.println(bulls+"B"+cows+"C"); 
        System.out.println();
        bulls=0;
        cows=0;
    }

    if(isAnswer) {
        System.out.println("정답입니다. 총 입력횟수 : "+count);
    }else {
        printAnswer();
    }

}

private boolean isNumeric(String str) {
     try {
          Double.parseDouble(str);
          return true;
      } catch(NumberFormatException e) {
          return false;
      }
}

private void printAnswer() {
    System.out.print("정답 : ");
    for(Integer i:answer_num)
        System.out.print(i);
    System.out.println();
}

}

2019/10/18 12:06

채희범

## Bulls and Cows Game (Baseball game)

while True:

    # 컴퓨터가 0~9까지의 숫자중 중복없이 배열한 문자열을 랜덤하게 생성하여 정답을 A에 저장
    random_answer = [int(x) for x in range(0,10)]
    A = []
    import random
    for i in range(0,4):
        K = random.choice(random_answer)
        A.append(K)
        random_answer.remove(K)
    del K, random_answer

    # 최대 10회 게임        
    N = 0 # 시행 횟수
    for i in range(0,10):

        # 사용자 입력 오류 메시지 출력
        while True:

            # player's choice를 D에 저장
            player_input = input("4자리 숫자를 입력하세요. :", )
            not_int = False

            if len(set(player_input)) != 4:
                print("중복되지 않는 4자리 숫자만 입력 가능합니다. 다시 입력하세요.")
                continue

            else:
                for i in player_input:
                    if i not in '0123456789':
                        print("중복되지 않는 4자리 숫자만 입력 가능합니다. 다시 입력하세요.")
                        not_int = True
                        break

            if not_int == True:
                continue
            else:
                break


        D = []
        for i in player_input:
            D.append(int(i))           

        # 입력값에 문제가 없었으므로, 시행 횟수를 1 증가
        N += 1

        b = 0 # bulls
        c = 0 # cows

        # A(정답) 와 D(사용자 입력)을 비교
        # 정답인 경우
        if A == D:
            print()
            print("**************************Win!!!**************************")
            print("               %d%d%d%d 정답입니다. 총 입력한 횟수:%d" %(A[0],A[1],A[2],A[3],N))
            print()
            break

        # 오답인 경우
        else:



            # 같은 숫자가 몇 개인지 확인하여 b에 저장한다.
            for i in range(0,4):
                for j in range(0,4):
                    if A[i] == D[j]:
                        b += 1

            # 메인 비교 알고리즘. index를 비교하여 같은 자리에 같은 숫자가 있다면 b에서 1을 빼고 c에서 1을 더해준다.
            for i in range(0,4):
                if A[i] == D[i]:
                    b -= 1
                    c += 1
            if c == 0:
                print("판정 : %dB, 입력한 횟수: %d" %(b,N))
                print()
            else:
                print("판정 : %dB%dC, 입력한 횟수: %d" %(b,c,N))
                print()

            # 10턴이 모두 끝난 경우 게임 오버 선언.
            if N == 10:
                print()
                print("**************************Game Over!!!**************************")
                print("                      정답은 %d%d%d%d 입니다." %(A[0],A[1],A[2],A[3]))
                print()




    # 게임을 다시 실행할 지 결정
    while True:
        regame = input("다시 게임을 시작하겠습니까? (다시 시작: 1, 게임 종료: 2)",)
        if regame not in '1,2':
            print("1 혹은 2를 입력하지 않았습니다. 입력 오류.")
            continue
        else:
            break

    # 게임을 다시 시작할 지 작동
    if regame == '1':
        continue
    else:
        break


print("*******게임을 종료합니다.*******")

2019/12/20 03:42

D.W. Choi

public class BullsAndCows {

    public static void main(String[] args) {
        Random random = new Random(); 
        String[] nums = new String[4];
        for(int i=0; i<4; i++) { //중복제외 변수 생성
            int n = random.nextInt(10);
            nums[i] = Integer.toString(n);
            for(int j=0; j<i; j++) {
                if(nums[i].equals(nums[j])) {
                    i--;
                }
            }
        }
        Scanner scan = new Scanner(System.in);
        int N = 1;
        loop:
        for(int i=0;;i++) {
            int B = 0;
            int C = 0;
            int count = 0; //위치랑 값이 같을경우 ++ 마지막에 count==4이면 종료
            String[] input = scan.nextLine().split("");
            if(input.length!=4) { //입력값이 4자리가 아니면 다시입력
                System.out.println("숫자 4개를 입력하세요");
                continue loop;
            }
            else {
                for(int j=0; j<4; j++) { //입력값이 4자리, 문자가 있을 경우 다시 입력
                    if(Integer.parseInt(input[j])<48&&Integer.parseInt(input[j])>57) {
                        System.out.println("다시 입력하세요");
                        continue loop;
                    }
                    for(int k=0; k<j; k++) {//입력값4자리, 같은 숫자가 있을 경우 다시 입력
                        if(input[j].equals(input[k])) {
                            System.out.println("다시 입력하세요");
                            continue loop;
                        }
                    }
                }
                for(int s=0; s<4; s++) { //값이랑 위치가 같을 경우 B++;
                    if(nums[s].equals(input[s])) {
                        B++;
                        count++;
                    }
                    else { //위치는 다르지만 값이 있을 경우 C++
                        for(int l=0; l<4; l++) {
                            if(nums[s].equals(input[l])) {
                                C++;
                            }
                        }
                    }
                }
                if(count==4) { //입력값이 모두 같은 경우 종료
                    System.out.println("정답입니다. 총 입력한 횟수 : "+N);
                    System.out.println("다시?");
                    if(scan.nextLine().equals("1")) {
                        N=0;  //다시 시작할 경우 횟 수 0
                        for(int h=0; h<4; h++) { //다시 중복제외 변수 생성
                            int n = random.nextInt(10);
                            nums[h] = Integer.toString(n);
                            for(int a=0; a<h; a++) {
                                if(nums[h].equals(nums[a])) {
                                    h--;
                                }
                            }
                        }
                        continue loop;
                    }
                    else {
                        System.exit(0);
                    }
                }
                System.out.println("B" + B + "C" + C + ", 입력한 횟 수 : " + N);
                N++;
                if(N>10) { //N의 값이 10보다 크면 종료
                    System.out.println("Game Over");
                    System.out.println("다시?");
                    if(scan.nextLine().equals("1")) {
                        N = 0;
                        for(int h=0; h<4; h++) { //중복제외 변수 생성
                            int n = random.nextInt(10);
                            nums[h] = Integer.toString(n);
                            for(int a=0; a<h; a++) {
                                if(nums[h].equals(nums[a])) {
                                    h--;
                                }
                            }
                        }
                        continue loop;
                    }
                    else {
                        System.exit(0);
                    }
                }
            }
        }
    }
}

2019/12/29 19:34

big Ko

import random

while True:
    elst=[]
    while len(elst)<4:
        n=random.randint(0,9)
        if n not in elst:
            elst.append(n)
    nlst=list(map(str,elst))
    cpunum="".join(nlst)

    T=1
    while True:
        B,C=0,0
        if T>10:
            print("***Game Over***","정답:",cpunum)
            break
        usernum=input("0~9까지의 숫자를 4개 입력하십시오: ")
        if len(usernum)!=4 or usernum.isdigit() is False:
            print("***잘못된 입력입니다***","//","입력한 횟수:",T-1)
            continue
        if usernum==cpunum:
            print("***축하합니다! 정답입니다***","//","입력한 횟수:",T)
            break
        for n in range(len(cpunum)):
            if cpunum[n]==usernum[n]:
                B+=1
                continue
            elif cpunum[n] in usernum:
                C+=1
        print("판정:",str(B)+"B"+str(C)+"C","//","입력한 횟수:",T)
        T+=1

    while True:
        ask=input("다시 시작하려면 1을, 게임을 종료하려면 0을 입력하십시오: ")
        if ask=="1" or ask=="0":
            break
        else:
            print("잘못된 입력입니다.")
            continue
    if ask=="1":
        print("***새로운 게임을 시작합니다***")
        T=1
        continue
    elif ask=="0":
        print("게임을 종료합니다")
        break

2020/01/14 18:39

박시원

import random

a=random.sample(range(0,10),4)
randomString=""
for i in a:
    randomString=randomString+str(i)
print(randomString)
b=0
start=1
while start:
    for i in range(1,11,1):
         player=input("예상되는 숫자를 입력:")
         set1=set(randomString)
         set2=set(player)
         num=set1 & set2
         c=len(num)
         for j in range(4):
             if randomString[j]==player[j]:
                b+=1
                c=c-1
         print(b,"B",c,"C")
         b=c=0
         if randomString==player:
            print("정답입니다!!")
            print("총 입력한 횟수: %s" %i)
            break
         if i==10:
            print("Game Over 정답은 %s 였습니다" %randomString)
    print("다시 게임시작하실겁니까? 1번: 시작  0번: 종료")
    start=int(input("번호입력:"))

2020/01/16 18:36

박재욱

파이썬입니다.

코드 검사하면서 게임도 재밌게 했습니다.

import random as r


def rand_x():
    n = '{:04d}'.format(r.randint(0, 9999))
    if len(n) != len(set(n)):
        rand_x()
    return n


x = rand_x()
N = 1
while True:
    line = input('\n서로 다른 한 자리 수 (0~9) 네 개 입력:')
    if not (len(line) == 4 and len(set(line)) == 4 and (set(line) & set(map(str, range(10))) == set(line))):
        print('\n잘못된 입력입니다. 서로 다른 한 자리 수 (0~9) 네 개를 공백 없이 입력해 주세요.')
        continue
    B = int((line[0] == x[0]) + (line[1] == x[1]) + (line[2] == x[2]) + (line[3] == x[3]))
    C = len(set(x) & set(line)) - B
    if B == 4:
        print('\n정답입니다. 총 입력한 횟수: {}'.format(N))
        print('\n처음부터 다시 시작하시겠습니까? Yes: 1을 입력, No: 0을 입력')
        while True:
            re = input()
            if re != '0' and re != '1':
                print('\n재시작 여부는 0 또는 1을 입력해서 정할 수 있습니다. Yes: 1을 입력, No: 0을 입력')
                continue
            break
        if re == '1':
            print('\n처음부터 게임을 다시 시작합니다.')
            N = 1
            x = rand_x()
            continue
        else:
            print('\n게임을 종료합니다.')
            break
    print('\n판정 : {}B{}C, 입력한 횟수: {}'.format(B, C, N))
    if N == 10:
        print('\nGame Over')
        print('\n정답은 {}였습니다'.format(x))
        print('\n처음부터 다시 시작하시겠습니까? Yes: 1을 입력, No: 0을 입력')
        while True:
            re = input()
            if re != '0' and re != '1':
                print('\n재시작 여부는 0 또는 1을 입력해서 정할 수 있습니다. Yes: 1을 입력, No: 0을 입력')
                continue
            break
        if re == '1':
            print('처음부터 게임을 다시 시작합니다.\n')
            N = 1
            x = rand_x()
            continue
        else:
            print('\n게임을 종료합니다.')
            break
    N += 1

2020/01/26 23:35

우재용

A=1
while A==1:
    A='k'
    N=0
    import random
    #문자열을 랜덤하게 생성한다
    num=[]
    Num=[0,1,2,3,4,5,6,7,8,9]
    for i in range(4):
        num.append(str(random.choice(Num)))
        Num.remove(int(num[-1]))

    while N<10:
        N+=1
        n=N
        ans=list(input("trial %d: " %N))
        B=0
        C=0
        for h in range(0,4):
            if ans.count(ans[h])>1:
                print("Error.Retry")
                N-=1
                break    
        for i in range(0,4):
            if ans[i]==num[i]:B+=1
        if B==4:
            print("정답입니다. 총 입력한 횟수: %d"%N)
            break
        for j in range(0,4):
            if ans[j] in num:
                C+=1
        if n==N:print("판정: %dB%dC\t입력한 숫자:"%(B,C-B)+''.join(ans)+"\t입력한 횟수:%d"%N)
    if B!=4:
        print("The answer is "+''.join(num)+"\nGame Over")
    while A!='0' and A!='1':
        A=input("Do you want to restart the game? (restart:1, exit:0)\n :")
        if A!='0' and A!='1': print("Error")

2020/02/25 22:08

eun030611

import random

def bsc(answer):
    cnt = 0
    while cnt < 2:
        player = input('예측값을 입력하세요: ')
        if (len(player) != len(set(player))) or len(player) > 4:
            print('입력값에 오류가 있습니다. 재입력하세요.')
        else:
            cnt += 1
            res = ['B' if player[i] == answer[i] else
                   'C' if player[i] in answer else 'U' for i in range(len(answer))]
            result = str(res.count('B')) + 'B' + str(res.count('C')) + 'C'
            if result == '4B':
                print('정답입니다. 총 입력한 횟수: {}'.format(cnt))
                break
            else:
                print('오답입니다. 판정: {}, 시도 횟수: {}'.format(result, cnt))

    if cnt == 2:
        print('정답: {}\nGame Over!!'.format(''.join(answer)))
        retry = int(input('다시 도전하겠습니까? '))
        while retry > 1:
            retry = int(input('다시 도전하겠습니까? '))
        if retry == 1:
            print('재도전을 선택하셨습니다. 게임을 다시 시작합니다.')
            main()

def main():
    input_range = [str(i) for i in range(10)]
    answer = random.sample(input_range, 4)
    while answer[0] == '0':
        answer = random.sample(input_range, 4)
    print(answer)
    bsc(answer)

if __name__ == '__main__':
    main()

2020/05/22 16:47

Hwaseong Nam

import random as ra

# 겹치지 않는 4개의 숫자 생성 함수
def making():
    global qu_4
    qu_4=[]
    qu_4.append(ra.randint(0, 9))
    for i in range(1, 4):
        while True:
            c=ra.randint(0, 9)
            for j in range(0, i):
                if c == int(qu_4[j]):
                    break
            else:
                qu_4.append(c)
                break
    return qu_4

# 4개 숫자 외에는 다시 입력하게 하는 함수, 같은 숫자 입력 가능(문제조건임)
def ans_lin():
    global a1
    a1=[]
    while True:
        try:
            ans = str(input("Input 4 integers from 0 to 9 : "))
            an = int(ans)
            if len(ans)!=4 or ("." in ans) or ("-" in ans):
                print("no, no. Input 4 intergers from 0 to 9")
            else:
                break
        except ValueError:
                print("That was no valid number.  Try again...")
    ans=list(ans)
    a1=[int(ans[0]),int(ans[1]),int(ans[2]),int(ans[3])]
    return a1

# 다시 할지 물어보는 함수
def again():
    global gogo
    while True:
        ag = input("Do you want to play again? (y/n)")
        if (ag == "n") or (ag == "N"):
            gogo = False
            break 
        elif (ag == "y") or (ag == "Y"):
            gogo = True
            break
    return gogo

qu_4 = []
a1=[]
gogo = True

# 본 프로그램은 여기부터.
print("[ Bulls ans Cows game ] __ Find 4 differnt intergers!!")
while gogo:
    making()
    for i in range(1, 11):
        bull = 0
        cow = 0
        ans_lin()
        for j in range(0, 4):
            if a1[j] == qu_4[j]:
                bull += 1
            elif a1[j] in qu_4:
                cow += 1
        print("#### {} try : your quess is {}, and the result is [ {}b{}c ].".format(i,a1,bull,cow))
        if bull == 4 :
            print("You did it!! Congrat.")
            break
    if bull != 4:
        print("Failed. The answer is {}.".format(qu_4))
    again()

2020/05/27 21:18

Stony Lee

import random as ra # 겹치지 않는 4개의 숫자 생성 함수, qu_4의 리스트 def making(): global qu_4 qu_4=[] qu_4.append(ra.randint(0, 9)) for i in range(1, 4): while True: c=ra.randint(0, 9) for j in range(0, i): if c == int(qu_4[j]): break else: qu_4.append(c) break return qu_4 # 다시 할지 물어보는 함수, gogo(bool type)으로 결정 def again(): global gogo while True: ag = input("Do you want to play again? (y/n)") if (ag == "n") or (ag == "N"): gogo = False break elif (ag == "y") or (ag == "Y"): gogo = True break return gogo # 4개의 숫자를 제시하는 AI, a1(리스트)로 4개의 숫자 제시 def ans_ai(cou): global a1 for cou in range(1,11): if i == 1: a1 = ans1() elif i == 2: a1 = ans2() return a1 def ans1(): an = [0, 1, 2, 3] return an def ans2(): if count_bull_cow() == 4: an = a2_4() else: an = a2_3under() return an def a2_4(): an = [4, 0, 4, 4] return an def a2_3under(): an = [4, 5, 6, 7] return an def count_bull_cow(): global bull, cow co = bull + cow return co # 본 프로그램은 여기부터. qu_4 = [] # 문제 4개 숫자 list a1=[] # 답변 gogo = True bull_cow=[] # 횟차별 현황 bull, cow list print("[ Bulls ans Cows game ] __ AI trial") while gogo: making() for i in range(1, 11): bull = 0 cow = 0 ans_ai(i) for j in range(0, 4): if a1[j] == qu_4[j]: bull += 1 elif a1[j] in qu_4: cow += 1 bull_cow.apeend([bull, cow]) print("#### {} try : AI's quess is {}, and the result is [ {}b{}c ].".format(i,a1,bull,cow)) if bull == 4 : print("You did it!! Congrat.") break if bull != 4: print("Failed. The answer is {}.".format(qu_4)) again() - Stony Lee, 2020/05/30 11:44
import random

com = ""
for i in random.sample([i for i in range(10)], 4):
    com += str(i)

n = 10
while n:
    me = input("숫자를 입력하세요: ")
    bulls = 0
    cows = 0
    for i in range(4):
        if me[i] == com[i]:
            bulls += 1
    for i,k in zip(me,com):
        if i in com and i!=k:
            cows += 1
    if bulls == 4:
        print("정답입니다. 총 입력한 횟수: {}".format(11 - n))
        break
    else:
        print(str(bulls) + "B" + str(cows) + "C, 입력한 횟수: {}".format(11 - n))
    n -= 1
    if n == 0:
        print("\"Game Over\"")
        print("정답 : "+com)
        x = input("재도전? (1:수락,0:거절): ")
        if x == "1":
            n = 10
            com = ""
            for i in random.sample([i for i in range(10)], 4):
                com += str(i)
            continue
        if x == "0":
            brea

2020/12/03 17:07

김우석

게임이 더 어렵네용 ..

import random

random.seed()
numbers = []
for i in range(4):
    x = -1
    while x<0 or numbers.count(x)>0:
        x = random.randrange(10)
    numbers.append(x)

solved = False
for i in range(10):
    inputok = False
    while not inputok:
        inputok = True
        guess = input("Guess? ")
        for j in range(4):
            if guess[j]<'0' or guess[j]>'9' or guess.count(guess[j])>1:
                inputok = False
                break

    b = 0
    c = 0
    for j in range(4):
        d = int(guess[j])
        if d==numbers[j]:
            b = b+1
        elif numbers.count(d)>0:
            c = c+1
    if b==4:
        print("정답입니다. 총 입력한 횟수: ", i+1)
        solved = True
        break
    print(str(b)+'B'+str(c)+'C')
if not solved:
    print("정답은: ", str(numbers[0])+str(numbers[1])+str(numbers[2])+str(numbers[3]))
    print("Gave Over")

2020/12/09 15:50

김준우

python 3.9.1

import random
def check():
    i = 0
    while i != 3:
        enum = str(input('enter 4-digit number: '))
        temp = list(enum)
        if len(enum) == 4:
            for i in range(0, 4):
                if temp.count(temp[i]) > 1:
                    print('interger overlapped')
                    break
                if ord(temp[i]) < 48 or ord(temp[i]) > 57:
                    print('not-interger input is not allowed')
                    i = 0
                    break
        else:
            print('The interger length is wrong')
    return temp
key = []
while len(key) != 4:
    aux = str(random.randrange(0, 10))
    if aux not in key:
        key.append(aux)
count = 0
bull = 0
while count < 10 and bull != 4:
    cow = 0
    bull = 0
    val = check()
    for i in range(0, 4):
        if val[i] in key:
            if key.index(val[i]) == i:
                bull += 1
            else:
                cow += 1
    count += 1
    print('{}B{}C, count = {}'.format(bull, cow, count))
if bull == 4:
    print('you win!')
else:
    print('you lose... The interger was {}{}{}{}'.format(key[0], key[1], key[2], key[3]))

2021/01/24 16:13

김민수

만들고 나니까 retry를 안넣었다는걸 깨달았네요... ㅠㅠ - 김민수, 2021/01/24 16:14
import random as r

def GenerateNum(n):  # n <= 10, n자리 숫자 생성
    number = list(range(0,10))
    res = str()
    for i in range(n):
        digit = r.choice(number)
        number.remove(digit)
        res += str(digit)
    return res

def checkinput(n):  # 입력한 값이 형식에 맞는지 확인
    if len(n) != 4 or not n.isdigit():
        return 0
    for i in range(0,10):
        if n.count(str(i)) > 1:
            return 0
    return 1

def judging(com, user):  # Bulls를 0번째 값, Cows를 1번째 값으로 하는 리스트 반환 
    result = [0, 0]
    for i in range(4):
        for j in range(4):
            if com[i] == user[j]:
                if i==j:
                    result[0] += 1
                else:
                    result[1] += 1
    return str(result[0]) + 'B' + str(result[1]) + 'C'


while True:
    com = GenerateNum(4)  
    att = 1
    endType = int()
    while True:
        user = input()
        if checkinput(user) == 0:
            print("잘못 입력하셨습니다")
            continue

        res = judging(com, user)

        if res == '4B0C':
            endType = 1
            break
        print("판정: %s, 입력한 횟수: %d" % (res, att))
        if att == 10:
            endType = 2
            break
        att += 1
    if endType == 1:
        print("정답입니다. 총 입력한 횟수: %d" % att)
    elif endType == 2:
        print("Game Over")
    print("게임을 다시 시작하시겠습니까?")
    print("1: 예   0: 아니요")
    a = input()
    if a == 0:
        break
    else:
        continue


2021/02/16 12:24

추연식

import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.IntStream;

public class BullsAndCows {
    // 1. 랜덤으로 4개 숫자 중복없이 생성
    // 2. 10턴 안에 정답 맞추기
    // 3. Bulls => 값과 위치가 모두 맞다
    // 4. cows => 위치는 틀렸지만 값이 맞다.
    public static void main(String[] args) {

        int[] answer = random();
        String ans = Arrays.toString(answer);
        int length = answer.length;
        int[] input = new int[length];
        Scanner sc = new Scanner(System.in);
        int cnt = 1;
        while (cnt <= 10) {
            int Bulls = 0;
            int Cows = 0;
            System.out.print("숫자를 입력하세요 : ");
            for(int i=0;i<length;i++) {
                input[i] = sc.nextInt();
            }

            if (Arrays.equals(answer, input)) {
                System.out.println("정답입니다. 총 입력한 횟수 : " + cnt);
                break;

            } else {
                for (int i = 0; i < length; i++) {
                    int num = input[i];
                    if (num == answer[i]) {
                        Bulls++;
                    } else if (IntStream.of(answer).anyMatch(x -> x==num)) {
                        Cows++;
                    }

                }
                System.out.println("판정 : " + Bulls + "B" + Cows + "C" + "입력한 횟수: " + cnt);
                cnt++;

            }
        }
        System.out.println(ans+"Game Over");
        sc.close();

    }

    static int[] random() {
        int[] nums = new int[4];

        for (int i = 0; i < nums.length; i++) {
            nums[i] =(int)(Math.random()*9+1);
            for (int j = 0; j < i; j++) {
                if (nums[i] == nums[j]) {
                    i--;
                }
            }
        }

        return nums;
    }
}

정수형 배열로 입력을 받으니 입력 시 공백이 꼭 들어가야하네요ㅠㅠㅠ
1234 처럼 입력받는 방법을 더 공부해야겠습니다..

2021/03/13 16:15

강성빈

import random

list = [i for i in range(1,10)]
random.shuffle(list) #수열을 셔플하여 앞자리 4자리만 뽑음
com = list[:4] 
round,count,bulls,cows=0,0,0,0

while True :
    user = [int(i) for i in input('숫자를 맞춰보자(4자리):')]
    count+=1
    for i in range(4):
        if user==com : round+=1
        elif user[i]==com[i]: bulls +=1
        elif user[i] in com: cows +=1
    print(f'bulls:{bulls} cows:{cows}')

    #정답이거나 횟수를 10회 넘으면 재시작을 물어봄
    if count >=10 or round>1 :
        if round>1: print(f'정답! {count}회 진행\n한번 더 하시겠습니까? Y / N')
        else : print('Game Over\n한번 더 하시겠습니까? Y / N')
        a = input()
        count,round = 0,0
        if a=='y'or'Y': continue
        else : break        
    bulls,cows = 0,0

2021/06/21 15:01

약사의혼자말

import random

while True:
    bc = random.sample('1234567890',4)
    bcs = ''
    time = 0

    for i in bc:
        bcs += i

    while time < 10:
        B = 0
        C = 0
        t = 0
        user = str(input('0~9까지의 숫자를 겹치지 않게 입력해 주세요:'))
        btl = list(user)
        btl.sort()
        for k in range(1,len(btl)):
            if btl[-k] == btl[-k-1]:
                t = 1
        if t != 0:
            print('잘못된 입력입니다. 숫자를 겹치지 않게 입력해 주세요.')
            continue
        if len(user) != 4:
            print('잘못된 입력입니다. 4자리 숫자로 다시 입력해주세요.')
            continue
        else:
            for i in range(4):
                if list(user)[i] == bc[i]:
                    B += 1
                else:
                    for j in bc:
                        if list(user)[i] == j:
                            C += 1
            time += 1
            if time <= 10:
                if B == 4:
                    print('정답입니다. 총 입력한 횟수: %d' %(time))
                else:
                    print('B%dC%d 현제 입력 횟수: %d' %(B,C,time))

    if time == 10:
        print('Game Over 정답은 %s 입니다.' %(bcs))

    print('다시 하시겠습니까?')
    while True:
        retry = input('0: 종료, 1: 다시 시작...: ')
        if retry == '0':
            exit()
        elif retry =='1':
            break
        else:
            print('잘못된 입력입니다. 0 또는 1을 입력해주세요.')
            continue

2021/08/08 23:34

Percy

import random
while True:
    a = [0,1,2,3,4,5,6,7,8,9]
    b = ""
    for i in range(4):
        c = random.choice(a)
        a.remove(c)
        b += str(c)
    print(b)
    count = 0
    while True:

        data = input("숫자 4개을 입력하세요: ")
        bdata = list(data)
        bdata.sort()
        num = 0
        if 4 != len(data):
            print("에러입니다.숫자 4자리를 입력 하세요")
            continue
        for i in range(3):
            if bdata[i]== bdata[i+1]:
                num = 1
        if num == 1:       
            print("숫자가 겹쳣읍니다,다시 입력 하세요")
            continue

        count += 1
        bull = 0
        cow = 0
        for i in range(4):
            if b[i] == data[i]:
                bull += 1
            else:
                for j in range(4):
                    if b[i] == data[j]:
                        cow += 1
        if bull == 4:
            print(f"정답입니다. 총 입력한 횟수: {count}")
        elif count == 10:
            print(f"정답은 {b} 입니다. Game over")
        else:
            print(f"{bull}B{cow}C , 입력한 횟수: {count}")
            continue
        break
    cda = 0
    dda = 0
    while True:   
        da2 = input("게임다시시작 1 입력, 게임종료 0 입력 :")
        if da2 == '0':
            cda = 1
            break
        elif da2 == '1':
            dda = 1
            break
        else:
            print("잘못 입력 햇읍니다. 0 과 1 을 입력히세요")
            continue
    if cda == 1:
        break
    if dda == 1:
        continue




2021/10/14 13:48

한고선

python

import random

def _isdigit(var): #올바른 입력인지 확인
    return 0 <= var <= 9

def _strike(arr1, arr2): #스트라이크(Bull) 판정
    s = 0
    for i in range(4):
        if arr1[i] == arr2[i]:
            s += 1
    return s

def _ball(arr1, arr2): #볼(Cow)판정
    b = 0
    for i in range(len(arr1)):
        for j in range(len(arr2)):
            if i != j and arr1[i] == arr2[j]:
                b += 1
    return b

def make_answer(): #플레이어에게 입력받기 
    answer=[-1] * 4
    while -1 in answer:
        print("0~9까지의 숫자중 중복없이 4개를 입력해 주십시오:")
        answer[0] = int(input("첫번째: "))
        if  not _isdigit(answer[0]):
            print("잘못된 형식입니다. 다시입력해 주십시오")
            continue
        for i in range(1, len(answer)):
            while True:
                n = int(input(f"{i + 1}번째: "))
                if  not _isdigit(n):
                    print("잘못된 형식입니다. 다시입력해 주십시오")
                    continue
                if n in answer:
                    print("잘못된 형식입니다. 다시입력해 주십시오") 
                    continue
                answer[i] = n
                break           
    return answer

first, second, third, fourth = random.sample(range(10), 4)
answer = "%s, %s, %s, %s" % (first, second, third, fourth) #정답
count = 0 #턴수

# 판정 #

flag = True
while flag:
    # 초기화
    strike = 0
    ball = 0

    for i in range(10):
        # 판정
        cowboy=make_answer() #플레이어에게 입력받기
        strike = _strike(cowboy, list(map(int, answer.split(', '))))
        ball = _ball(cowboy, list(map(int, answer.split(', '))))
        count += 1
        print(f"판정: {strike}B{ball}C, 턴수: {count}")

        if strike == 4:
            print("정답입니다!!!")
            flag = False
            break

    print(f"정답은 {answer} 입니다. GAMEOVER")
    while True:
        choice = input("재시작을 원하면 1을 종료를 원하시면 0을 입력해주십시오: ")
        if not (choice == "1" or choice == "0"):
            continue
        else:
            flag = bool(int(choice))
            count = 0
            break

2022/11/07 22:32

김성범

목록으로