【问题标题】:Python: print without overwriting printed linesPython:打印而不覆盖打印行
【发布时间】:2015-09-07 12:22:28
【问题描述】:

我有

for i in range(0, 11): print i, "\n", i

我希望我的 python 程序为每个 for 循环都以这种方式打印

第一个循环:

1
1

第二个循环:

1
2
2
1

第三次循环:

1
2
3
3
2
1

我尝试过使用 \r\n 或 \033[1A 但它们只是覆盖了上一行。有没有办法可以将输出的行向下“推”,这样我就不会覆盖它?

【问题讨论】:

  • 将其存储在列表中并在最后打印列表项如何?
  • 只是一个提示:你可以做for i in range(11)。只要您希望范围从 0 开始,您就可以这样做。
  • 创建两个列表,一个包含原始数据,一个包含反向数据,连接并打印。 a=[1,2,3]; aa=a+a[::-1]; for i in aa: print i
  • 您需要一些高级控制台库,这可能取决于您的操作系统。如果您有 Linux 或 OSX,请尝试 curses 开始
  • 您想按照上面提到的方式打印每个循环还是只打印最后一个循环?我回答了一个打印每个循环的解决方案,但现在我不知道这是否是你想要的,因为其他答案只打印最后一个循环。

标签: python loops for-loop


【解决方案1】:

一种方法,

def foo(x, limit):
        if x < limit :
                print x
                foo(x + 1, limit)
                print x

foo(1, 11)

【讨论】:

  • 这可能不是最好的方法,但它与您尝试解决此问题的方式一致。
  • 我认为 OP 要求打印每个循环:循环 1:1,1;循环2:1,2,2,1;循环 3:1,2,3,3,2,1
  • 可能不止一种方法。有很多方法可以到达 dzen :-)
  • @jessag 好吧,如果您在以limit 作为循环变量的循环中调用foo,就会得到这样的结果。
  • @Sdwdaw 这绝对不是唯一的方法,我也不认为它是最好的:)
【解决方案2】:

您目前正在尝试在 1 个 for 循环中执行此操作。

按照我的建议,您可以通过使用列表来做到这一点

>>> l1 = []
>>> l2 = []
>>> for i in range(0, 11):
...   l1.append(i)
...   l2 = [i] + l2
>>> l1.extend(l2)
>>> for i in l1:
...  print i

0
1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
0

【讨论】:

    【解决方案3】:

    两个列表生成器的串联。

    >>> ladder = [x for x in range(5)] + [x for x in range(5,-1,-1)]
    >>> ladder
    [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
    >>> for x in ladder:
    ...     print x
    ... 
    0
    1
    2
    3
    4
    5
    4
    3
    2
    1
    0
    >>> 
    

    【讨论】:

    • 我认为'5'应该打印两次
    • 先替换range(6)
    • 我的意思是,每个值都应该打印两次。如果我更改为range(6),那么6 只会打印一次......不是吗?
    • 没有。只需将我的代码复制到您的 IDe 并启动它。范围(开始,停止,步骤)。停止不包括在范围内。 range(6) 为您提供从零到五的值。六个不包括在内。
    • 在您的 anwser 中,range(5,-1,-1) 开始打印 5range(5) 打印直到 4,然后 5 打印一次。您必须将反向列表更改为range(4,-1,-1),以便不打印 5。无论如何,我喜欢你的解决方案。
    【解决方案4】:

    解决这个问题的方法之一

    def two_side_print(start, end):
        text = [str(i) for i in range(start,end)]
        print '\n'.join(text), '\n', '\n'.join(reversed(text))
    
    two_side_print(1, 11)
    

    【讨论】:

      【解决方案5】:

      另一种选择是将打印的值保存在列表中,并在每次循环迭代中以相反的顺序打印该列表。

      我的建议:

      l = []
      
      for i in range(1, 5):
          print 'Loop '+str(i) # This is to ease seeing the printing results
      
          for val in l:
              print val
      
          print i
          l.insert(len(l),i)
      
          for val in reversed(l):
              print val
      

      0 迭代到5 的循环的输出:

      Loop 1
      1
      1
      Loop 2
      1
      2
      2
      1
      Loop 3
      1
      2
      3
      3
      2
      1
      Loop 4
      1
      2
      3
      4
      4
      3
      2
      1
      

      我希望这就是你要找的。​​p>

      【讨论】:

        【解决方案6】:

        您可以在这里使用递归函数来提供帮助:

        def print_both_ways(start, end):
            print(start)
            if start != end:
                print_both_ways(start+1, end)
        
            print(start)
        

        用法:

        print_both_ways(1,3) # prints 1,2,3,3,2,1 on separate lines
        

        【讨论】:

          猜你喜欢
          • 2021-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-14
          • 2017-02-15
          相关资源
          最近更新 更多