import random import numpy as np correct_index = np.ones(10,np.int8)*-1 input_index = np.zeros(10,np.int8) sequences = random.sample(range(10), 4) # tomar una muestra de 4 elementos del 0 al 9 oportunidades = 12 #intercambiar posicion en caso que el primer digito salio 0 if sequences[0] == 0: sequences[0],sequences[1]=sequences[1],sequences[0] #este array nos servira para indexar rapidamente los digitos del numerito, asi no sera necesario iterar for s,k in zip(sequences,range(4)): correct_index[s] = k #validacion de los 3 casos, que sea un numero, que tenga 4 digitos y que no se repita los digitos en la secuencia def validar_input(): bad = True global input_index while bad: guess = str(input("Introduzca un numero.")) if not guess.isnumeric(): print("Debe ser una secuencia de numeros") continue if len(guess)!=4: print("Numero debe ser de 4 digitos") continue input_index = input_index * 0 for n,k in zip(guess,range(4)): if input_index[int(n)] != 0: print("No debe haber numeros repetidos en la secuencia") break input_index[int(n)] = k+1 else: bad = False return guess print(sequences)#imprimimos el valor a adivinar, a modo de facilitar testeo for i in range(oportunidades): guess = validar_input()#pide el input mientras no tenga una secuencia valida toro = 0 vaca = 0 for n,k in zip(guess,range(4)): #un array del 0 al 9 que lo que contiene es la posicion en la que se encuentra en el numero a adivinar. #ya que son solo 4 numeros, solo 4 elementos del array tendran un indice, los demas digitos no presentes contendran -1 #iterando el numero del jugador b, vemos si se encuentra en la posicion que actualmente estamos if correct_index[int(n)] == k: toro += 1 #y si el al menos ese numero esta presente en la secuencia a adivinar. o sea si es distinto a -1 elif correct_index[int(n)] != -1: vaca += 1 if toro == 4: print("Jugador acerto el nro") break print(f'Intento nro {i+1}: {guess}. toro {toro}, vaca {vaca}. Vuelva a intentar')