random.choice de l'ensemble ? python
Je travaille sur une partie 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 ensemble afin que je puisse facilement supprimer les lettres de la liste car elles sont devinées dans le jeu et ne sont donc plus disponibles pour être devinées à nouveau.
il dit que l' set
objet n'est pas indexable. Comment puis-je contourner ce problème ?
import random
aiTurn=True
while aiTurn == True:
allLetters = set(list('abcdefghijklmnopqrstuvwxyz'))
aiGuess=random.choice(allLetters)
print (aiGuess)
Solution du problème
Remarque (octobre 2020) : à partir de la v3.9, Python a officiellement déconseillé random.sample()
de travailler sur des ensembles, les conseils officiels étant de convertir explicitement l'ensemble en une liste ou un tuple avant de le transmettre, bien que cela ne résolve pas les problèmes d'efficacité.
>>> random.sample(set('abcdefghijklmnopqrstuvwxyz'), 1)
['f']
Documentation: https://docs.python.org/3/library/random.html#random.sample
Notez que choisir des éléments aléatoires dans un ensemble est extrêmement inefficace, peu importe comment vous le faites - cela prend du temps proportionnel à la taille de l'ensemble, ou pire si la table de hachage sous-jacente de l'ensemble est clairsemée en raison d'éléments supprimés.
Au lieu de cela, vous devriez probablement utiliser une structure de données différente qui prend en charge cette opération de manière efficace.
Commentaires
Enregistrer un commentaire