Найти - Пользователи
Полная версия: Программа когда хочет работает, а когда хочет зацикивается.
Начало » Python для новичков » Программа когда хочет работает, а когда хочет зацикивается.
1
Ver1Sus
Привет, надеюсь мне здесь помогут, я написал программу, которая печатает латинский квадрат (символы в строке и в столбцах не должны повторяться) но она иногда зацикливается и ошибка.Не могу найти решение этой пролемы. В общем вот мой код:
from random import randint
num=input('Enter count of rows: ')
num=int(num)
D=[]
for n in range(0,num):
    d=[]
    for n in range(0,num):
            d.append(0)
    D.append(d)
    
L=[]
for k in range(0,len(D)):   
    l=[]
    for i in range(0,len(D)):
        l.append(D[i][k])
    L.append(l)
for i in range(0,len(D)):        
    for k in range(0,len(D)):    
        while D[i].count(D[i][k])>=2 or L[k].count(L[k][i])>=2 or D[i][k]==0:
            
            D[i][k]=randint(1,num)
            L[k][i]=D[i][k]
print('\n')
for n in D:
    print(n)

Ошибка выглядит так:
^CTraceback (most recent call last):
File “lal.py”, line 29, in <module>
D=randint(1,num)
File “/usr/lib/python2.7/random.py”, line 241, in randint
return self.randrange(a, b+1)
File “/usr/lib/python2.7/random.py”, line 215, in randrange
return int(istart + int(self.random()*width))
KeyboardInterrupt
FishHook
Ver1Sus
зацикливается и ошибка
И где ошибка?
То, что вы привели, это не ошибка, это Вы Ctrl-С нажали.
А насчет зацикливания, а какого поведения Вы ждали, если у Вас выход из цикла зависит от рандома? Думайте над алгоритмом.
И не нужно писать на питоне, как на С.
D=[]
for n in range(0,num):
    d=[]
    for n in range(0,num):
            d.append(0)
    D.append(d)
    
L=[]
for k in range(0,len(D)):   
    l=[]
    for i in range(0,len(D)):
        l.append(D[i][k])
    L.append(l)
аналогично
Matrix = [[0]*num for _ in xrange(num)]
Ver1Sus

FishHook
Думайте над алгоритмом.
Спасибо за подсказки, может что-нибудь интересное придумается!
alexsis
Не уверен что это правильно и красиво:
NUM=int(raw_input(':'))+1
m=range(1,NUM)
matrix=[m for _ in range(NUM)]
i=NUM-1
for x in matrix[1:]:
	print m[i:]+x[0:i]
	i-=1
Aris_P@
alexsis
Не уверен что это правильно и красиво:
Не уверен, что циклический сдвиг это то, что хотел ТС. Тут то вроде как прицел на генерацию судоку.
Master_Sergius
Насчёт закцикливания - тут похоже причина немного в другой плоскости. Если Я прав, то должно зацикливаться на больших размерах квадрата - ведь там уже сколько ни крути, а когда числа или другие символы кончились, повторения не избежать. Поэтому висняк в while )
Aris_P@
на счет зацикливания я уже написал тут http://python.su/forum/topic/22822/
ТС видимо решил, что если создать 2 темы, то решение будет получено в два раза быстрее)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB