Форум сайта python.su
Решил в целях практики сделать вывод данных для судоку. Но при нахождение повторного значение в вертикали обработка останавливается, подозреваю что забивается память, но не понятно по чему.
Python 3.1.x
import random
A=[[],[],[],[],[],[],[],[],[]]
gorizontal=[]
line=str()
ok=True
while ok:
i=0
print("")
print("")
while i<9:
num=random.randint(1,9)
if A[i].count(num)==0 and gorizontal.count(num)==0:
A[i].append(num)
gorizontal.append(num)
i+=1
else:
continue
for i in gorizontal:
line+= " " + str(i)
print(line)
gorizontal=[]
line=""
if len(A[8]) == 9:
ok=False
input("Нажмите любую кнопку")
if A[i].count(num)==0 and gorizontal.count(num)==0:
A[i].append(num)
gorizontal.append(num)
i+=1
else:
continue
Отредактировано (Апрель 26, 2010 22:25:30)
Офлайн
Почему переменная b юзается без определения?
Я получаю вот это при попытке выполнить ваш код:
NameError: name ‘b’ is not defined
Офлайн
Edэто опечатка, исправил исходный код
Почему переменная b юзается без определения?
Я получаю вот это при попытке выполнить ваш код:
NameError: name ‘b’ is not defined
Офлайн
Циклит у вас из-за логической ошибки в алгоритме.
Достаточно, чтобы числа, которых не хватает в gorizontal уже были в A и все, вы попали.
Вот вам пример:
При i=8, A = и gorizontal = вы из вашего цикла while(i<9) не выйдете.
Офлайн
EdСпс, понял свою ошибку. значит надо придумывать другой алгоритм.
Циклит у вас из-за логической ошибки в алгоритме.
Достаточно, чтобы числа, которых не хватает в gorizontal уже были в A и все, вы попали.
Вот вам пример:
При i=8, A = и gorizontal = вы из вашего цикла while(i<9) не выйдете.
Отредактировано (Апрель 27, 2010 08:33:11)
Офлайн
переделал код полностью
import random
vert = [[], [], [], [], [], [], [], [], []]
gor = [[], [], [], [], [], [], [], [], []]
for x in range(0, 9):
for y in range(0, 9):
vert[x].append(" ")
gor[x].append(" ")
ok = True
while ok:
for x in range(0, 9):
for y in range(0, 9):
if vert[x][y] == " ":
num = random.randint(1, 9)
if vert[x].count(num) == 0:
if gor[y].count(num) == 0:
vert[x][y] = num
gor[y][x] = num
if vert.count(" ") == 0:
ok = False
def print_sud():
line = "|"
print("-" * 50)
for x in range(0, 9):
if x in (3, 6, 9):
print("|", "-" * 46, "|")
for y in range(0, 9):
if y in (3, 6, 9):
line += "|"
line += " " + str(gor[x][y]) + " "
print(line, "|")
line = "|"
print("-" * 50)
print_sud()
input("Нажмите любую кнопку")
--------------------------------------------------
| 4 8 6 | 3 9 | 1 |
| 8 2 1 | 5 | 4 9 |
| 6 5 | 9 7 | 1 |
| ---------------------------------------------- |
| 7 6 2 | 1 9 | 3 |
| 3 9 | 6 4 | 8 |
| 4 7 | 2 | |
| ---------------------------------------------- |
| 3 8 | | 6 2 |
| 4 | 8 | 5 |
| 9 | 5 | 7 |
--------------------------------------------------
Отредактировано (Апрель 27, 2010 17:30:20)
Офлайн
Если я правильно понял ваш код, то пробелы остаются потому что если условия vert.count(num)==0 и gor.count(num)==0 не выполняется, то vert и gor не устанавливаются и вы переходите к следующему элементу, а эти так и останутся пустыми.
Кстати, стиль оставляет желать лучшего. Читаем это: http://www.python.org/dev/peps/pep-0008/ и для начала прекращаем называть функции русскими именами.
Офлайн
но я в цикле ставлю проверку
if vert.count(" ")==0:
ok= False
Офлайн
ghostly_dogvert - это двумерный список. Пробелы у вас на уровень ниже.
как я полагаю, пока он находит пробелы цикл не должен завершаться
прочел бы документацию, если была бы на русскомА гугл на что? http://habrahabr.ru/blogs/python/76738/
Офлайн