supaturk Posted August 28, 2016 at 03:20 PM Report #598432 Posted August 28, 2016 at 03:20 PM 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?
pwseo Posted August 28, 2016 at 06:34 PM Report #598433 Posted August 28, 2016 at 06:34 PM 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?
supaturk Posted August 28, 2016 at 07:51 PM Author Report #598434 Posted August 28, 2016 at 07:51 PM (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 August 28, 2016 at 10:40 PM by pwseo Bloco de código.
pwseo Posted August 28, 2016 at 10:39 PM Report #598435 Posted August 28, 2016 at 10:39 PM 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?
supaturk Posted August 29, 2016 at 12:23 AM Author Report #598436 Posted August 29, 2016 at 12:23 AM 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.
pwseo Posted August 29, 2016 at 09:44 AM Report #598439 Posted August 29, 2016 at 09:44 AM @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.
supaturk Posted August 29, 2016 at 04:16 PM Author Report #598457 Posted August 29, 2016 at 04:16 PM (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 August 29, 2016 at 08:39 PM by pwseo Removida citação desnecessária.
pwseo Posted August 29, 2016 at 08:41 PM Report #598467 Posted August 29, 2016 at 08:41 PM Já tentaste compreender qual o motivo para obteres o output que obténs? Logicamente há problemas com as instruções que colocaste no ciclo.
supaturk Posted August 30, 2016 at 12:19 AM Author Report #598478 Posted August 30, 2016 at 12:19 AM 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]
pwseo Posted August 30, 2016 at 12:54 AM Report #598479 Posted August 30, 2016 at 12:54 AM @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.
supaturk Posted August 30, 2016 at 01:50 AM Author Report #598481 Posted August 30, 2016 at 01:50 AM (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 August 30, 2016 at 02:40 AM by pwseo removida citação desnecessária
pwseo Posted August 30, 2016 at 02:02 AM Report #598482 Posted August 30, 2016 at 02:02 AM 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) 1 Report
supaturk Posted August 30, 2016 at 02:10 AM Author Report #598483 Posted August 30, 2016 at 02:10 AM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now