Python, arrays / vectors and dictionaries

3

Hello, I'm new to python and I do not know how to do it:

1) I have a 2x6 matrix generated by random numbers, for example:

matriz = [11, 4,  50, 8,  9,  78]
         [10, 33, 44, 57, 80, 90]   

What I need to do is:         when drawing a value in the range of line 2 [10, 33, 44 ...] I must return its respective value of line 1, for example if the number drawn     for 85, I should return the value 9 of line 1. If I left the value 38 in the draw, I should return the value 4 of line 1.

value from 10 to 32 of the second line corresponds to the value 11 of line 1 value from 33 to 43 of the second line corresponds to the value 4 of line 1 and so on, however the matrix is generated can be 2x10, 2x30 and etc.

Code:

import random

Pessoa = random.sample(range(1,25),10)
Nota   = random.sample(range(1,25),10)

Pessoa.sort()
Nota.sort()
tmp = sum(Nota)

# sorteando um valor
n_escolhido=random.randrange(1,tmp)

print('Numero sorteado: ', n_escolhido)

I did using list instead of array but stopped at this point because I can not match the list of people with the intervals of the notes.

    
asked by anonymous 04.09.2018 / 21:27

2 answers

1

Using your example data may be simple, remembering that this code will only work if the values in the second row of the array are in ascending order.

I used Numpy to create an array 2x6 (the same array as your example), the logic of the algorithm is simple, create a loop and compare the position of column atual of line 2 of array and the position of the column atual+1 , if its number is between the two values print the value of the corresponding column of line 1

The Code

import numpy as np

#criando array do exemplo
matriz = np.array([[11, 4,  50, 8,  9,  78],[10, 33, 44, 57, 80, 90]])

#entre 10 e 32 = 11
#entre 33 e 43 = 4
#entre 44 e 56 = 50
#entre 57 e 79 = 8
#entre 80 e 89 = 9
#entre 90 e inf = 78

#numero para testar o algoritmo ou pegar número randômico entre 10 e 90
numero=68
numero=np.random.randint(10,90)

#imprime qual número estamos usando
print(numero)

#anda na segunda linha da matriz comparando a posição atual com a próxima posição
for i in range(0, matriz[1:,].shape[1]-1):
    if (numero >= matriz[1,i]) and (numero < matriz[1,i+1]):
        print(matriz[0,i])

#o ultimo índice foi deixado de fora no loop, comparar agora        
if numero >= matriz[1,i+1]:
    print(matriz[0,i+1])
    
06.09.2018 / 17:43
0

With the number drawn, present in the second row of the array

numero_sorteado = 90 # Exemplo

You will find the index of that number on the line where it is present

index_numero_sorteado = matriz[1].index(numero_sorteado)

With this number just access the first row of the array and return the corresponding value

numero_correspondente = matriz[0][index_numero_sorteado]
    
04.09.2018 / 23:39