Ir para o conteúdo
supaturk

Criar matriz de números aleatórios

Mensagens Recomendadas

supaturk

SAUDAÇÕES!

preciso criar uma matriz N x N e guardar números aleatórios duplicados.

exemplo : [ 2,2,1,1

                  4,4,6,6

                  3,3,5,5 ]

alguém sabe como fazer isso?

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Sim, não é difícil. Mas tens a certeza que a representação que aí tens é o que pretendes? Parece-me que tens aí uma representação unidimensional de um conjunto de números; para uma verdadeira representação bidimensional terias que ter uma lista de listas.

Posto isto, sabes como gerar números aleatórios em Python? O que tens escrito até agora?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
supaturk
4 horas atrás, pwseo disse:

Sim, não é difícil. Mas tens a certeza que a representação que aí tens é o que pretendes? Parece-me que tens aí uma representação unidimensional de um conjunto de números; para uma verdadeira representação bidimensional terias que ter uma lista de listas.

Posto isto, sabes como gerar números aleatórios em Python? O que tens escrito até agora?

Sim tem que ser array bidimensional , linhas e colunas.andei vendo que é uma lista de listas. Exemplo: números aleatórios de 1 a 9 duplicados.

Pesquisei números aleatórios assim:

import random 

num = random.randint(1,9)

 

Editado por pwseo
Bloco de código.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Muito bem. E agora que sabes que podes criar números aleatórios via randint(), como fazes para criar uma lista com N números aleatórios? E como achas que é possível repetir este processo N vezes?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
supaturk
import random

	for i in range(3):
		for j in range(3):
			lista = random.randint(2,7)
			print(lista)

ate agora so conseguir fazer assim.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

@supaturk

O teu código não cria lista nenhuma, apenas imprime números no ecrã. Além disso, a variável à qual chamas lista contém apenas um número em cada uma das iterações dos ciclos. De qualquer modo, vamos pegar no que tu fizeste e adaptar um pouco até chegarmos à solução final.

Primeiro, começas por parametrizar os ciclos utilizando a variável n para determinar a dimensão da matriz. Podes também utilizar variáveis como min e max para determinar os limites dos números aleatórios gerados (completamente opcional). De seguida, crias dois ciclos (um dentro do outro, como já fizeste). O primeiro ciclo (exterior) é responsável por gerar e imprimir cada uma das linhas da tua matriz. O segundo ciclo (interior) é responsável por gerar cada um dos números aleatórios e, já agora, pela duplicação do mesmo.

import random

n = 3

for y in range(n):
    linha = []
    for x in range(n):
        # gerar número aleatório e colocá-lo 2x em `linha`
    print linha

Aconselho-te a ler um pouco sobre append(), extend() e também sobre listas por compreensão.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
supaturk
import random 

lista = []
n = 3

for y in range(n):
	linha = []
	for x in range(n):
		num = random.randint(1,9) 
		linha.append(num)
		lista.append(linha)
		
		print("lista até agora => ",lista)

Fiz dessa forma, mas os números se repetem mais de uma vez.

Editado por pwseo
Removida citação desnecessária.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Já tentaste compreender qual o motivo para obteres o output que obténs? Logicamente há problemas com as instruções que colocaste no ciclo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
supaturk
11 horas atrás, pwseo disse:

Já tentaste compreender qual o motivo para obteres o output que obténs? Logicamente há problemas com as instruções que colocaste no ciclo.

alterei algumas coisas e conseguir uma lista aleatória. desde já continuo precisando de vossa ajuda. 

import random
lista = []
n = 3

for x in range(n):
	linha = []
	for y in range(n):
		linha = random.randint(1,9)
		lista.append(linha)
		lista.append(linha)

		print(lista)
	resultado =>	[3, 3, 3, 3, 8, 8, 8, 8, 9, 9, 5, 5, 4, 4, 1, 1, 7, 7]

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

@supaturk, temos aqui vários problemas no teu código.

Para começar, tu atribuis a linha o número aleatório gerado, o que faz pouco sentido visto estares a gerar um número único -- o apropriado será chamar a isso algo como num. De seguida, tens uma variável global lista à qual adicionas os números gerados em duplicado, mas sem qualquer noção de bidimensionalidade (ou seja, tens uma lista de números simples, em vez de uma lista de listas de números, como tinha sido dito antes).

De uma forma geral, o que tu pretendes deverá ser feito da seguinte forma:

  • Gerar um número aleatório num
  • Adicionar esse número aleatório em duplicado a uma linha
  • Adicionar essa linha a uma matriz

Ou seja, algo assim:

import random

n = 3        # a nossa dimensao
matriz = []  # esta sera a nossa matriz

for _ in range(n):
    linha = []  # certificar que começamos com uma linha vazia
    for _ in range(n):
        num = random.randint(1, 9)
        linha.extend([num, num])
    matriz.append(linha)

No final, matriz será uma lista de 3 listas, cada uma delas com 3 pares de números aleatórios duplicados. Estuda o código para perceberes o que ele faz e como o faz.

Nota: tomei a liberdade de utilizar _ como variável nos ciclos; é uma convenção para variáveis cujo conteúdo não vamos utilizar nunca.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
supaturk

muito grato pela tua ajuda PWSEO. mas n sei se fui claro na minha descriçao do problema.

tudo que precisava era que a matriz tivesse 18 numeros, de 1 a 9,duplicados.  = >  [[1,1,2,2,3,3],[4,4,5,5,6,6],[7,7,8,8,9,9]]. nao necessariamente nessa ordem,

mas obrigado pela sua paciencia e sua ajuda, mesmo assim se puderes da uma pista eu agradeço.

 

Editado por pwseo
removida citação desnecessária

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Agora estou a perceber; tu queres uma amostragem aleatória sem reposição, que no teu caso acaba por ser um shuffle da sequência original. Se calhar eu começaria por gerar então uma lista com os 9 números numa ordem aleatória, e depois trataria de os duplicar e partir em sublistas.

Lê um pouco sobre a função random.shuffle() como ponto de partida (também podes ver random.sample() para uma solução mais genérica)

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
supaturk

exatamente isso PWSEO. eu compliquei tudo ate aqui. mas o que tu mostrou foi bom que aprendi outras coisas.

vou da uma olhada com calma e depois respondo. desde ja obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.