Criar Matriz e selecionar uma coluna e uma linha

1. Criar Matriz e selecionar uma coluna e uma linha

André
arsaraiva

(usa Ubuntu)

Enviado em 10/04/2017 - 10:03h

Olá amigos, estou iniciando em python e já me deparei com a primeira dificuldade:
Estou querendo criar uma matriz com os próprios índices, logo seria algo assim:

11  12  13  14  15
21  22  23  24  25
31  32  33  34  35
41  42  43  44  45
51  52  53  54  55

Em seguida seria necessário eu pegar forma aleatória uma coluna e uma linha para saída, logo minha saída no fim deveria ser:

13,23,31,41,42,43,44,45,53 (peguei a 3ª coluna e a 4ª linha como exemplo)

Bem o meu código para gerar a matriz já apresenta um problema, 

import random
num=5
a=[]
for i in range(num):
  a = str(i)
  for j in range(num):
    a+= str(j)
    print(a +",")

Tem a seguinte saída:
00,
001,
0012,
00123,
001234,
10,
101,
1012,
10123,
101234,
20,
201,
2012,
20123,
201234,
30,
301,
3012,
30123,
301234,
40,
401,
4012,
40123,
401234,

Será que alguém poderia me ajudar? Desde já agradeço


  


2. MELHOR RESPOSTA

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 11/04/2017 - 12:25h

arsaraiva escreveu:

Olá!
O código abaixo já está gerando a matriz:
import random

tamanho = 5
matriz = []
linha = []

for elemento in range(1, tamanho + 1):
a = str(elemento)
for elemento in range(1, tamanho + 1):
b = str(elemento)
matriz.append(a + b)
print(matriz)

col = str(random.randrange(1,tamanho,1))
print ('Coluna: ', col)
lin = str(random.randrange(1,tamanho,1))
print ('Linha: ', lin)

for item in matriz:
if item[1] == col:
linha.append(item)
if item[0] == lin:
linha.append(item)

print('Resultado: ', linha)


O problema está na saída. Olha a saída gerada:
['11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '31', '32', '33', '34', '35', '41', '42', '43', '44', '45', '51', '52', '53', '54', '55']
Coluna: 2 //coluna selecionado pelo random
Linha: 3 //linha selecionada pelo random
Resultado: ['12', '22', '31', '32', '32', '33', '34', '35', '42', '52'] //este resultado é que necessito ajustar

O número 32 (intercessão entre a coluna e a linha) aparece duas vezes. O que não poderia acontecer.
Tentei fazer algo do tipo if item[0] == item[1], mais não deu certo, até porque o 33 atende a essa verificação.

Outro detalhe foi a saída, tentei fazer print ('padrao[',linha,']') o que também ficou errado, já que minha saída deveria ser:

padrao[12],padrao[22],padrao[31],padrao[32],padrao[33],padra[34],padrao[35],padrao[42]padroa[52]

Poderia me ajudar?


Mais um passo, este contempla a pergunta inicial:

import random

tamanho = 5
matriz = []
linha = []

for elemento in range(1, tamanho + 1):
a = str(elemento)
for elemento in range(1, tamanho + 1):
b = str(elemento)
matriz.append(a + b)
print(matriz)

col = str(random.randrange(1,tamanho,1))
print ('Coluna: ', col)
lin = str(random.randrange(1,tamanho,1))
print ('Linha: ', lin)

for item in matriz:
if item not in linha and item[1] == col:
linha.append(item)
if item not in linha and item[0] == lin:
linha.append(item)

print('Resultado: ')
for result in linha:
print('padrao[' + result + ']', end=',')



3. Re: Criar Matriz e selecionar uma coluna e uma linha

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 10/04/2017 - 15:57h

Vejamos:
1) Na primeira linha tu importa o random e não usa ele em lugar nenhum do programa. Onde está a parte que gera os números aleatórios?
2) Na linha 3 tu atribui ao "a" uma lista vazia e na linha 5 atribui ao "a" uma string. É para ser Lista ou String?

