Jump to content

Recommended Posts

Posted

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?

Posted

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?

Posted (edited)
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)
Edited by pwseo
Bloco de código.
Posted

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?

Posted

@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.

Posted (edited)
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.

Edited by pwseo
Removida citação desnecessária.
Posted
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]
Posted

@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.

Posted (edited)

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.

Edited by pwseo
removida citação desnecessária
Posted

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)

  • Vote 1

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.