Comenzamos llamando a las librerias
import numpy as np from random import *
Encontramos un numero aleatorio entre el 1,2 o 3
aux1 = 3*random() if aux1 > 0 and aux1<=1: aux2=1 if aux1 > 1 and aux1<=2: aux2=2 if aux1 > 2 and aux1<=3: aux2=3 print(aux2)
Es convniente crear una funcion que encapsule la determinacion del numero aleatorio
def random3(): aux1 = 3*random() if aux1 > 0 and aux1<=1: aux2=1 if aux1 > 1 and aux1<=2: aux2=2 if aux1 > 2 and aux1<=3: aux2=3 return aux2 print(random3())
Probamos a ver que tal funciona
for i in range(10): print(random3()) 1 2 1 3 2 3 1 3 2 2
Ahora creamos una matriz de 3×3
A=np.zeros((3,3)) print(A) [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
La asignacion de elementos de matriz puede hacerse de la siguiente forma
A[0,0]=0 A[0,1]=1 A[0,2]=2 A[1,0]=3 A[1,1]=4 A[1,2]=5 A[2,0]=6 A[2,1]=7 A[2,2]=8 print(A) [[0. 1. 2.] [3. 4. 5.] [6. 7. 8.]]
A continuacion, planteamos una propuesta de solucion aleatoria
A[0,0]=random3() A[0,1]=random3() A[0,2]=random3() A[1,0]=random3() A[1,1]=random3() A[1,2]=random3() A[2,0]=random3() A[2,1]=random3() A[2,2]=random3() print(A) [[3. 3. 2.] [1. 2. 2.] [1. 2. 3.]]
Una forma mas conpacta de crear una matriz aleatoria es
for i in range(3): for j in range(3): A[i,j]=random3() print(A) [[2. 3. 2.] [3. 2. 3.] [3. 1. 1.]]
Tambien, para este caso es conveniente crear una funcion que cree una matriz aleatoria
def crea(): for i in range(3): for j in range(3): A[i,j]=random3() return A
A continuacion probamos la funcion de la siguiente forma
for i in range(5): A=crea() print(A) [[2. 3. 2.] [1. 1. 2.] [3. 1. 2.]] [[1. 3. 3.] [2. 1. 2.] [2. 3. 2.]] [[3. 1. 2.] [2. 2. 1.] [1. 3. 3.]] [[1. 3. 2.] [3. 3. 3.] [3. 2. 2.]] [[3. 2. 3.] [3. 2. 3.] [1. 1. 3.]]
Para checar que una matriz A es solucion, planteamos
solucion = 1 # Es una bandera, solucion 1 se asume temporalmente que es solucion, 0 Se demuestra que NO es solucion if solucion ==1: # Checando el primer renglon... if A[0,0] == A[0,1] or A[0,0] == A[0,2] or A[0,1]==A[0,2]: print('Hay dos numeros iguales en el primer renglon') solucion = 0 if solucion ==1: # Checando el segundo renglon... if A[1,0] == A[1,1] or A[1,0] == A[1,2] or A[1,1]==A[1,2]: print('Hay dos numeros iguales en el segundo renglon') solucion = 0 if solucion ==1: # Checando el segundo renglon... if A[2,0] == A[2,1] or A[2,0] == A[2,2] or A[2,1]==A[2,2]: print('Hay dos numeros iguales en el tercer renglon') solucion = 0 if solucion ==1: # Checando la primer columna... if A[0,0] == A[1,0] or A[0,0] == A[2,0] or A[1,0]==A[2,0]: print('Hay dos numeros iguales en la primer columna') solucion = 0 if solucion ==1: # Checando la segunda columna... if A[0,1] == A[1,1] or A[0,1] == A[2,1] or A[1,1]==A[2,1]: print('Hay dos numeros iguales en la segunda columna') solucion = 0 if solucion ==1: # Checando la tercer columna... if A[0,2] == A[1,2] or A[0,2] == A[2,2] or A[1,2]==A[2,2]: print('Hay dos numeros iguales en la tercer columna') solucion = 0 print(solucion)
Es conveniente que este procedimiento de checar si una matriz A es solucion, se encapsule en una funcion, de la forma
def busca(A): solucion = 1 # Es una bandera, solucion 1 se asume temporalmente que es solucion, 0 Se demuestra que NO es solucion if solucion ==1: # Checando el primer renglon... if A[0,0] == A[0,1] or A[0,0] == A[0,2] or A[0,1]==A[0,2]: print('Hay dos numeros iguales en el primer renglon') solucion = 0 if solucion ==1: # Checando el segundo renglon... if A[1,0] == A[1,1] or A[1,0] == A[1,2] or A[1,1]==A[1,2]: print('Hay dos numeros iguales en el segundo renglon') solucion = 0 if solucion ==1: # Checando el segundo renglon... if A[2,0] == A[2,1] or A[2,0] == A[2,2] or A[2,1]==A[2,2]: print('Hay dos numeros iguales en el tercer renglon') solucion = 0 if solucion ==1: # Checando la primer columna... if A[0,0] == A[1,0] or A[0,0] == A[2,0] or A[1,0]==A[2,0]: print('Hay dos numeros iguales en la primer columna') solucion = 0 if solucion ==1: # Checando la segunda columna... if A[0,1] == A[1,1] or A[0,1] == A[2,1] or A[1,1]==A[2,1]: print('Hay dos numeros iguales en la segunda columna') solucion = 0 if solucion ==1: # Checando la tercer columna... if A[0,2] == A[1,2] or A[0,2] == A[2,2] or A[1,2]==A[2,2]: print('Hay dos numeros iguales en la tercer columna') solucion = 0 return solucion
Hacemos una prueba
z=busca(A) print(A) print(z)
Hacemos varias pruebas
for k in range(10): for i in range(3): for j in range(3): A[i,j]=random3() print(A) z=busca(A) print(z) for k in range(10): for i in range(3): for j in range(3): A[i,j]=random3() print(A) z=busca(A) print(z) [[1. 1. 1.] [1. 2. 3.] [1. 3. 3.]] Hay dos numeros iguales en el primer renglon 0 [[3. 1. 2.] [3. 1. 3.] [1. 1. 1.]] Hay dos numeros iguales en el segundo renglon 0 [[3. 1. 2.] [1. 1. 3.] [2. 2. 3.]] Hay dos numeros iguales en el segundo renglon 0 [[2. 2. 1.] [1. 1. 1.] [2. 3. 3.]] Hay dos numeros iguales en el primer renglon 0 [[2. 1. 2.] [3. 3. 1.] [2. 2. 1.]] Hay dos numeros iguales en el primer renglon 0 [[2. 2. 3.] [1. 3. 2.] [3. 1. 2.]] Hay dos numeros iguales en el primer renglon 0 [[3. 1. 1.] [3. 3. 2.] [1. 3. 2.]] Hay dos numeros iguales en el primer renglon 0 [[3. 1. 1.] [2. 2. 2.] [2. 2. 1.]] Hay dos numeros iguales en el primer renglon 0 [[3. 3. 3.] [2. 1. 3.] [1. 1. 2.]] Hay dos numeros iguales en el primer renglon 0 [[2. 2. 2.] [1. 1. 2.] [1. 2. 2.]] Hay dos numeros iguales en el primer renglon 0
Es conveniente reescribir la funcion busca() de forma que ya no arroje tanta informacion
def busca2(A): solucion = 1 # Es una bandera, solucion 1 se asume temporalmente que es solucion, 0 Se demuestra que NO es solucion if solucion ==1: # Checando el primer renglon... if A[0,0] == A[0,1] or A[0,0] == A[0,2] or A[0,1]==A[0,2]: solucion = 0 if solucion ==1: # Checando el segundo renglon... if A[1,0] == A[1,1] or A[1,0] == A[1,2] or A[1,1]==A[1,2]: solucion = 0 if solucion ==1: # Checando el segundo renglon... if A[2,0] == A[2,1] or A[2,0] == A[2,2] or A[2,1]==A[2,2]: solucion = 0 if solucion ==1: # Checando la primer columna... if A[0,0] == A[1,0] or A[0,0] == A[2,0] or A[1,0]==A[2,0]: solucion = 0 if solucion ==1: # Checando la segunda columna... if A[0,1] == A[1,1] or A[0,1] == A[2,1] or A[1,1]==A[2,1]: solucion = 0 if solucion ==1: # Checando la tercer columna... if A[0,2] == A[1,2] or A[0,2] == A[2,2] or A[1,2]==A[2,2]: solucion = 0 return solucion
hacemos una prueba
cuenta=0 N=1000 for k in range(N): for i in range(3): for j in range(3): A[i,j]=random3() z2=busca2(A) if z2==1: print(z2,'una solucion') print(A) cuenta=cuenta+1 print(cuenta) 1 una solucion [[3. 1. 2.] [2. 3. 1.] [1. 2. 3.]] 1 una solucion [[3. 1. 2.] [2. 3. 1.] [1. 2. 3.]] 2
Como podemos checar que tenemos soluciones diferentes y ademas, guardarlas???
Una opcion puede ser
a = np.array([[1,2,3],[4,5,6]]) print('First array:') print(a) print('\n') print('Append elements to array:') print(np.append(a, [7,8,9])) print('\n') print('Append elements along axis 0:') print(np.append(a, [[7,8,9]],axis = 0)) print('\n') print('Append elements along axis 1:') print(np.append(a, [[5,5,5],[7,8,9]],axis = 1))