O resultado da execução do programa está condizente com o que está programado.
Para continuar precisas definir como será esta tua matriz. Cada linha será um string em uma lista? cada linha será uma tupla dentro de uma lista? Cada linha será uma lista dentro de outra lista? Como serão sorteados os números? Terá limites? Ou será com os próprios índices como diz no início?

Qual a idéia?

Para começar a te ajudar eu deixo este código:

tamanho = 5
matriz = []

for elemento in range(1, tamanho + 1):
a = str(elemento)
for elemento in range(1, tamanho + 1):
b = str(elemento)
matriz.append(a + b)

print(matriz)


Abraço


4. Re:Criar Matriz e selecionar uma coluna e uma linha

André
arsaraiva

(usa Ubuntu)

Enviado em 10/04/2017 - 19:16h

Boa noite Lisandro,

antes de mais nada, obrigado pela atenção.
respondendo a primeira pergunta, o import random seria apenas na hora de escolher uma coluna e uma linha (depois da matriz pronta), por isso (e como eu sabia fazer) fiz o import.
respondendo a segunda pergunta: eu não sei trabalhar bem com lista, e o python reclamou na hora de executar, assim eu inseri o a=str(x) e ele rodou com aquele resultado errado. Foi meio que no desespero.

Bem minha matriz será de índices mesmo e a saída final poderá ser uma string.
Vou explicar exatamente o que preciso:
1º) vou gerar uma matriz de índices, logo:

11 12 13 14 15 16
21 22 23 24 25 26
...
61 62 63 64 65 66

2º) depois de gerada, o random entraria para escolher uma coluna e uma linha (nesta ordem). Por exemplo o coluna 3 linha 2:

13 21 22 23 23 25 26 33 43 53 63

3º) por fim o print deverá fornecer a saída exatamente conforme abaixo:

padrao[13], padrao[21], padrao[22], padrao[23], padrao[24], padrao[25], padrao[26], padrao[33], padrao[43], padrao[53], padrao[63]

Preciso fazer com que o python gere a matriz, pois com um tamanho pequeno eu poderia fazer manualmente, porém a matriz deve ser capaz de ser gerada com os tamanhos 100x100, 200x200, 400x400 e já na primeira opção (100x100) seriam 99 índices para digitar (e errar é claro!!!)

Se puder ir me ajudando, passei a manhã e tarde tentando fazer a matriz e com seu código, ficou bem mais simples de eu aprender (não só copiar).

PS: eu disse acima 99 indeices pois a interseção entre a coluna e a linha não se repete. :-)


5. Re:Criar Matriz e selecionar uma coluna e uma linha

André
arsaraiva

(usa Ubuntu)

Enviado em 10/04/2017 - 19:26h

Só um detalhe, a partir do seu código tentei fazer:

tamanho = 5
matriz = []
linha = []

for elemento in range(1, tamanho + 1):
a = str(elemento)
for elemento in range(1, tamanho + 1):
b = str(elemento)
matriz.append(a + b)
print(matriz)
s=matriz.split()
if (len(s)>0):
if s[0] == "2":
linha.append(s[0]+s[1])
print(linha)

escolhi o "2" no if para pegar a linha 2 (como teste), porém retornou que o split não pode ser feito em lista (mais não fizemos a conversão para str(elemento)???)


6. Re: Criar Matriz e selecionar uma coluna e uma linha

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 10/04/2017 - 20:52h

arsaraiva escreveu:

Só um detalhe, a partir do seu código tentei fazer:

tamanho = 5
matriz = []
linha = []

for elemento in range(1, tamanho + 1):
a = str(elemento)
for elemento in range(1, tamanho + 1):
b = str(elemento)
matriz.append(a + b)
print(matriz)
s=matriz.split()
if (len(s)>0):
if s[0] == "2":
linha.append(s[0]+s[1])
print(linha)

escolhi o "2" no if para pegar a linha 2 (como teste), porém retornou que o split não pode ser feito em lista (mais não fizemos a conversão para str(elemento)???)


Que tal assim:

tamanho = 5
matriz = []
linha = []

for elemento in range(1, tamanho + 1):
a = str(elemento)
for elemento in range(1, tamanho + 1):
b = str(elemento)
matriz.append(a + b)
print(matriz)

