【问题标题】:assign values to variables in python3, only last set is assigned to all在python3中为变量赋值,只有最后一组被赋值给所有
【发布时间】:2020-11-18 18:26:55
【问题描述】:

我试图为每个变量分配具有适当长度的单词的设置值。如果我打印出来,单个步骤看起来不错,但是当我尝试查看里面的内容时,我得到了最后一组。

to_add = set()

 for x in self.domains:

     to_add.clear() # clear set for next search

     for word in self.domains[x]:

         if len(word) == (x.length):

             to_add.add(word)

     self.domains[x] = to_add

     for variable in self.crossword.variables:

         if variable == x:

             self.crossword.values = self.domains[x]

             variable = to_add

             print ("")

             print ("***************")

             print (x)

             print (self.crossword.values)

             print (variable)

             print ("***************")

 print("-----------------")

 print (self.domains)

 print("-----------------")

作为我得到的错误的一个例子(我得到六个变量中的每一个都具有相同的值,即使它们不相同):

(4, 4) across : 5 {'DEPTH', 'INFER', 'GRAPH', 'ALPHA', 'FALSE', 'LOGIC', 'PRUNE', 'BAYES', 'TRUTH', 'START'} {'DEPTH', 'INFER', 'GRAPH', 'ALPHA', 'FALSE', 'LOGIC', 'PRUNE', 'BAYES', 'TRUTH', 'START'}

(6, 5) across : 6 {'SEARCH', 'NEURAL', 'REASON', 'MARKOV', 'CREATE'} {'SEARCH', 'NEURAL', 'REASON', 'MARKOV', 'CREATE'}

{Variable(2, 1, 'down', 5): {'SEARCH', 'NEURAL', 'REASON', 'MARKOV', 'CREATE'}, Variable(1, 7, 'down', 7): {'SEARCH', 'NEURAL', 'REASON', 'MARKOV', 'CREATE'}, Variable(1, 12, 'down', 7): {'SEARCH', 'NEURAL', 'REASON', 'MARKOV', 'CREATE'}, Variable(2, 1, 'across', 12): {'SEARCH', 'NEURAL', 'REASON', 'MARKOV', 'CREATE'}, Variable(4, 4, 'across', 5): {'SEARCH', 'NEURAL', 'REASON', 'MARKOV', 'CREATE'}, Variable(6, 5, 'across', 6): {'SEARCH', 'NEURAL', 'REASON', 'MARKOV', 'CREATE'}}

谁能告诉我如何解决这个问题?

谢谢

【问题讨论】:

    标签: python-3.x artificial-intelligence cs50


    【解决方案1】:

    您正在重复添加和清除相同的集合

    self.domains[x] = to_add 不会将副本添加到 domains,因此每次修改 to_add 时,您也在修改已添加到 domains 的内容,因为它们都是相同的集合。

    最简单的解决方案是每次迭代创建一个新的to_add 集:

    for x in self.domains:
    
        # Create a new set each time instead of clearing the old one
        to_add = set()  
    
        for word in self.domains[x]:
            . . .
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2012-07-23
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多