Проблема с индексами
Всем привет у меня имеется 2 списка (один с именами, другой с различными местами). Суть в том что надо взять пару рандомных имен из первого списка и одно рандомное место из второго списка и вывести их вместе. Когда этот код выполняется вылезает indexerror
import random
chel = ["Буянов", "Валеева", "Волчугов", "Гусаров", "Димов", "Евстафьева", "Журенко", "Змиевская", "Иванова", "Кеян", "Латышев", "Леви", "Мушников", "Овсянникова", "Подставкин", "Снхчян", "Стаина", "Трофимов", "Халмвтов", "Шевкунова",]
s_chel = len(chel)
mesta = ["Медпункт", "Лестница 1.1", "Лестница 1.2", "Столовка", "Холл", "Лестница2.1", "Лестница 2.2", "Лестница3.1", "Лестница 3.2", "Центр 2",]
s_mesta = len(mesta)
while True:
part_1 = random.randint(0,s_chel-1)
part_2 = random.randint(0,s_chel-1)
part_3 = random.randint(0,s_mesta-1)
if part_1 == part_2:
print("\nНеполомка")
elif part_1 != part_2:
print("\n" + str(chel.pop(part_1)) + " " + str(chel.pop(part_2)) + " : " + str(mesta.pop(part_3)))
elif s_chel and s_mesta == 0:
break
print("Задача выполнена")
Ответы (2 шт):
Скорее всего вы не подключили библиотеку random, вам ошибка это и говорит. Напишите перед кодом import random
Метод pop возвращает элемент и УДАЛЯЕТ ЕГО ИЗ МАССИВА(!!!). Не знаю, хотели ли вы удалять его или просто не знали об этом, но массив у вас становиться короче, а ваши переменные с длиной вы не меняете, поэтому логично, что вы выходите за пределы массива.
В коде ниже я учла этот момент, плюс обратите внимание на строку part_2 = random.randint(0, s_chel - 1): так как элемент по индексу part_2 вы будете удалять после того, как удалите элемент по индексу part_1, массив у вас уже будет на 1 елемент короче.
Далее из chel вы удалили 2 элемента, а из mesta 1 - уменьшаем переменные.
s_chel < 2 or s_mesta == 0 - вы не сможете найти новые part_1, part_2 и part_3 без этого условия.
import random
chel = ["Буянов", "Валеева", "Волчугов", "Гусаров", "Димов", "Евстафьева", "Журенко", "Змиевская", "Иванова", "Кеян", "Латышев", "Леви", "Мушников", "Овсянникова", "Подставкин", "Снхчян", "Стаина", "Трофимов", "Халмвтов", "Шевкунова"]
s_chel = len(chel)-1
mesta = ["Медпункт", "Лестница 1.1", "Лестница 1.2", "Столовка", "Холл", "Лестница2.1", "Лестница 2.2", "Лестница3.1", "Лестница 3.2", "Центр 2"]
s_mesta = len(mesta)-1
while True:
part_1 = random.randint(0, s_chel)
part_2 = random.randint(0, s_chel - 1)
part_3 = random.randint(0, s_mesta)
if part_1 == part_2:
print("\nНеполомка")
elif part_1 != part_2:
print("\n" + str(chel.pop(part_1)) + " " + str(chel.pop(part_2)) + " : " + str(mesta.pop(part_3)))
s_chel -= 2
s_mesta -= 1
if s_chel < 2 or s_mesta == 0:
break
print("Задача выполнена")
P.S. Ещё можно было бы обойтись без s_chel и s_mesta вообще.
Вы могли бы вместо этого каждый раз заново смотреть длину массива. А ещё равенство part_1 и part_2 вам бы ничем не помешало