【问题标题】:how can I fix this Towers of Hanoi program for my desired output?我怎样才能为我想要的输出修复这个河内塔程序?
【发布时间】:2018-10-18 12:58:07
【问题描述】:
def moveTower(height,fromPole, toPole, withPole):
    if height >= 1:
        moveTower(height-1,fromPole,withPole,toPole)
        moveDisk(fromPole,toPole)
        moveTower(height-1,withPole,toPole,fromPole)

def moveDisk(fp,tp):
    print("("+fp + "," +tp+')')


moveTower(4,"A","B","C") 

我需要输出是一个元组列表(例如:[('A','C'),('A','B'), ...]

当前输出:

(A,C)
(A,B)
(C,B)
(A,C)
(B,A)
(B,C)
(A,C)
(A,B)
(C,B)
(C,A)
(B,A)
(C,B)
(A,C)
(A,B)
(C,B)

【问题讨论】:

    标签: python python-3.x tuples


    【解决方案1】:

    你应该打印元素。可能最优雅的就是在这里构造一个generator

    def moveTower(height,fromPole, toPole, withPole):
        if height >= 1:
            yield from moveTower(height-1,fromPole,withPole,toPole)
            yield (fromPole, toPole)
            yield from moveTower(height-1,withPole,toPole,fromPole)

    yield <expr> 因此在此处发出由<expr> 在生成器中构造的值,yield from <iterable> 用于将<iterable> 中的所有元素作为此生成器的元素发出。

    然后我们可以使用list(..) 来实现生成器:

    >>> list(moveTower(2, *'ABC'))
    [('A', 'C'), ('A', 'B'), ('C', 'B')]
    >>> list(moveTower(3, *'ABC'))
    [('A', 'B'), ('A', 'C'), ('B', 'C'), ('A', 'B'), ('C', 'A'), ('C', 'B'), ('A', 'B')]
    >>> list(moveTower(4, *'ABC'))
    [('A', 'C'), ('A', 'B'), ('C', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('A', 'C'), ('A', 'B'), ('C', 'B'), ('C', 'A'), ('B', 'A'), ('C', 'B'), ('A', 'C'), ('A', 'B'), ('C', 'B')]
    

    【讨论】:

      【解决方案2】:

      对代码最简单的修改是将它们附加到一个列表中:

      result = []
      
      def moveTower(height,fromPole, toPole, withPole):
          if height >= 1:
              moveTower(height-1,fromPole,withPole,toPole)
              moveDisk(fromPole,toPole)
              moveTower(height-1,withPole,toPole,fromPole)
      
      def moveDisk(fp,tp):
          result.append((fp,tp))
      
      moveTower(4,"A","B","C")
      print(result)
      

      输出:

      [('A', 'C'), ('A', 'B'), ('C', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('A', 'C'), ('A', 'B'), ('C', 'B'), ('C', 'A'), ('B', 'A'), ('C', 'B'), ('A', 'C'), ('A', 'B'), ('C', 'B')]
      

      【讨论】:

        猜你喜欢
        • 2018-09-21
        • 2020-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多