2015-02-15 6 views
0

Я прошу программу распечатать цифры с 1 по 9 в случайном порядке в сетке. Проблема в том, что когда он распечатывается, он будет иметь одинаковые номера дважды. Вот код, который я до сих пор: `импорт случайные строки = 3 смещ_по_столбцев = 3Попытка заставить мою программу не дублировать случайные числа

values = [[0,0,0]] 

for r in range(rows): 
    for c in range(cols): 
     values [r][c] = random.randint(1, 9) 
     print(values) 

`

и пример вывод: [[6, 0, 0]] [[6, 4, 0]] [[6, 4, 2]]

также, эти двойные скобки раздражают , любой способ исправить это?

+0

Дубликат [этот вопрос] (http://stackoverflow.com/questions/473973/shuffle-an-array-with-python). – Phylogenesis

ответ

2

Использование random.shuffle рандомизировать порядка чисел, которые вы хотите:

import random 

numbers = list(range(1, rows * cols + 1)) # good for Py 2 *and* 3 
random.shuffle(numbers) 
values = [[0] * cols for r in rows] 

(последний, чтобы избежать дубликатов в values и сделать это правильный размер - я не вижу, как исходный код может не поднять исключения!).

затем:

for r in range(rows): 
    for c in range(cols): 
     values[r][c] = numbers(r + rows * c) 
    print(values[r]) 

, который также удаляет двойные скобки (если вы хотите полуторные) и печатает только каждую строку один раз (оригинал отступ будет печатать всю матрицу много, много раз :-).

+0

Спасибо большое Alex :) – Jesse

+0

Принимая ответ (щелкнув по зеленой рамке с надписью слева) всегда лучший способ выразить благодарность (как только прошло достаточно времени с вашего вопроса, чтобы вы могли принять, конечно:) ... –

+0

просто сделал это, как только смог! – Jesse

0

Если вы не против использования numpy, попробуйте numpy.random.shuffle().

Пример:

import numpy 
xx = numpy.arange(10) 
numpy.random.shuffle(xx) 
print xx