Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 14, 2013 08:17:05

Ver1Sus
Зарегистрирован: 2013-11-14
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Программа когда хочет работает, а когда хочет зацикивается.

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

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

Офлайн

#2 Ноя. 14, 2013 09:14:19

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Программа когда хочет работает, а когда хочет зацикивается.

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)]



Офлайн

#3 Ноя. 14, 2013 14:26:28

Ver1Sus
Зарегистрирован: 2013-11-14
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Программа когда хочет работает, а когда хочет зацикивается.


FishHook
Думайте над алгоритмом.
Спасибо за подсказки, может что-нибудь интересное придумается!

Офлайн

#4 Ноя. 14, 2013 14:52:05

alexsis
Зарегистрирован: 2013-07-26
Сообщения: 148
Репутация: +  9  -
Профиль   Отправить e-mail  

Программа когда хочет работает, а когда хочет зацикивается.

Не уверен что это правильно и красиво:

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

Офлайн

#5 Ноя. 14, 2013 15:24:20

Aris_P@
От:
Зарегистрирован: 2010-07-24
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

Программа когда хочет работает, а когда хочет зацикивается.

alexsis
Не уверен что это правильно и красиво:
Не уверен, что циклический сдвиг это то, что хотел ТС. Тут то вроде как прицел на генерацию судоку.



Офлайн

#6 Ноя. 14, 2013 17:11:55

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Программа когда хочет работает, а когда хочет зацикивается.

Насчёт закцикливания - тут похоже причина немного в другой плоскости. Если Я прав, то должно зацикливаться на больших размерах квадрата - ведь там уже сколько ни крути, а когда числа или другие символы кончились, повторения не избежать. Поэтому висняк в while )



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#7 Ноя. 14, 2013 18:10:10

Aris_P@
От:
Зарегистрирован: 2010-07-24
Сообщения: 46
Репутация: +  2  -
Профиль   Отправить e-mail  

Программа когда хочет работает, а когда хочет зацикивается.

на счет зацикливания я уже написал тут http://python.su/forum/topic/22822/
ТС видимо решил, что если создать 2 темы, то решение будет получено в два раза быстрее)



Отредактировано Aris_P@ (Ноя. 14, 2013 18:10:28)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version