Короче вот весь код:
#составитель расписания
#в день 6 уроков
#36 уроков в неделю
# -*- coding:utf8 -*-
import random
g = int(input("Введите кол-во предметов в неделю: "))
a = []
week = []
pn = []; vt = []; sr = []; ct = []; pt = []; sb = []
b = c = d = 0
while b < g :
a.append(raw_input("Введите название предмета: "))
a.append(int(input("Сколько раз он должен быть в неделю ?: ")))
b = b + 1
b = 0
while b <= g:
d = 0
while d < a[c + 1]:
week.append(a[c])
d += 1
if c + 1 == g * 2 - 1:
break
else:
c += 2
b += 1
b = d = 0
c = 5
while b < 6:
while d < c:
if week[d] == week[d+1]:
random.shuffle(week)
if week[d] == week[d-5]:
random.shuffle(week)
elif week[d] == week[d+2]:
random.shuffle(week)
if week[d] == week[d-4]:
random.shuffle(week)
elif week[d] == week[d+3]:
random.shuffle(week)
if week[d] == week[d-3]:
random.shuffle(week)
elif week[d] == week[d+4]:
random.shuffle(week)
if week[d] == week[d-2]:
random.shuffle(week)
elif week[d] == week[d+5]:
random.shuffle(week)
if week[d] == week[d-1]:
random.shuffle(week)
d += 1
c = c + 5
b += 1
b = d = 35
def days(l):
global b
global d
while b > d-6:
l.append(week[b-1])
b -= 1
if b < 0:
break
d = d - 6
days(pn); days(vt); days(sr); days(ct); days(pt); days(sb)
print(pn)
print(vt)
print(sr)
print(ct)
print(pt)
print(sb)
Не ругайте за нерациональное использование переменных, скоро исправлю.
Вот этот вот фрагмент почти работает:
while o < 6:
while d < m:
if week[d] == week[d+1]:
random.shuffle(week)
if week[d] == week[d-5]:
random.shuffle(week)
elif week[d] == week[d+2]:
random.shuffle(week)
if week[d] == week[d-4]:
random.shuffle(week)
elif week[d] == week[d+3]:
random.shuffle(week)
if week[d] == week[d-3]:
random.shuffle(week)
elif week[d] == week[d+4]:
random.shuffle(week)
if week[d] == week[d-2]:
random.shuffle(week)
elif week[d] == week[d+5]:
random.shuffle(week)
if week[d] == week[d-1]:
random.shuffle(week)
d += 1
m = m+5
o += 1
Но обязательно в одном диапазоне найдутся хотя бы 2 одинаковых элемента, и я уже заведомо думал что он будет работать даже хуже. Но думаю если вот здесь правильно пошаманить, то все будет прекрасно:
while b < g :
a.append(raw_input("Введите название предмета: "))
a.append(int(input("Сколько раз он должен быть в неделю ?: ")))
b = b + 1
b = 0
И ещё племянница подала идею хD. Заносить к примеру не 3 сразу подряд, а сначала 1 элемент, потом другой (отличающийся) и т.д пока 1 элемент не занесется 3 раза.