for item in matriz:
if item[0] == "2":
linha.append(item)

print('Resultado: ', linha)



7. Re:Criar Matriz e selecionar uma coluna e uma linha

André
arsaraiva

(usa Ubuntu)

Enviado em 11/04/2017 - 07:58h

Bom dia Lisandro,

Ficou ótimo. E a partir do seu código, fiz uma pequena modificação, porém mais uma vez, me perdi no caminho:

import random

tamanho = 5
matriz = []
linha = []

for elemento in range(1, tamanho + 1):
a = str(elemento)
for elemento in range(1, tamanho + 1):
b = str(elemento)
matriz.append(a + b)
print(matriz)

col = str(random.randrange(1,tamanho,1))
print ('Coluna: ', col)
lin = str(random.randrange(1,tamanho,1))
print ('Linha: ', lin)

for item in matriz:
if item[1] == col:
linha.append(item)
if item[0] == lin:
linha.append(item)

print('Resultado: ', linha)

Agora coluna e a linha são escolhidas de forma aleatória. Porém surgiu dois probleminhas:

Olha a saída gerada:
['11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '31', '32', '33', '34', '35', '41', '42', '43', '44', '45', '51', '52', '53', '54', '55']
Coluna: 2
Linha: 3
Resultado: ['12', '22', '31', '32', '32', '33', '34', '35', '42', '52']

O número 32 (intercessão entre a coluna e a linha) aparece duas vezes. O que não poderia acontecer.
Tentei fazer algo do tipo if item[0] == item[1], mais não deu certo, até porque o 33 atende a essa verificação.

Outro detalhe foi a saída, tentei fazer print ('padrao[',linha,']') o que também ficou errado, já que minha saída deveria ser:

padrao[12],padrao[22],padrao[31],padrao[32],padrao[33],padra[34],padrao[35],padrao[42]padroa[52]

Poderia me ajudar?


8. Re: Criar Matriz e selecionar uma coluna e uma linha

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 11/04/2017 - 09:43h

arsaraiva escreveu:

Boa noite Lisandro,

antes de mais nada, obrigado pela atenção.
respondendo a primeira pergunta, o import random seria apenas na hora de escolher uma coluna e uma linha (depois da matriz pronta), por isso (e como eu sabia fazer) fiz o import.
respondendo a segunda pergunta: eu não sei trabalhar bem com lista, e o python reclamou na hora de executar, assim eu inseri o a=str(x) e ele rodou com aquele resultado errado. Foi meio que no desespero.

Bem minha matriz será de índices mesmo e a saída final poderá ser uma string.
Vou explicar exatamente o que preciso:
1º) vou gerar uma matriz de índices, logo:

11 12 13 14 15 16
21 22 23 24 25 26
...
61 62 63 64 65 66

2º) depois de gerada, o random entraria para escolher uma coluna e uma linha (nesta ordem). Por exemplo o coluna 3 linha 2:

13 21 22 23 23 25 26 33 43 53 63

3º) por fim o print deverá fornecer a saída exatamente conforme abaixo:

padrao[13], padrao[21], padrao[22], padrao[23], padrao[24], padrao[25], padrao[26], padrao[33], padrao[43], padrao[53], padrao[63]

Preciso fazer com que o python gere a matriz, pois com um tamanho pequeno eu poderia fazer manualmente, porém a matriz deve ser capaz de ser gerada com os tamanhos 100x100, 200x200, 400x400 e já na primeira opção (100x100) seriam 99 índices para digitar (e errar é claro!!!)

Se puder ir me ajudando, passei a manhã e tarde tentando fazer a matriz e com seu código, ficou bem mais simples de eu aprender (não só copiar).

PS: eu disse acima 99 indeices pois a interseção entre a coluna e a linha não se repete. :-)


Bom! Gerar a matriz é simples, segue o code.
[[y for y in range(x - 5, x)] for x in range(5, 30, 5)] 

Saída:
[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24]] 

Selecionar os elementos é mais simples ainda:
>>> lista[4][4]
24

