#python #random
Вопрос:
Я написал код, чтобы случайным образом собрать группу людей. Цель состоит в том, чтобы, когда один человек уже выбран случайным образом, программа должна удалить его. У меня есть random.sample()
функция use, и она хорошо работает n=1,2,3,4
, когда я достигаю 5, она выдает мне ошибку, и до сих пор я пытаюсь понять, что происходит за этой функцией. Любое объяснение и подсказка будут полезны. Спасибо!
import random ma_list =["anne","aline","gros","eve","armand","yves","elv","allo","sonia","luc","marc","jules","kevin"] #this will contain an occurence of our list maListOc = ma_list #this list will contain our random list random_list = None groupe = 1 #for each element in ma_list, we randome and put into our variable for i in ma_list: random_list = random.sample(ma_list, 5) #then we remove data already randomize in our list, but the complexity is high for this little program for element in random_list: ma_list.remove(element) print("Goupe N°:",groupe) #and we finally print our randomized list print(random_list) print("______________________________") groupe = 1 print(maListOc)
вот результат:
Goupe N°: 1 ['aline', 'gros', 'armand', 'sonia', 'anne'] ______________________________ Goupe N°: 2 ['kevin', 'allo', 'eve', 'elv', 'marc'] ______________________________ --------------------------------------------------------------------------- ValueError Traceback (most recent call last) lt;ipython-input-29-c2d13d61c8d1gt; in lt;modulegt; 8 #for each element in ma_list, we randome and put into our variable 9 for i in ma_list: ---gt; 10 random_list = random.sample(ma_list, 5) 11 #then we remove data already randomize in our list, but the complexity is high for this little program 12 for element in random_list: ~anaconda3librandom.py in sample(self, population, k) 361 n = len(population) 362 if not 0 lt;= k lt;= n: --gt; 363 raise ValueError("Sample larger than population or is negative") 364 result = [None] * k 365 setsize = 21 # size of a small set minus size of an empty list ValueError: Sample larger than population or is negative
Комментарии:
1. Я не уверен, что здесь непонятно. Вы удаляете элементы до
ma_list
тех пор, пока в нем не останется менее 5 элементов. Тогда вы больше не сможете выбирать 5 случайных предметов.2. После 2 итераций осталось всего 3 имени. Таким образом, образец не может взять 5 имен из 3 элементов списка.
3. Теперь я понимаю, поэтому мне следует просто увеличить количество предметов, если я хочу, чтобы в каждой группе было по пять человек. Спасибо
4. Когда я делал это, я просто говорил, что произойдет, если я захочу, чтобы в каждой группе было по 5 или более человек. lol
Ответ №1:
Ошибка показала, что len ma_list меньше 5. Вам нужно добавить, если… как показано ниже, чтобы разорвать цикл for.
import random ma_list =["anne","aline","gros","eve","armand","yves","elv","allo","sonia","luc","marc","jules","kevin"] #this will contain an occurence of our list maListOc = ma_list #this list will contain our random list random_list = None groupe = 1 #for each element in ma_list, we randome and put into our variable for i in ma_list: if(len(ma_list)lt;=5): break random_list = random.sample(ma_list, 5) #then we remove data already randomize in our list, but the complexity is high for this little program for element in random_list: ma_list.remove(element) print("Goupe N°:",groupe) #and we finally print our randomized list print(random_list) print("______________________________") groupe = 1 print(maListOc)
Выход:
Goupe N°: 1 ['aline', 'jules', 'marc', 'yves', 'luc'] ______________________________ Goupe N°: 2 ['kevin', 'armand', 'gros', 'anne', 'sonia'] ______________________________ ['eve', 'elv', 'allo']
Комментарии:
1. Да, вы правы, мне следовало бы обратить больше внимания на ошибку. Спасибо