web-dev-qa-db-fra.com

random.choice à partir du set? python

Je travaille sur une partie d'IA d'un jeu de devinettes. Je veux que l'IA sélectionne une lettre au hasard dans cette liste. Je le fais comme un jeu pour pouvoir facilement supprimer des lettres de la liste telles qu'elles ont été devinées dans le jeu et ne sont donc plus disponibles pour être devinées à nouveau.

il est dit que l'objet set n'est pas indexable. Comment puis-je contourner cela?

import random 
aiTurn=True

while aiTurn == True:
    allLetters = set(list('abcdefghijklmnopqrstuvwxyz'))
    aiGuess=random.choice(allLetters)



    print (aiGuess) 
61
jamyn
>>> random.sample(set('abcdefghijklmnopqrstuvwxyz'), 1)
['f']

Documentation: https://docs.python.org/3/library/random.html#random.sample

73
NPE

Vous devriez utiliser random.choice(Tuple(myset)), car il est plus rapide et sans doute plus propre que random.sample. J'ai écrit ce qui suit pour tester:

import random
import timeit

bigset = set(random.uniform(0,10000) for x in range(10000))

def choose():
    random.choice(Tuple(bigset))

def sample():
    random.sample(bigset,1)[0]

print("random.choice:", timeit.timeit(choose, setup="global bigset", number=10000)) # 1.1082136780023575
print("random.sample:", timeit.timeit(sample, setup="global bigset", number=10000)) # 1.1889629259821959

D'après les chiffres, il semble que random.sample prend 7% de plus.

47
Scott Ritchie