【发布时间】:2016-07-18 22:51:36
【问题描述】:
我是 python 新手,我想尝试用它来解决电视节目倒计时中的数字游戏。 (rules for those unfamiliar)。我用谷歌搜索,结果是this has been done before - 但我没有正确理解代码,然后想为什么不自己试一试。我已经搜索过,还有其他人在寻找递归解决方案,但我无法让他们为我的示例工作(抱歉,毕竟我对此很陌生)。
我要做的是获取一个数字列表,然后循环将操作应用于它们的对并用输出替换该对。这将递归地重复,直到我们找到我们正在寻找的数字,或者数字列表的大小减少到 1。
我的函数“single_move_generator”是一个生成元组的生成器,形式为 ((a,b,operation), answer, numbers left to use)。我想将元组的最后一部分作为新列表返回到函数中,但也要跟踪第一部分,因为它是我们如何实现答案的“历史”。目前我有以下内容:
target = 155
numbers_to_use = [6, 25, 3, 2]
for a in single_move_generator(numbers):
if a[1] == target:
print(a[0])
for b in single_move_generator(a[2]):
if b[1] == target:
print(a[0],b[0])
quit()
for c in single_move_generator(b[2]):
if c[1] == target:
print(a[0],b[0],c[0])
quit()
产生:
(25, 6, 'add') (3, 2, 'add') (31, 5, 'multiply')
但我希望能够给它一个更大的数字列表,并让它继续直到列表达到第一个大小。我怀疑我需要一个 while 循环 - 但这种尝试不起作用。它不会找到目标或跟踪移动历史。
numbers_available = numbers
while len(numbers_available) >1 and target not in numbers_available:
for a in single_move_generator(numbers_available):
if a[1] == target:
print("Target Found", a)
break
numbers_available = a[2]
numbers_available = a[2]
我觉得必须有一种 Python 的方式来做这件事,这比我做的要整洁得多 - 任何提示都将不胜感激。谢谢!
【问题讨论】:
-
我没有在你的代码中找到任何递归。在另一个循环下循环称为“嵌套循环”。
-
什么是递归?我可能误会了。我接受我发布的是一个嵌套循环,但我想永远继续这种嵌套(或者更确切地说,直到达到某个点,但不知道需要多少循环)
-
那么回溯是给你的。谷歌它。
标签: python loops for-loop recursion