Я пытаюсь преобразовать код, заменив l oop на while l oop. Это код, который я хочу преобразовать
Функции для кода в приведенном ниже фрагменте. На вопрос @ Sameer
from random import sample
def shuffle(s): return sample(s,len(s))
rBase = range(base)
base = 2
side = base*base
def pattern(r,c):
return (base*(r%base)+r//base+c)%side
Код, в котором у меня возникла проблема
rows = []
cols = []
data = []
for r in shuffle(rBase):
for g in shuffle(rBase):
rows.append(g*base+r)
for c in shuffle(rBase):
for g in shuffle(rBase):
cols.append(g*base+c)
nums = shuffle(range(1,side+1))
for r in rows:
for c in cols:
data.append(nums[pattern(r,c)])
Вот мой код попытки
rows = []
cols = []
data = []
s = shuffle(rBase)
i,j = 0,0
while i < len(s):
r = s[i]
while j < len(s):
s2 = shuffle(rBase)
g = s2[i]
rows.append(g*base+r)
j+=1
i += 1
i,j = 0,0
s = shuffle(rBase)
while i < len(s):
c = s[i]
while j < len(s):
s2 = shuffle(rBase)
g = s2[i]
cols.append(g*base+c)
j += 1
i += 1
nums = shuffle(range(1,side+1))
i,j =0,0
while i < len(rows):
r = rows[i]
while j < len(cols):
c = cols[i]
data.append(nums[pattern(r,c)])
j += 1
i += 1
Некоторая часть кода опущена по соображениям конфиденциальности. Ожидаемый результат, ie результат for l oop snippet - это список с длиной (base ** 4), содержащий каждое число от 1 до base ** 2 точно base ** 2 раза. Например: если основание равно 2: ожидаемый результат будет иметь вид [3, 2, 1, 4, 4, 1, 3, 2, 1, 4, 2, 3, 2, 3, 4, 1]
Фактический результат - это список с основанием длины, где каждый элемент представляет собой случайное число от 1 до основания ** 2 (включая основание ** 2) Например: если основание равно 2: Фактический вывод такой же, как [1,1], [2,2], [3,3] или [4,4]