Python中的4x4矩阵

时间:2017-03-28 14:36:37

标签: python python-3.x matrix infinite-loop

我试图用随机整数1-4编写python中的4x4矩阵。 这很容易我的问题是我想要每行和每列只有一次使用每个数字1-4

例如

1 2 3 4

2 3 4 1

3 4 1 2

4 1 2 3

我的代码在我的循环中有33%的时间发生了类似这样的事情

2 1 4 3

3 4 2 1

1 3 X< --------因为这个程序不能继续,我最终进入无限循环,有人可以帮助我怎么能出去? 我的代码在下面

""" Programm for playing the game skyline """
from random import randrange

row1 = [] 
row2 = []
row3 = []
row4 = []
allrows = [row1, row2, row3, row4]

column1 = []
column2 = []
column3 = []
column4 = []
allcolumns = [column1, column2, column3, column4]

def board():
    for i in range(4):
        j = 0
        while len(allrows[i]) != 4:
            x = randrange(1,5)
            print(i, j)
            if x not in allrows[i] and x not in allcolumns[j]: 
                allrows[i].append(x)
                allcolumns[j].append(x)
                j += 1

            else:
                continue

board()

3 个答案:

答案 0 :(得分:1)

基本上,您所做的是将您要选择的数字放在列表中。随机选择一个索引,使用并删除它。 下一次,你选择其中一个。

答案 1 :(得分:1)

您似乎在寻找排列,以下是如何获取排列:

from itertools import permutations
a = list(permutations([1,2,3,4]))

现在获得随机4个列表:

import random

from itertools import permutations
a = list(permutations([1,2,3,4]))

for _ in range(4):
    print a[random.randint(0,len(a)-1)]

编辑就是您要找的那个:

import random
import numpy as np

from itertools import permutations
a = list(permutations([1,2,3,4]))

i = 0
result = [a[random.randint(0,len(a)-1)]]
a.remove(result[0])
print result
while i < 3:
     b = a[random.randint(0,len(a)-1)]
     if not any([any(np.equal(b,x)) for x in result]):
         result.append(b)
         i +=1
     a.remove(b)

print result

答案 2 :(得分:0)

我试过这个,if和elif;对于超过4的范围,它正在工作。

x=int(input("enter your range"))
for i in range(x+1):
if i+1<x+1:
print(i+1,end='')
if(i+2<x+1):
   print(i+2,end='')
   if(i+3<x+1):
    print(i+3,end='')
    if(i+4<x+1):
     print(i+4)
    elif(i!=0 and i+4>=x+1):
      print(i)
   elif(i!=0 and i+3>=x+1):
    print(i-1,end='')
    print(i)
elif(i!=0 and i+2>=x+1):
  print(i-2,end='')
  print(i-1,end='')
  print(i)