Ошибка empty range for randrange() (0, 0, 0)
Подскажите пожалуйста, при запуске иногда вылезает ошибка:
empty range for randrange() (0, 0, 0)
Она возникает, когда randrange считывает пустой список (наверное).
Не могу понять, откуда он берётся, прогонял через визуализатор - все ок, через пайчарм ошибка вылезает иногда.
Пустой список взяться не может так-то, потому что только 1 раз удаляется элемент, а потом, когда цикл for начинается заново, появляется начальный список и из него удаляется также 1 элемент (список меняется всегда только на 1 элемент, не на все).
Условие:
Программа случайным образом назначает каждому ученику его тайного друга, который будет вместе с ним решать задачи по программированию, также нельзя быть тайным другом самому себе и нельзя быть тайным другом для нескольких учеников.
Выходные данные (могут быть и другие варианты):
Светлана Зуева - Борис Боков
Аркадий Белых - Светлана Зуева
Борис Боков - Аркадий Белых
Код:
import random
s=['Светлана Зуева', 'Аркадий Белых', 'Борис Боков'] # список имя/фамилия
proof=[]
for i in range(len(s)):
timemas=list(s) # список в котором нет s[i] элемента(ученика), чтобы не было повторок когда ученик является другом самого себя
del timemas[i]
while 1!=2: # бесконечный цикл пока не найдем друга
a=timemas[random.randint(0,len(timemas)-1)] # когда у нас 2 элемента(последовательность от 0 до 2) - они записываются как 0 1(2 не считается), метод randint включает 2 и получается 3 элемента вместо 2. (тут друг находится)
if a not in proof: # проверка, повторяется ли друг
print(s[i],'-',a)
proof.append(a)
break
Ответы (2 шт):
Ошибка происходит из-за того что выбирая для 1 элемента - 2 элемент, 3 элемент может быть только сам с собой. Вот правильная реализация:
import random
s = ['Светлана Зуева', 'Аркадий Белых', 'Борис Боков'] # список имя/фамилия
random.shuffle(s)
for i in range(len(s)):
print(s[i], '-', s[(i + 1) % len(s)])
Ошибка "empty range for randrange()" возникает, когда пытаетесь сгенерировать случайное число из пустого диапазона. В вашем коде возможна ситуация, когда список timemas становится пустым, и при вызове random.randint(0, len(timemas) - 1) возникает указанная ошибка.
Попробуйте этот код, он должен решать вашу проблему.
import random
names = ['Светлана Зуева', 'Аркадий Белых', 'Борис Боков']
while True:
random.shuffle(names)
pairs = list(zip(names, names[1:] + [names[0]]))
if all(pair[0] != pair[1] for pair in pairs):
break
for pair in pairs:
print(pair[0], "-", pair[1])