Voici mon code
N = namedtuple("N", ['ind', 'set', 'v']) def solve() items=[] stack=[] R = set(range(0,8)) for i in range(0,8): items.append(N(i,R,8)) stack.append(N(0,R-set(range(0,1)),i)) while(len(stack)>0): node = stack.pop() print node print items[node.ind] items[node.ind].v = node.v
Dans la dernière ligne, je ne peux pas définir la valeur des items[node.ind].v
node.v
sur node.v
comme je le souhaite et node.v
l’erreur
"AtsortingbuteError: can't set atsortingbute"
Je ne sais pas ce qui ne va pas, mais cela doit être basé sur la syntaxe, car utiliser des instructions comme node.v+=1
montre également la même erreur. Je suis nouveau sur Python, alors s’il vous plaît, suggérez un moyen de rendre le changement ci-dessus possible.
items[node.ind] = items[node.ind]._replace(v=node.v)
(Remarque: ne vous découragez pas d’utiliser cette solution en raison du trait de soulignement principal dans la fonction _replace. Plus précisément, certaines fonctions de la fonction namedtuple ont un trait de soulignement principal qui n’est pas destiné à être “privé”)
namedtuple
s sont immuables, tout comme les tuples standard. Vous avez deux choix:
Le premier ressemblerait à:
class N(object): def __init__(self, ind, set, v): self.ind = ind self.set = set self.v = v
Et ce dernier:
item = items[node.ind] items[node.ind] = N(item.ind, item.set, node.v)
Edit : si vous voulez le dernier, la réponse d’Ignacio fait la même chose de manière plus nette en utilisant la fonctionnalité cuite au four.