【问题标题】:Python Print parameter endPython打印参数结束
【发布时间】:2018-04-20 20:59:14
【问题描述】:

使用 end 时如何从输出中删除最后一个“add -->”,我在这里没有使用 sep,bcoz sep 在这里不会有任何影响,因为 print 语句一次只打印 1 个项目,并且以 i 的 incr 结尾

def fibonaci_num(n):
    if n <= 1:
        return n
    else:
        return fibonaci_num(n-1) + fibonaci_num(n-2)

N = 10

for i in range(N):
    print(fibonaci_num(i), end=' add -> ')

我的输出

0 add -> 1 add -> 1 add -> 2 add -> 3 add -> 5 add -> 8 add -> 13 add -> 21 add -> 34 add -> 

【问题讨论】:

  • 你不能。解决办法是不要使用end
  • 应该有办法
  • @Aran-Fey - 不,不符合我的情况
  • 是的。绝对符合你的情况。如果您想就该主题进行实际讨论,请先解释为什么它不能解决您的问题。

标签: python


【解决方案1】:

不可避免的蟒蛇式单线:

print(*map(fibonaci_num, range(N)), sep=' add -> ')

【讨论】:

    【解决方案2】:

    你可以使用 if 语句来检查它是否是最后一个数字:

    def fibonaci_num(n):
        if n <= 1:
            return n
        else:
            return fibonaci_num(n-1) + fibonaci_num(n-2)
    
    N = 10
    
    for i in range(N):
        print(fibonaci_num(i), end='')
        if i != N-1:
            print(' add -> ', end='')
    

    【讨论】:

    • 使用 Sep 在各方面都更好,但如果由于某种原因(可能是课程?)不允许您使用它,那么它可以正常工作
    • @GrantWilliams:sep 在各个方面都更好,还是扩展性更差?使用*map() 的调用不会将整个列表扩展到内存中,而if 方法不会?
    • @JeffLearman,就性能而言很难说。我主要是在谈论易用性/可读性。不过,测试它会很有趣。我猜最好的性能来自使用 sep 的列表理解,但我也懒得测试它
    • 使用生成器的快速测试,*args 导致创建整个列表,因此在某些情况下它不是最佳解决方案。但不是在打印的情况下,所以sep这里肯定更好。
    【解决方案3】:

    在这里,我使用三元运算符简化了答案。愿它会有所帮助和更好。

    def fib(n):    
        a, b = 0, 1
        while a < n:
            endstatement = '-' if (b < n) else ''
            print(a, end=endstatement)
            a, b = b, a+b
        print()
    
    
    # Now call the function:
    fib(1000)
    

    结果0-1-1-2-3-5-8-13-21-34-55-89-144-233-377-610-987

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      相关资源
      最近更新 更多