【问题标题】:Add a space in between loop outputs using .format: Python 3使用 .format 在循环输出之间添加一个空格:Python 3
【发布时间】:2017-09-04 19:01:51
【问题描述】:

我正在尝试创建一个 for 循环,其中用户输入一个数字 n,输出提供从 n 到 n+6 的值范围。这需要全部打印在一行中,并与值输出之间的空格右对齐,但输出的末尾或开头没有空格

到目前为止,这是我想出的:

n=eval(input("Enter the start number: "))
for n in range(n,n+7):
  print("{0:>2}".format(n),end=" ")

但是,这会导致以下输出:

-2 -1  0  1  2  3  4 <EOL>

当我想要的输出看起来相似但没有末尾的空格时,如下所示:

-2 -1  0  1  2  3  4<EOL>

如何在值之间添加空格而不在最后一个术语中添加额外的空格?

【问题讨论】:

  • 末尾没有空格。所以只需使用end="" 而不是end= " " 也不要直接在用户输入上使用eval。而是使用int
  • 我试过了,但是使用 end="" 会导致负值之间没有空格,如下所示:-2-1 0 1 2 3 4
  • 是的,这是因为 for 循环。你可以join你的范围与空间。 " ".join(map(str, range(n,n+7)))。使用mapstr 会将整数转换为字符串,以便join 的有效类型。或' '.join([{0:&gt;2}".format(i) for i in range(n, n+ 7)])
  • 或者你可以使用printsep参数:print(*map("{0:&gt;2}".format, range(n, n + 7)), sep=' ')

标签: python python-3.x for-loop format


【解决方案1】:

我可以提出 3 条建议:

  1. 使用end="" 并手动插入空格

  2. 创建一个字符串并在循环后打印:

    s = ""
    for n in range(n, n+7):
        s+= str(n)+ " "
    s = s[:-1] #remove the ending whitespace
    print(s)
    
  3. 我推荐:使用 sys.stdout.write 代替打印: print 仅在打印换行符后显示消息。因此,如果循环中有很长的计算并且有end=" ",您只会在所有计算结束时看到结果。改用 sys.stdout

    for n in range(n, n+7):
        if n < n+7:
            sys.stdout.write(str(n)+" ")
        else:
            sys.stdout.write(str(n))
        sys.stdour.flush() #flush output to console
    

编辑:我进化了一点,这就是我现在使用的: 4. message = " ".join(range(n, n+7)) 这会在列表的所有元素之间放置空格。您可以选择任何分隔字符而不是空格(或多个字符)。

【讨论】:

  • 对不起。我无法让代码格式正常工作。我希望你仍然可以使用它
  • 嘿嘿,你的第二种方法是一个很好的解决方法,谢谢!
  • 嘿,没问题。很高兴能帮到你;-)
  • 嗨...只是为了完整性:我添加了我喜欢的第四种方法。虽然这将是 2 年多之后的时间。 ;)
猜你喜欢
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 2015-08-23
  • 2016-01-05
  • 2015-10-08
  • 1970-01-01
相关资源
最近更新 更多