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.
>>> t1 = ('a', 'b', 'c') >>> t2 = (1, 2, 3) >>> tuple(zip(t1, t2)) (('a', 1), ('b', 2), ('c', 3))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.
>>> d = {'a': 5} >>> d.update(dict(a=2, b=9)) >>> d {'a': 2, 'b': 9}Ou comme ce qui est fait avec zip, un itérable à 2 dimensions.
>>> d = {'a': 5} >>> d.update((('a', 1), ('b', 2))) >>> d {'a': 1, 'b': 2}