【问题标题】:Python recursive function seems to lose some variable valuesPython递归函数似乎丢失了一些变量值
【发布时间】:2013-01-25 19:10:39
【问题描述】:

我有 4x4 字母表,我想在那里找到所有可能的路径。他们是词的候选者。我对变量“used”有问题它是一个列表,其中包括路径已经存在的所有位置,因此它不会再去那里。每条路径都应该有一个使用列表。但它不能正常工作。例如,我有一个打印当前单词和使用列表的测试打印。有时这个词只有一个字母,但路径已经遍历了所有 16 个单元格/索引。

大小为 8 的 for 循环适用于所有可能的方向。主函数执行 16 次追逐函数 - 每个可能的起点执行一次。移动函数在移动到特定方向后返回索引。并且 is_allowed 测试是否允许移动到某个部门。 样本输入:oakaoastsniuttot。 (4x4 表,其中前 4 个字母是第一行等) 示例输出:可以在某个单词的字典中找到的所有真实单词 在我的情况下,它可能会输出一两个词,但不是几乎全部,因为它认为某些单元格被使用了,即使它们没有。

def chase(current_place, used, word):

   used.append(current_place)   #used === list of indices that have been used
   word += letter_list[current_place]
   if len(word)>=11:
       return 0
   for i in range(3,9):
       if len(word) == i and word in right_list[i-3]:  #right_list === list of all words
        print word
        break
   for i in range(8):
      if is_allowed(current_place, i) and (move(current_place, i) not in used):    
          chase(move(current_place, i), used, word)

【问题讨论】:

  • 从您的解释中看不到您正在尝试做什么。你能提供一个示例输入和输出吗?
  • 输入例如 Oakaoastsniuttot。那是这些相同字符串的 4X4 表的字符串表示形式。并且输出应该是您可以获得的所有真实单词(可以在字典中找到)。在像这样的小表中: OYN ETA MSK 例如,您可以找到 Y E S 输入/输出未按我想要的方式显示。但是下一个字母可以是任意8个方向(上、下、左、右、左下、右下、直上、左上)

标签: python function variables recursion


【解决方案1】:

问题在于只有一个used 列表可以传递。在chase() 中有两个选项可以解决此问题:

  1. 复制used 并使用该副本。
  2. 在从函数返回之前,撤消在开始时所做的append()

【讨论】:

  • 你的意思是我应该这样做:used2 = used,然后将 used2 列表传递给下一个追逐?
  • @TeemuLeivo:差不多。 used2 = used[:](没有[:]used2 将引用与used 相同的列表)。
  • 解决了!谢谢!实际上我之前尝试过 used2=used 修复,但正如你所解释的那样,那没有用。作为一个更理论的问题:如果 used 是一个局部变量,那么为什么它可以在其他函数中使用?
  • @TeemuLeivo:used 包含对列表的引用。即使引用是本地的,列表本身也不是。任何通过本地引用修改列表的人仍在修改一个共享列表。
  • 谢谢!这清除了很多。现在更好地了解“幕后”发生了什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 2016-09-28
相关资源
最近更新 更多