#python #алгоритм #python_3x #случайные_числа
Не могу разобраться с задачкой. Создайте программу, которая будет выводить список слов в случайном порядке. На экране должны печататься без повторений все слова из представленного списка. Вот мой код: spisok = ["Alex", "Kate", "Love", "World", "Peace", "Putin",] empty_list = [] count = len(spisok) schetchik = 0 while count != schetchik: for item in spisok: randitem = random.choice(spisok) schetchik += 1 if randitem not in spisok: empty_list += randitem else: break print(empty_list) Скриншот результата выполнения: Выводит пустой список.
Ответы
Ответ 1
Раз пошла такая пьянка, то вот мой вариант: import random spisok = ["Love", "World", "Peace", "Putin",] random.shuffle(spisok) print spisokОтвет 2
Чтобы вывести уникальные слова из списка в случайном порядке, используя различные генераторы псевдослучайных чисел: #!/usr/bin/env python import random words = ["Alex", "Kate", "Love", "World", "Peace", "Putin",] unique_words = list(set(words)) random.shuffle(unique_words) # shuffle using default Mersenne Twister generator random.SystemRandom().shuffle(unique_words) # OS-provided generator print("\n".join(unique_words))Ответ 3
import random spisok = ["Love", "World", "Peace", "Putin",] while spisok: print spisok.pop(random.randint(0, len(spisok)-1))Ответ 4
Я бы сделал это так: import random spisok = ["Alex", "Kate", "Love", "World", "Peace", "Putin",] empty_list = [] while len(empty_list) != len(spisok): randitem = random.choice(spisok) if randitem not in empty_list: empty_list.append(randitem) print(empty_list) Обновление Но этот вариант не подходит для длинных списков. А вот @ВОРОН бы сделал так: import random spisok = ... empty_list = [] for item in spisok: rand_index = random.randint(0, len(empty_list) empty_list.insert(rand_index), item) и этот вариант гораздо лучше.Ответ 5
@BOPOH, чтобы и список исходный не меняло, и памяти почти не ело )) Challange accepted import random def iter_shuffled(l): indices = list(range(len(l))) random.shuffle(indices) for i in indices: yield l[i] spisok = ["Love", "World", "Peace", "Putin",] for item in iter_shuffled(spisok): print (item) UPDATE Т.к. при копировании списка элементами нового списка станут ссылки на исходные значения, то можно обойтись и без списка индексов: import random def iter_shuffled(l): new_list = list(l) random.shuffle(new_list) for item in new_list: yield item Но тогда смысл оформлять код в виде функции-итератора практически теряется и код можно сократить до следующих строк: import random spisok = ["Love", "World", "Peace", "Putin",] new_list = list(spisok) random.shuffle(new_list) print new_listОтвет 6
чтобы и список исходный не меняло, и памяти почти не ело )) from random import shuffle lst = [ "Alex", "Kate", "Love", "World", "Peace", "Freddie Mercury" ] idx = list(range(len(lst))) shuffle(idx) while idx: print(lst[idx.pop()])Ответ 7
Я исправил код: import random spisok = ["Alex", "Kate", "Love", "World", "Peace", "Putin",] empty_list = [] count = len(spisok) schetchik = 0 while count != schetchik: for item in spisok: item = random.choice(spisok) empty_list.append(item) schetchik += 1 print(empty_list)Ответ 8
Код из ответа Артёма не выполняет изначальное условие задачи: "...выводить список слов в случайном порядке. На экране должны печататься без повторений все слова из представленного списка..." так как будут выводиться повторы из списка - отсутствует проверка на уже выбранные элементы. Чуть поправим: import random spisok = ["Alex", "Kate", "Love", "World", "Peace", "Putin",] empty_list = list() count = len(spisok) schetchik = 0 while count != schetchik: for i in spisok: item = random.choice(spisok) if item in empty_list: print("Есть такие данные в новом списке!") else: empty_list.append(item) schetchik += 1 print(empty_list) # можно оставить вывод в for - увидим все попытки поиска, либо вывести из цикла. Как уже замечали авторы в комментариях, есть более краткий и практичный вариант с созданием среза изначального списка: import random spisok_slov = ["кот", "кот", "код", "код", "ток", "ток", "ток", "ток", "тук-тук", "мак", "крот", "плот", "кнут"] final_no_repeat_list = list(set(spisok_slov[:])) random.shuffle(final_no_repeat_list) print(final_no_repeat_list)Ответ 9
Можно даже так: >>> import random >>> array = ["Alex", "Kate", "Love", "World", "Peace", "Putin"] >>> print(*random.sample(set(array), len(set(array))), sep='\n')Ответ 10
import random inp = ["Alex", "Kate", "Love", "World", "Peace", "Putin"] l = list(set(inp)) random.shuffle(l) print (l)
Комментариев нет:
Отправить комментарий