Форум сайта python.su
0
Есть массив в котором 36 элементов, при чем некоторые из них схожи (количество различных элементов разное). Элементы упорядочены: A A B B B C…N N. Как сделать так чтобы в вот этих диапазонах: (0,5)(6,11)(12,17)(18,23)(24,29)(30,35) не было схожих элементов ? Обломался с random.shuffle)
Отредактировано Ahmasoft (Май 13, 2016 16:53:51)
Офлайн
88
Замешивать уникальные и неуникальные отдельно, а затем компоновать?
Офлайн
253
ShamanКруто, вы просто экстрасенс 100 Уровня. У меня даже гипотез нет о том какой смысл в поставленном вопросе.
Замешивать уникальные и неуникальные
Офлайн
88
Когда и гипотез нет - дела совсем плохи. У меня гипотезы были, целых несколько. Ответил, отталкиваясь от самой вероятной, а неуверенность в ответе выразил вопросительной формой предложения.
Офлайн
0
Короче вот весь код:
#составитель расписания #в день 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
while b < g : a.append(raw_input("Введите название предмета: ")) a.append(int(input("Сколько раз он должен быть в неделю ?: "))) b = b + 1 b = 0
Отредактировано Ahmasoft (Май 12, 2016 16:48:53)
Офлайн
0
Надумал такое, переименовываем все массивы с названиями дней недели на l, m, n, o, p, q. А потом:
# -*- coding:utf8 -*- import random g = int(input("Введите кол-во предметов в неделю: ")) a = [] week = [] l = []; m = []; n = []; o = []; p = []; q = [] 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]: k = random.randint(1,6) if k == 1: k = l if k == 2: k = m if k == 3: k = n if k == 4: k = o if k == 5: k = p if k == 6: k = q k.append(a[c]) d += 1 if c + 1 == g * 2 - 1: break else: c += 2 b += 1 print(l) print(m) print(n) print(o) print(p) print(q)
while b <= g: d = 0 while d < a[c + 1]: k = random.randint(1,6) if k == 1: k = l if k == 2: k = m if k == 3: k = n if k == 4: k = o if k == 5: k = p if k == 6: k = q k.append(a[c]) d += 1 if c + 1 == g * 2 - 1: break else: c += 2 b += 1
Отредактировано Ahmasoft (Май 12, 2016 18:03:50)
Офлайн
253
Да зачем нам ваш код, который наверное не работает. Судя по тому что нет откликов никто не понимает что вы хотите сделать. Вы это по русски опишите.
Отредактировано doza_and (Май 12, 2016 20:49:06)
Офлайн
0
Обижаете, работает. И я его не просто так показываю, а говорю что нужно доработать. Создаю составитель расписания. Пользователь сначала вводит количество различных предметов. Затем поочередно название предмета, и сколько раз он должен быть в неделю. Программа раскидывает эти значения по 6 дням, при чем в каждом дне не более 6 элементов. И кажется я уже понял как это сделать.
Отредактировано Ahmasoft (Май 12, 2016 22:24:38)
Офлайн
88
# -*- coding:utf8 -*- import random days = [[] for _ in range(6)] subjects = {'физика' : 12, 'химия' : 12, 'алгебра' : 12} assert(sum(subjects.values()) <= len(days) * 6) cursor = 0 for subj, count in subjects.items(): for _ in range(count): days[cursor].append(subj) cursor = (cursor + 1) % len(days) # опционально for day in days: random.shuffle(day) print(days)
Офлайн
0
Shaman, спасибо за попытку, но мне нужно было расскинуть не 3 предмета. А то количество кое введет пользователь.
Офлайн