Para isso pode ser usado o random.

Espero ter ajudado e boa sorte no seu estudo.


______________________________________________________________________
OS: Biebian
Kernel: x86_64 3.5.2-amd64
Resolution: 1320x768
CPU: Intel Core i3-4005U CPU @ 1.7GHz
RAM: 3852MiB
Distro: http://biebian.sourceforge.net/


9. Re:Criar Matriz e selecionar uma coluna e uma linha

André
arsaraiva

(usa Ubuntu)

Enviado em 11/04/2017 - 10:29h

Olá!
O código abaixo já está gerando a matriz:
import random

tamanho = 5
matriz = []
linha = []

for elemento in range(1, tamanho + 1):
a = str(elemento)
for elemento in range(1, tamanho + 1):
b = str(elemento)
matriz.append(a + b)
print(matriz)

col = str(random.randrange(1,tamanho,1))
print ('Coluna: ', col)
lin = str(random.randrange(1,tamanho,1))
print ('Linha: ', lin)

for item in matriz:
if item[1] == col:
linha.append(item)
if item[0] == lin:
linha.append(item)

print('Resultado: ', linha)


O problema está na saída. Olha a saída gerada:
['11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '31', '32', '33', '34', '35', '41', '42', '43', '44', '45', '51', '52', '53', '54', '55']
Coluna: 2 //coluna selecionado pelo random
Linha: 3 //linha selecionada pelo random
Resultado: ['12', '22', '31', '32', '32', '33', '34', '35', '42', '52'] //este resultado é que necessito ajustar

O número 32 (intercessão entre a coluna e a linha) aparece duas vezes. O que não poderia acontecer.
Tentei fazer algo do tipo if item[0] == item[1], mais não deu certo, até porque o 33 atende a essa verificação.

Outro detalhe foi a saída, tentei fazer print ('padrao[',linha,']') o que também ficou errado, já que minha saída deveria ser:

padrao[12],padrao[22],padrao[31],padrao[32],padrao[33],padra[34],padrao[35],padrao[42]padroa[52]

Poderia me ajudar?


10. Re:Criar Matriz e selecionar uma coluna e uma linha

André
arsaraiva

(usa Ubuntu)

Enviado em 11/04/2017 - 13:48h

Lisandro, ficou maravilhoso.
Não tenho nem como agradecer sua ajuda.
Só tenho uma última pergunta, para terminar esta fase.
Bem, a implementação está escolhendo uma coluna e uma linha da matriz. PERFEITO!!!
Agora se eu quisesse apenas que ela pegasse meia linha?
Por exemplo (modelo completo):
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55

['11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '31', '32', '33', '34', '35', '41', '42', '43', '44', '45', '51', '52', '53', '54', '55']
Coluna: 2
Linha: 1
Resultado: padrao[11],padrao[12],padrao[13],padrao[14],padrao[15],padrao[22],padrao[32],padrao[42],padrao[52]

Para o novo modelo, ficaria assim:
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55

['11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '31', '32', '33', '34', '35', '41', '42', '43', '44', '45', '51', '52', '53', '54', '55']
Coluna: 2
Linha: 1
Resultado: padrao[12],padrao[13],padrao[14],padrao[22],padrao[32],padrao[42],padrao[52]

Uma observação interessante é que a linha é o teto da expressão do tamanho/2 inclusive com a coluna (tamanho da matriz => 5/2=3), assim poderia ocorrer:

11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55

['11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '31', '32', '33', '34', '35', '41', '42', '43', '44', '45', '51', '52', '53', '54', '55']
Coluna: 4
Linha: 1
Resultado: padrao[14],padrao[15],padrao[21],padrao[24],padrao[34],padrao[44],padrao[54]

Neste caso acima, ele pegou um elemento da segunda linha.
Na verdade, acho que esta segunda parte eu teria que fazer algo como:

if (tamanho%2 ==0): //aqui faz o meio o para números pares
meio = tamanho /2
else
meio = (tamanho/2)+1 //aqui o meio para números impares

for item in matriz:
if item not in linha and item[1] == col:
linha.append(item)
if item not in linha and item[0] == lin:
for lin in meio: //acho que aqui é o erro
linha.append(meio)
meio++

print('Resultado: ')
for result in linha:
print('padrao[' + result + ']', end=',')


Porém essa lógica não funcionou bem.


11. Re: Criar Matriz e selecionar uma coluna e uma linha

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 11/04/2017 - 14:45h

arsaraiva escreveu:

Lisandro, ficou maravilhoso.
Não tenho nem como agradecer sua ajuda.
Só tenho uma última pergunta, para terminar esta fase.
Bem, a implementação está escolhendo uma coluna e uma linha da matriz. PERFEITO!!!
Agora se eu quisesse apenas que ela pegasse meia linha?
Por exemplo (modelo completo):
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55

['11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '31', '32', '33', '34', '35', '41', '42', '43', '44', '45', '51', '52', '53', '54', '55']
Coluna: 2
Linha: 1
Resultado: padrao[11],padrao[12],padrao[13],padrao[14],padrao[15],padrao[22],padrao[32],padrao[42],padrao[52]

Para o novo modelo, ficaria assim:
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55

['11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '31', '32', '33', '34', '35', '41', '42', '43', '44', '45', '51', '52', '53', '54', '55']
Coluna: 2
Linha: 1
Resultado: padrao[12],padrao[13],padrao[14],padrao[22],padrao[32],padrao[42],padrao[52]

Uma observação interessante é que a linha é o teto da expressão do tamanho/2 inclusive com a coluna (tamanho da matriz => 5/2=3), assim poderia ocorrer:

11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55

['11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '31', '32', '33', '34', '35', '41', '42', '43', '44', '45', '51', '52', '53', '54', '55']
Coluna: 4
Linha: 1
Resultado: padrao[14],padrao[15],padrao[21],padrao[24],padrao[34],padrao[44],padrao[54]

Neste caso acima, ele pegou um elemento da segunda linha.
Na verdade, acho que esta segunda parte eu teria que fazer algo como:

if (tamanho%2 ==0): //aqui faz o meio o para números pares
meio = tamanho /2
else
meio = (tamanho/2)+1 //aqui o meio para números impares

for item in matriz:
if item not in linha and item[1] == col:
linha.append(item)
if item not in linha and item[0] == lin:
for lin in meio: //acho que aqui é o erro
linha.append(meio)
meio++

print('Resultado: ')
for result in linha:
print('padrao[' + result + ']', end=',')


Porém essa lógica não funcionou bem.


Estou enrolado agora, mas olhando rapidamente.
Troque:
meio++
Por:
meio+=1


12. Re:Criar Matriz e selecionar uma coluna e uma linha

André
arsaraiva

(usa Ubuntu)

Enviado em 11/04/2017 - 16:59h

Tranquilo Lisandro.

Troquei mais não deu certo não. Quando desocupar, se puder me dar uma dica. O código atual está assim:
import random

tamanho = 5
matriz = []
linha = []

for elemento in range(1, tamanho + 1):
a = str(elemento)
for elemento in range(1, tamanho + 1):
b = str(elemento)
matriz.append(a + b)
print(matriz)

col = str(random.randrange(1,tamanho,1))
print ('Coluna: ', col)
lin = str(random.randrange(1,tamanho,1))
print ('Linha: ', lin)

if (tamanho%2 == 0):
meio = (tamanho/2)
else:
meio = (tamanho/2)+1

for item in matriz:
if item not in linha and item[1] == col:
linha.append(item)
if item not in linha and item[0] == lin:
#linha.append(item)
for lin in meio:
linha.append(meio)
meio+=1

print('Resultado: ')
for result in linha:
print('padrao[' + result + ']', end=',')


E dá o seguinte erro:
['11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '31', '32', '33', '34', '35', '41', '42', '43', '44', '45', '51', '52', '53', '54', '55']
Coluna: 3
Linha: 2
Traceback (most recent call last):
File "C:\Users\André\Desktop\gera-grid.py", line 29, in <module>
for lin in meio:
TypeError: 'float' object is not iterable



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts