Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 14, 2013 08:27:55

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:16:16

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

Программа иногда зацикливается, не могу понять почему

замените эту жесть)

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)
на
D=[[0 for i in xrange(num)] for j in xrange(num)]
L=[[0 for i in xrange(num)] for j in xrange(num)]
а зацикливается прога потому что вам не везет при генерации случайных чисел - например(возьмем num=3) пусть первая строка сгенерировалась такой - (2,3,1), а первые 2 члена второй строки сгенерировались - (3, 2, x). Тогда перебор всех значений оставшегося члена не остановится никогда.



Отредактировано Aris_P@ (Ноя. 14, 2013 09:17:20)

Офлайн

#3 Ноя. 14, 2013 10:32:10

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

Программа иногда зацикливается, не могу понять почему

Aris_P@
а зацикливается прога потому что вам не везет при генерации случайных чисел - например(возьмем num=3) пусть первая строка сгенерировалась такой - (2,3,1), а первые 2 члена второй строки сгенерировались - (3, 2, x).
Спасибо огромное, я вообще не додумался до этого, придется исправлять!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version