vacatoro.py 2.22 KB
Newer Older
Joel Florentin committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

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')