2024-10-06 11:55:57 发布
网友
我熟悉河内大厦的递归函数。在
现在我需要可视化的运动,用星号表示碟片(我想碟片编号=星号的数目是有意义的)。在
有没有人有一个提示或例子,说明如何使用
* *** *** ***** ***** * -------------------- ----------------------- ...
还是类似的?在
这是我的教授提供的示例代码,我确实理解递归是如何工作的。但是在一次Python讲座之后,我不得不说我对可视化任务有些不知所措。在
我们将非常感谢您的帮助!在
正如philipp提到的,你需要一个国家的概念。在
状态可以用多种方式表示,但最终目标是打印到屏幕上的X乘Y字符网格。在
例如,如果我们想打印
* *** *****
我们可以在代码中以3x5数组的形式存储它。在
然后你可以循环这个并打印它。在
for row in state: for character in row: print(character, end='')
一条丑陋的捷径
print('\n'.join(''.join(y) for y in x))
如果你把它想象成电影,动画的每一帧都是X乘Y数组。每一帧也是代码中的打印语句之一。难点在于将一个动作(如“从1移动到3”)转换为状态表示。在
如果我们使用X乘Y数组作为状态,则很难从space1移动到space2,因为字符数组不会告诉您在space1中有多少个环以及环有多大。这表明我们需要一个更好的州。在
这是非常开放的,但是一个解决方案是,如果我们应用面向对象的编程,我们可以定义环和塔对象,其中塔是环的集合。因此,操作会在塔之间移动环,环和塔对象的状态用于创建X乘Y数组。在
我会很懒,把一个环表示为整数,而towers是一个3deques的数组。初始状态可以看起来像
from collections import deque towers = [deque([1,2,3]), deque(), deque()]
现在您需要一个从U塔移动到V塔的函数:
def move_ring(from, to): top_ring = from.popleft() to.append(top_right)
最后,您需要从towers/rings状态转换为可打印的X乘Y数组。一次渲染每个塔以及其中的每个环会更容易:
def render_ring(ring): result = '*' * ring # the character * repeated ring times. return result.center(user_input) # add the spaces required def render_tower(tower): result = [] for ring in tower: result.append(render_ring(ring)) return result
最后,我们希望将这些塔组合成一个可打印的数组。您可以使用zip进行此操作。在
def render_final(塔楼): 塔楼结果=[] 塔内塔架: 塔楼_结果.append塔(渲染塔) 结果=[] 对于zip中的所有行(结果): 结果.追加(''.join(所有行)) 返回结果
现在您应该能够打印出结果并看到动画的帧。在
这会帮助你走上正轨。以上代码未经测试,请将其视为伪代码。我也不建议使用整数和deques列表作为您的状态,因为这无助于代码清洁。在
还有一件事,如果你打印出结果,它不会很漂亮,因为文本将打印并向下滚动。但是,如果使用内置的curses库,则可以获得漂亮的输出。在
正如philipp提到的,你需要一个国家的概念。在
状态可以用多种方式表示,但最终目标是打印到屏幕上的X乘Y字符网格。在
例如,如果我们想打印
我们可以在代码中以3x5数组的形式存储它。在
^{pr2}$然后你可以循环这个并打印它。在
一条丑陋的捷径
如果你把它想象成电影,动画的每一帧都是X乘Y数组。每一帧也是代码中的打印语句之一。难点在于将一个动作(如“从1移动到3”)转换为状态表示。在
如果我们使用X乘Y数组作为状态,则很难从space1移动到space2,因为字符数组不会告诉您在space1中有多少个环以及环有多大。这表明我们需要一个更好的州。在
这是非常开放的,但是一个解决方案是,如果我们应用面向对象的编程,我们可以定义环和塔对象,其中塔是环的集合。因此,操作会在塔之间移动环,环和塔对象的状态用于创建X乘Y数组。在
我会很懒,把一个环表示为整数,而towers是一个3deques的数组。初始状态可以看起来像
现在您需要一个从U塔移动到V塔的函数:
最后,您需要从towers/rings状态转换为可打印的X乘Y数组。一次渲染每个塔以及其中的每个环会更容易:
最后,我们希望将这些塔组合成一个可打印的数组。您可以使用zip进行此操作。在
def render_final(塔楼): 塔楼结果=[] 塔内塔架: 塔楼_结果.append塔(渲染塔) 结果=[] 对于zip中的所有行(结果): 结果.追加(''.join(所有行)) 返回结果
现在您应该能够打印出结果并看到动画的帧。在
这会帮助你走上正轨。以上代码未经测试,请将其视为伪代码。我也不建议使用整数和deques列表作为您的状态,因为这无助于代码清洁。在
还有一件事,如果你打印出结果,它不会很漂亮,因为文本将打印并向下滚动。但是,如果使用内置的curses库,则可以获得漂亮的输出。在
相关问题 更多 >
编程相关推荐