Génerer valeurs dictionnaires différentes PYTHON 2.7
Résolu
boliro
-
trifou -
trifou -
Bonjour,
j'aimerai définir une fonction init_system_obstacle(obstacle) qui me permet de générer aléatoirement des chiffres entre 1 et 12 et les attribuer aux valeurs des clés de mon dictionnaire obstacle : "wun" "ch-sou1" "ch-sou2","puit1","puit2". J'ai trouvé cette solution, mais elle ne me semble pas pratique et pertinente du tout : tant que 1 premier puis second etc... élément est égale à un autre, on attribue une valeur aléatoire aux valeurs de clé. Comme ci-dessous :
En espérant que vous puissiez m'aider, et que vous m'ayez compris
Je vous remercie
j'aimerai définir une fonction init_system_obstacle(obstacle) qui me permet de générer aléatoirement des chiffres entre 1 et 12 et les attribuer aux valeurs des clés de mon dictionnaire obstacle : "wun" "ch-sou1" "ch-sou2","puit1","puit2". J'ai trouvé cette solution, mais elle ne me semble pas pratique et pertinente du tout : tant que 1 premier puis second etc... élément est égale à un autre, on attribue une valeur aléatoire aux valeurs de clé. Comme ci-dessous :
def init_system_obstacle(obstacle): obstacle["wum"]=random.randint(1,12) obstacle["ch-sou1"]=random.randint(1,12) while obstacle["wum"]==obstacle["ch-sou1"]: obstacle["ch-sou1"]=random.randint(1,12) obstacle["ch-sou2"]=random.randint(1,12) while obstacle["ch-sou2"]==obstacle["ch-sou1"] or obstacle["ch-sou2"]==obstacle["wum"]: obstacle["ch-sou2"]=random.randint(1,12) obstacle["puit1"]=random.randint(1,12) while obstacle["puit1"]==obstacle["wum"] or obstacle["puit1"]==obstacle["ch-sou1"] or obstacle["puit1"]==obstacle["ch-sou2"]: obstacle["puit1"]=random.randint(1,12) obstacle["puit2"]=random.randint(1,12) while obstacle["puit2"]==obstacle["wum"] or obstacle["puit2"]==obstacle["ch-sou1"] or obstacle["puit2"]==obstacle["ch-sou2"] or obstacle["puit2"]==obstacle["puit1"]: obstacle["puit2"]=random.randint(1,12) print obstacle return obstacle
En espérant que vous puissiez m'aider, et que vous m'ayez compris
Je vous remercie
A voir également:
- Génerer valeurs dictionnaires différentes PYTHON 2.7
- 38 dictionnaires et recueils de correspondance - Télécharger - Dictionnaires & Langues
- Citizen code python avis - Accueil - Outils
- Generer mot de passe - Télécharger - Sécurité
- Comment générer un qr code - Guide
- Excel liste de valeurs - Guide
1 réponse
Bonsoir,
En travaillant avec une liste de départ des nombres à laquelle on ôtera les nombres déjà utilisés.
Bien plus concis avec random.sample, dict.update et zip
En travaillant avec une liste de départ des nombres à laquelle on ôtera les nombres déjà utilisés.
def init_system_obstacle(obstacle): numbers = list(range(1, 13)) keys = ('wum', 'ch-sou1', 'ch-sou2', 'puit1', 'puit2') for key in keys: number = random.choice(numbers) numbers.remove(number) obstacle[key] = number return obstacle
Bien plus concis avec random.sample, dict.update et zip
def init_system_obstacle(obstacle): keys = ('wum', 'ch-sou1', 'ch-sou2', 'puit1', 'puit2') numbers = random.sample(range(1, 13), len(keys)) obstacle.update(zip(keys, numbers)) return obstacle
Serait il possible que vous m'expliquiez le fonctionnement de cette ligne svp : ?
Merci
sert à grouper les éléments de plusieurs itérables indexables en s'appuyant sur les positions.
sert à ajouter des items au dictionnaire ou les mettre à jour s'ils sont déjà existants.
On peut passer en paramètre de cette méthode un autre dictionnaire.
Ou comme ce qui est fait avec zip, un itérable à 2 dimensions.