Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 20, 2017 05:38:52

Tenebras
Зарегистрирован: 2016-07-05
Сообщения: 97
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему зависает скрипт?

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

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

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

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

Что не так:
Скрипт срабатывает крайне редко. Зависает то на одном цикле, то на другом. Редко уходит дальше 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)

Отредактировано Tenebras (Дек. 20, 2017 05:54:24)

Офлайн

#2 Дек. 20, 2017 06:24:42

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

Почему зависает скрипт?

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

смысл ясен?



Офлайн

#3 Дек. 20, 2017 06:43:11

Tenebras
Зарегистрирован: 2016-07-05
Сообщения: 97
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему зависает скрипт?

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

Ваш способ пробовать через 12 часов.
Двое суток без сна)))

Офлайн

#4 Дек. 20, 2017 06:49:26

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

Почему зависает скрипт?

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

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

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



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version