2015-10-10 3 views
2

Поэтому у меня есть этот список:Как сделать random.shuffle действительно случайным?

words = ["Games","Development","Keyboard","Speed","Typer","Anything","Alpha","Zealous","Accurate","Basics","Shortcut","Purpose","Window","Counter","Fortress","Modification","Computer","Science","History","Football","Basketball","Solid","Phantom","Battlefield","Advanced","Warfare","Download","Upload","Antidisestablishmentarianism","Supercalifragilisticexpialidocious","Discombobulation","Liberated","Assassin","Brotherhood","Revelation","Unity","Syndicate","Victory"] 

И у меня есть это, который перемешивает его и отображает его на этикетке:

entry.delete(0, tkinter.END) 
random.shuffle(words) 
label.config(text=str(words[1])) 
timeLabel.config(text="Time: " + str(time_score)+ "s") 

Я хотел бы знать, как сделать это перетасовка действительно случайным, потому что мне кажется, что я повторяю одно и то же слово снова и снова, несмотря на то, что в списке много. Возможно, есть способ удалить значение из списка после его удаления из него, чтобы он не отображался снова?

+0

Что должно произойти после того, как слово _every_ будет удалено из списка, чтобы оно не отображалось снова? Кроме того, слово, появляющееся дважды в строке, означает, что это _is_ random. Если вы можете сделать прогноз относительно будущего состояния записи в зависимости от его текущего состояния (например, «запись показывает« Игры »прямо сейчас, так что это будет не в следующий раз»), то это будет менее случайным. – Kevin

+0

Не каждое слово будет удалено, так как этот блок кода работает только 12 раз, и в списке есть более 12 слов. – Inkblot

ответ

3

Вы можете попробовать:

import random 
random_word = random.choice(words) 

выбрать случайное слово из вашего массива. Тогда вы можете сделать следующее:

words.remove(random_word) 

удалить это случайно выбранное слово из массива, чтобы избежать его повторного использования, если вы хотите получить следующее случайное слово.

Edit - ответ на комментарий

Когда я запускаю этот код ниже я получаю другое слово каждый раз. Это логика, которую вы ищете?

words = ["Games","Development","Keyboard","Speed","Typer","Anything","Alpha","Zealous","Accurate","Basics","Shortcut","Purpose","Window","Counter","Fortress","Modification","Computer","Science","History","Football","Basketball","Solid","Phantom","Battlefield","Advanced","Warfare","Download","Upload","Antidisestablishmentarianism","Supercalifragilisticexpialidocious","Discombobulation","Liberated","Assassin","Brotherhood","Revelation","Unity","Syndicate","Victory"] 

import random 
while words: 
    random_word = random.choice(words) 
    print(random_word) 
    words.remove(random_word) 
+0

Я так выразился: 'random_word = random.choice (words)' then' random.shuffle (random_word) 'then' words.remove (random_word)', и он выдает сообщение об ошибке: 'object 'str' не поддерживает присвоение элемента. Разве я не ошибался? – Inkblot

+0

Нет необходимости в 'random.shuffle (random_word)' – grael

+0

Но после того, как я удалю это, слова не будут перемешаны – Inkblot

4

решения вариации @ Grael является перетасовать, а затем использовать list.pop для удаления элементов. Вам не нужно перетасовывать свой список более одного раза.

In [54]: words = ['foo','bar','baz','quux','bizby','squiggle'] 

In [55]: random.shuffle(words) 

In [56]: while words: print(words.pop()) 
bizby 
bar 
foo 
baz 
squiggle 
quux 
Смежные вопросы