【问题标题】:how to remove the extra space after last number如何删除最后一个数字后的多余空格
【发布时间】:2020-10-03 08:41:09
【问题描述】:

在我的程序中,我在最后一个数字之后打印了一个额外的空格。我怎样才能删除它?

def fibonacci(n):
a = 0
b = 1
if n == 1:
    print(a, end=' ')
else:    
    print(a, end=' ')
    print(b, end=' ')
    for i in range(2, n):
        c = a + b
        a = b
        b = c
        print(c, end=' ')

fibonacci(int(input()))

输入:5
输出: 0 1 1 2 3
我在最后一个数字之后打印了一个额外的空格。

【问题讨论】:

  • 一旦你打印了一些东西,如果不使用像 ANSII 转义码这样的东西,你就不能真正“取消打印”它。如果你从函数中返回一个数字列表,然后在它们上调用" ".join(…),那会更简洁。
  • 不应打印 0 的初始 a 值 - 它不被视为斐波那契数。或者,您可以从等于 1a 开始。
  • @KarlKnechtel 我想打印这个数字序列:0 1 1 2 3 5 8 13 21 ... 所以,如果我想从这个序列中打印 1 个数字,输出将为 0。

标签: python python-3.x printing output


【解决方案1】:

将生成数字的过程与打印它们的过程分开。 (这是你应该做的事情无论如何,但在这种情况下也会发生这种情况,以便更容易解决问题。)例如,我们可以使用生成器来生成yield 多个值。注意我们不需要处理任何特殊情况,也可以use the pack-unpack idiom for multiple assignments

def fibonacci(n):
    a, b = 1, 1
    for i in range(n):
        yield a
        a, b = b, a + b

现在我们可以使用separator 代替end 来显示这些由空格分隔的值,并将每个值作为单独的参数传递。为此,我们需要使用* 进行显式解包。它看起来像:

print(*fibonacci(10), sep=' ')

我们得到了想要的结果,没有尾随空格:

1 1 2 3 5 8 13 21 34 55

【讨论】:

  • 您的解决方案正在运行,只是您应该将 a = 1 的值更改为 0。
  • 同样,0 不是斐波那契数
【解决方案2】:

@Carcigenicate 建议您可以使用列表,

在下面的代码中刚刚将print 语句替换为list.append()

def fibonacci(n):
    l1=[]
    a = 0
    b = 1
    if n == 1:
        print(a, end=' ')
        l1.append(str(a))

    else:    
        l1.append(str(a))
        l1.append(str(b))
        for i in range(2, n):
            c = a + b
            a = b
            b = c
            l1.append(str(c))
    tr=" ".join(l1)
    print(tr,end='')
    print('h',end='')

fibonacci(int(input()))

输出:

8
0 1 1 2 3 5 8 13h

正如您在输出中看到的,在最后一个数字13 之后没有多余的空格,我在13 之后打印了h

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多