파이썬 야구게임

조회수 1093회
import random

cum=random.sample(range(1,10),4)

print(cum)

def check_list(listname,input_num):

    listname=[]

    while len(listname)<=input_num-1:
        z=0
        num=int(input("숫자를 입력하세요"))
        listname.append(num)
        for k in range(len(listname)-1):
            for j in range(k+1,len(listname)):
                if listname[k]==listname[j]:
                    print("중복값이 존재합니다. 다시 입력하세요.")
                    listname=[]

    strike=0
    ball=0

    for n in range(len(cum)):
        for r in range (len(listname)):
            if cum[n]==listname[r]and n==r:
                strike=strike+1
            elif cum[n]==listname[r]:
                ball=ball+1


    print(strike,"-strike",ball,"-ball")
    if strike==4:
        print(z,"회만에 성공!")
    else:
        z=z+1
        check_list(listname,input_num)




play=[]    

check_list(play,4)

야구 게임 코드를 짰는데 횟수를 어떻게 새야하나요. 재귀함수로 재설정 시키니까 계속 횟수 세는게 0으로 리셋되서 횟수가 저장이 안됩니다. 해결방법이 있나요 아니면 코드를 다시 짜야 하나요.

1 답변

  • 재귀가 필요치 않습니다.

    import random
    
    cum = random.sample(range(1, 10), 4)
    
    print(cum)
    
    def check_list(input_num = 4):
        cnt = 1
        while True:
            num = input("숫자를 입력하세요")
            #if not num.isnumeric() or len(num) != input_num or len(set(num)) != input_num:
            if (num.isnumeric(), len(num), len(set(num))) != (True, input_num, input_num):
                print('숫자만, 숫자는 {}개 입력할 것, 중복값 허용치 않음'.format(input_num))
                continue    
    
            solve = [v1 == v2 for v1, v2 in zip(cum, map(int, num))]    # True, False 로 스트라이크, 볼을 구분한다.
    
            strike, ball = solve.count(True), solve.count(False)
            print("{}-strike {}-ball".format(strike, ball))
    
            if strike == input_num:
                print("{}회만에 성공!".format(cnt))
                return
            else: cnt += 1
    
    check_list()
    

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

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

(ಠ_ಠ)
(ಠ‿ಠ)