0
votes

Comment créer des variables à la volée en Python?

J'ai le dictionnaire et le code suivants, je veux concaténer les valeurs du dictionnaire, si la tête et la queue des valeurs sont les mêmes:

    import random

    dic={'1':[(1,2,4,3),(1,2,3,1)],'2':[(2,4,2,3),(2,6,5,3)],'3':[(3,5,9,1),(3,2,5,2),(3,7,8,1)]}

    c1= (1,2,4,3)
    c2=random.choice(dic[str(c1[-1])])
    c3=random.choice(dic[str(c2[-1])])
    c4=random.choice(dic[str(c3[-1])])
    c5=random.choice(dic[str(c4[-1])])
    print(c1,c2,c3,c4,c5)

J'obtiens un résultat comme celui-ci : (1, 2, 4, 3) (3, 5, 9, 1) (1, 2, 4, 3) (3, 2, 5, 2) (2, 4, 2, 3) code> Le dictionnaire a le premier élément du tuple comme clé, pour le c1 donné, j'utilise le dernier élément de c1 comme clé pour obtenir un tuple aléatoire de dic , de cette manière, j'obtiens c2 , c3 , c4 , c5 . Ma question est la suivante: je veux écrire une fonction avec une entrée intégrale, qui pourrait être 10 ou 20, afin que je puisse obtenir c10 , c20 de manière itérative, pas comme maintenant je dois écrivez chaque étape de c1 , c2 , c3 , c4 , c5 , c6 ....

Simplement, comment créer des variables dynamiquement>

Toute aide serait appréciée.


8 commentaires

Votre question et votre description ne correspondent pas ... Vous souhaitez une concaténation ou une création de variables dynamiques?


Vérifiez ceci aussi; stackoverflow .com / questions / 1373164 /…


Est-ce que cela répond à votre question? Comment créer un nombre variable de variables?


Vous avez juste besoin de la concaténation? Je veux dire, pour ce que je vois, vous n'avez pas besoin d'avoir réellement c1, c2 ... cn mais autre chose que d'imprimer la concaténation finale.


oui, j'ai juste besoin de la concaténation, mais la longueur de la concaténation doit être variable, pas seulement 5 comme dans l'exemple


Très bien, je comprends. Laissez-moi élaborer la réponse avec une solution possible


Je pense que vous devriez mettre à jour le nom de la question, en passant. "Comment créer des variables à la volée en Python?" ne représente pas ce que vous vouliez réaliser.


merci pour le nouveau nom


3 Réponses :


0
votes

Loin de comprendre votre question, j'en déduis que vous voulez un moyen automatisé de créer des variables à la volée, c'est-à-dire avoir des variables c sans les saisir vous-même.

Vous avez deux méthodes:

  1. Utilisation de exec : exec est utilisé pour exécuter du code Python à partir du code lui-même. Vous pouvez donc essayer quelque chose comme ceci:
inp = int(input("How many? "))
vals = {}
for i in range(inp):
    val = 10 # Value
    vals[f"c{i}"] = val # or simply vals[i]

Mais ce n'est pas recommandé

  1. Utilisation du dictionnaire: Les dictionnaires ont été conçus pour cela et sont parfaits ici
inp = int(input('How many? ))
for i in range(inp):
    val = 20 # Enter the value here
    exec(f"c{i}=val")


2 commentaires

val = 10 est une constante, mais pour chaque c0, c1, c2, ... j'ai besoin qu'ils soient différents, et c1 est calculé en fonction de c0, c2 est calculé en fonction de c1, c3 est calculé en fonction de c2, .. .usw


vals = {} for i in range (inp): if i == 0: vals [f "c {0}"] = (1,2,4,3) #i> 0 else: vals [f "c { i} "] = choix aléatoire (dic [str (vals [f" c {i-1} "] [- 1])])



0
votes

Je pense que l'utilisation de la récursivité est une bonne approche pour résoudre ce problème.

dic = {'1': [(1,2,4,3),(1,2,3,1)],
       '2': [(2,4,2,3),(2,6,5,3)],
       '3': [(3,5,9,1),(3,2,5,2),(3,7,8,1)]}

concatenator(dic, 5)
# outputs: '(1, 2, 3, 1)(1, 2, 3, 1)(1, 2, 3, 1)(1, 2, 3, 1)(1, 2, 3, 1)'

En utilisant cette fonction comme suit: (i est le nombre de tuples que vous voulez avoir à la fin) p >

import random

def concatenator(dictionary, i, key=1):
    if i > 0:
        tuple_chosen = random.choice(dictionary[str(key)])
        next_key = tuple_chosen[-1]
        return str(tuple_chosen) + concatenator(dictionary, i-1, key=next_key)
    else:
        return ""


1 commentaires

très agréable et chic 👍👍👍👍



0
votes

Vous pouvez le faire avec une compréhension de liste en utilisant l'opérateur d'expression d'affectation : = dans Python 3.8.

>>> import random
>>> dic={'1':[(1,2,4,3),(1,2,3,1)],'2':[(2,4,2,3),(2,6,5,3)],'3':[(3,5,9,1),(3,2,5,2),(3,7,8,1)]}
>>> y = (1,2,4,3)
>>> n = 20
>>> [(y:=random.choice(dic[str(y[-1])])) for _ in range(n)]
[(3, 2, 5, 2), (2, 4, 2, 3), (3, 7, 8, 1), (1, 2, 4, 3), (3, 2, 5, 2), (2, 4, 2, 3), (3, 7, 8, 1), (1, 2, 4, 3), (3, 5, 9, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 4, 3), (3, 2, 5, 2), (2, 4, 2, 3), (3, 7, 8, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 3, 1), (1, 2, 4, 3)]

Le choix initial de y code> n'a pas vraiment d'importance, tant que str (y [-1]) est une clé dans dic.


0 commentaires