Найти - Пользователи
Полная версия: Почему зависает скрипт?
Начало » Центр помощи » Почему зависает скрипт?
1
Tenebras
Уважаемые товарищи Умельцы!
Мне уже как-то помогли на одном форуме переписав код в продвинутый вариант. Я от безнадёжья сдал его, за что и был развёрнут преподом. По причине, что мы на этот уровень ещё не вышли.
Не переделывайте, пожалуйста код, так, что оно будет выше моего уровня! Спасибо за понимание!
Да и я бы хотел понять - что я не так делаю. А на вашем уровне я пока не был

Вопрос, который мне любят задавать: Для чего оно тебе?
Ответ: Такое задание дали. Построить судоку. Полностью заполненное.

Мне не нужно решение. Хочу сам к нему прийти. Препод сказал, что мы напишем сейчас и в конце года. И сравним - на сколько продвинулись. Я просто хочу знать ошибку моего вариаета.

Простите за такое гневное вступление.

Что не так:
Скрипт срабатывает крайне редко. Зависает то на одном цикле, то на другом. Редко уходит дальше 4го.
Вопрос: ПОЧЕМУ?

PS: Когда я менял for z in range(2,9): с 9 на 5 - иногда даже скрипт выполнялся до конца. При 9 - ни разу.

 import random
sudoku = [[],[],[],[],[],[],[],[],[]]
for z in range(0,9):
	print(z)
	while len(sudoku[z])<9:
		r = random.randint(1,9)
		sudoku[z].append(r)
		for i in sudoku[z]:
			n = sudoku[z].index(i)
			vloj = []
			for p in range(0,z):
				vloj.append(sudoku[p][n])
			
			if sudoku[z].count(i) > 1 or sudoku[z][n] in vloj:
				del sudoku[z][-1]
print()
print(sudoku)
FishHook
Tenebras
Ну вы же понимаете, что рандом - вещь по-идее непредсказуемая, он по-идее может в течении получаса выдавать вам одно и то же число - случайность же.
Вы слишком наивно подходите к алгоритму. Попробуйте рассуждать иначе. Сначала вам надо составить первый ряд полностью случайный.
 random.shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9])
#получите например [3, 5, 1, 6, 9, 8, 7, 2, 4]

Второй ряд вы формируете так: для первой позиции вам надо выбирать из значений отличных от 3, то есть
 random.choice([1, 2, 4, 5, 6, 7, 8, 9])
для второй отличных от пяти и т.д. Получите
 #получите например [1, 2, 3, 7, 9, 8, 6, 4, 2]
Третий ряд аналогично, для первой позиции вам надо выбирать из значений отличных от 3 и 1

смысл ясен?
Tenebras
FishHook
Наверное понимаю. Отосплюсь и попробую осознать.
Я проверил - random разный. Он не зависает, а начинает совершать какой-то бесконечный цикл. Причину не понял.

Ваш способ пробовать через 12 часов.
Двое суток без сна)))
FishHook
Tenebras
Он не зависает, а начинает совершать какой-то бесконечный цикл. Причину не понял.
смотри

 r = 5
while r <= 5:
   r = randon.randrange(0, 10)

вы можете спрогнозировать сколько времени будет работать этот скрипт? Сколько итераций будет в цикле? Не можете, потому что время работы программы зависит от череды случайных выборов и теоретически вам может не повезти так, что эта простая программа будет работать сутки, а может повезти, и она закончится на первом же витке цикла.
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